왜.... 오셨나요?

부끄러워요

유니티개발 TIL

2주차 1일 TIL_C#기초-1(자료형, 연산자)

와피했는데 2025. 7. 7. 20:15

C#의 기초 자료형들과 연산자들에 대해서 배워보도록 한다

자료형과 변환

자료형 (Date Type)
  ● 자료(데이터)의 형태를 지정
  ● 데이터가 메모리에 저장되는 형태와 처리되는 방식을 명시하는 역할
  ● 0과 1만으로 구성된 컴퓨터에게 여러 형태의 자료를 저장하기 위함
  ● 형식: 메인코드v변수제목 = 값
  ● 형식2: 값을 초기화 안했을경우 "변수제목 = 값 혹은 입력코드"으로 처리할수있음

자료형의 종류
자료형
.NET 데이타 타입
크기 (바이트)
범위
sbyte
System.SByte
1
-128 ~ 127
byte
System.Byte
1
0 ~ 255
short
System.Int16
2
-32,768 ~ 32,767
ushort
System.UInt16
2
0 ~ 65,535
int
System.Int32
4
-2,147,483,648 ~ 2,147,483,647
uint
System.UInt32
4
0 ~ 4,294,967,295
long
System.Int64
8
-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
ulong
System.UInt64
8
0 ~ 18,446,744,073,709,551,615
float
System.Single
4
±1.5 × 10^-45 ~ ±3.4 × 10^38
double
System.Double
8
±5.0 × 10^-324 ~ ±1.7 × 10^308
decimal
System.Decimal
16
±1.0 × 10^-28 ~ ±7.9 × 10^28
char
System.Char
2
유니코드 문자
string
System.String
 
유니코드 문자열
bool
System.Boolean
1
true 또는 false

 

<정수형>

    ◆ 소수점을 제외한 숫자, 2의보수체계의 2진수(sbyte~ulong)

 

<부동소수점형>

    ◆ 0.1같은 소수점붙은 경우쓰임, 부동소수점형 == 부호(1비트)+ 지수 + 가수 ->지수와 가수는 쓰임새마다 비트가 틀릴수있음(float~decimal)

 

<문자형>

    ◆ 유니코드를 쓰는 이유는 영어 이외에 다양한 언어를 인식할 수 있음 대신 단점은 해당 지역코드가 다를경우 글자 깨짐현상이 일어남


변수 (Variable)
  ● 데이터를 저장하기 위해 프로그램에 의해 이름을 할당받은 메모리공간
  데이터를 저장할 수 있는 메모리공간을 의미하며, 저장된 값은 변경가능

 

1) 변수 선언

    ◆ C#에서 변수를 선언하는 방법은 다음같음

더보기

자료형 변수이름;

 

<예시>

int num; , int num1, num2, num3;

2) 변수 초기화

    ◆ 변수를 선언한 후에는 변수를 초기화하여 값을 저장해야 합니다. 변수를 초기화하는 방법은 다음 같음

더보기

변수이름 = 값;

 

<예시>

int num; // 변수 선언

      num = 10; // 변수 초기화


상수 (Constant)
  ● 프로그램이 실행되는 동안 변경할 수 없는 데이터 (고정값)
  프로그램에서 값이 변경되기를 원하지 않는 데이터가 있을 경우 사용
  데이터에 불러오기만 가능
   ●  변수 선언 앞에 const 키워드를 추가하여 상수 선언

 

1) 상수 선언 및 초기화

    ◆ 변수 선언 앞에 const 키워드를 추가하여 상수 선언

더보기

<예시>

const int MAX = 200;  // MAX 상수 변수를 선언하고 초기화
const int MIN;             // 상수는 초기화 없이 사용불가("= 값"가 없음)
MAX = 100;                // 상수는 데이터 변경 불가  


형변환 (Casting)
  ● 데이터를 선언한 자료형에 맞는 형태로 변환하는 작업
  ● C#의 자료형은 엄격하게 관리되기에 다른 자료형의 데이터를 저장 불가
  ● 다른 자료형의 데이터를 저장하기 위해선 형변화 과정을 거쳐야하며,
  ● 이 과정에서 보관할 수 없는 데이터는 버려짐

 

1) 명시적 형변환

    ◆ 명시적 형변환은 다음과 같이 (자료형)형식으로 수행할 수 있음.

더보기

int num1 = 10;

long num2 = (long)num1; // int를 long으로 명시적 형변환

 

2) 암시적 형변환

    ◆ 명시적으로 변환이 가능한 경우 자동으로 형변환이 진행됨

더보기

1. 작은 데이터 타입에서 더 큰 데이터 타입으로 대입하는 경우

byte num1 = 10;

int num2 = num1; // byte형에서 int형으로 암시적 형변환

 

2. 리터럴 값이 대입되는 경우

float result = 1; // 1은 int형 값이지만 float형으로 암시적 형변환

 

3. 정수형과 부동소수점형 간의 연산을 수행하는 경우

int num1 = 10;

float num2 = 3.14f;

float result = num1 + num2; // int형과 float형의 덧셈에서 float형으로 암시적 형변환

 

3) 자동형 변환

    ◆ var 키워드를 사용하여 변수를 선언하면 변수의 자료형이 컴파일러에 의해 자동으로 결정됨

           -즉, 초기화하는 값의 자료형에 따라 변수의 자료형이 결정됨.

더보기

var num = 10;              // var는 자료형을 자동으로 추론하여 변수 선언
var name = "홍길동";   // name 변수는 string 자료형으로 자동으로 추론됨
var pi = 3.14;               // pi 변수는 double 자료형으로 자동으로 추론됨

float fValue = 3;                 // 부동소수점형 변수에 정수형 데이터를 넣을 경우 자동형변환이 됨
double dValue = 1.2f;        // double은 float를 포함하는 큰 범위이니 자동으로 형변환이 됨
dValue = (float) iValue;      // 일반적으로 변수의 형변환 같은 경우 자동형변환이 가능하지만 (자료형)을 적어줌

 

4) 문자열 변환

    ◆ 각 자료형의 Parse함수를 이용하여 문자열에서 자료형으로 변환

           -Parse를 이용하여 변환이 불가능한 경우 예외처리 발생

더보기

<예시>

 string text = "142";
 iValue = int.Parse(text);       // int.Parse를 통해 string 자료형을 int로 변환

 

 string text = ToString(value);  // 정수형을 문자열로 바꾸는 변환

 

 bool success = int.TryParse(text, out iValue); // TryParse는 문자열에 대한 결과를 가능, 불가능을 출력해줌

 

 int value = (int)'A'; // 한글자의 경우 유니코드상 정해진 번호가 출력됨


연산자와 문자열처리

연산자 (Operator)
  ● 프로그래밍 언어에서는 일반적인 수학 연산과 유사한 연산자들이 지원됨
  ● C#은 여러 연산자를 제공하며 기본 연산을 수행할 수 있음

1) 산술연산자

    ◆ 산술 연산자는 숫자를 대상으로 사용됨.

연산자
설명
+
덧셈
-
뺄셈
*
곱셈
/
나눗셈
%
나머지
더보기

<이진 연산자>
  iValue = 1 + 2;          // +(더하기)
  iValue = 3 - 1;           // -(빼기)
  iValue = 4 * 2;           // *(곱하기)
  fValue = 5f / 3f;         // /(나누기)
  fValue = 5 / 3;           // 주의! int자료형은 소수점을 버림
  iValue = 13 % 3;       // %(나머지) : a - (a/b) * b와 동일함
  cValue = 143 / 10 % 10  // 중간수만 추출할때 쓰임

 

<단항 연산자>

  iValue = +iValue;       // + 단항연산자(양수)  :  값을 반환
  iValue = -iValue;        // - 단항연산자(음수)  :  값의 마이너스를 반환
  ++iValue;                   // ++ 전위증가연산자 : 값을 1 증가
  --iValue;                     // -- 전위감소연산자 : 값을 1 감소

  iValue++;                   // ++ 후위증가연산자 : 값을 1 증가
  iValue--;                     // -- 후위감소연산자 : 값을 1 감소

 

<전위연산자와 후위연산자>

  전위연산자 : 값을 반환하기 전에 연산
  iValue = 0;
  Console.WriteLine(iValue);        // output: 0
  Console.WriteLine(++iValue);    // output: 1
  Console.WriteLine(iValue);        // output: 1


  후위연산자 : 값을 반환한 후에 연산
  iValue = 0;
  Console.WriteLine(iValue);         // output: 0
  Console.WriteLine(iValue++);    // output: 0
  Console.WriteLine(iValue);        // output: 1

 

2) 대입(할당) 연산자

더보기

 <대입 연산자>
 iValue = 10;                    // = : 왼쪽 변수에 오른쪽의 값을 대입

 <복합 대입 연산자>
 iValue += 8;                  // iValue = iValue + 8; 와 동일
 iValue -= 3;                   // iValue = iValue - 3; 와 동일
 iValue *= 2;                   // iValue = iValue * 2; 와 동일
 iValue /= 4;                   // iValue = iValue / 4; 와 동일
 iValue %= 5;                 // iValue = iValue % 5; 와 동일

 

3) 관계연산자

    ◆ 관계 연산자는 두 값을 비교하여 참(True) 또는 거짓(False) 값을 반환함

연산자
설명
==
같음
!=
다름
>
<
작음
>=
크거나 같음
<=
작거나 같음
더보기

bValue = 3 > 1;               // > : 왼쪽 피연산자가 더 클 경우 true
bValue = 3 < 1;               // < : 왼쪽 피연산자가 더 작을 경우 true
bValue = 3 >= 1;             // >= : 왼쪽 피연산자가 더 크거나 같은 경우 true
bValue = 3 <= 1;             // <= : 왼쪽 피연산자가 더 작거나 같은 경우 true
bValue = 3 == 1;             // == : 두 피연산자가 같은 경우 true
bValue = 3 != 1;              // != : 두 피연산자가 다를 경우 true

 

4) 논리연산자

    ◆ 논리 연산자는 참(True) 또는 거짓(False) 값을 대상으로 사용됨.

연산자
설명
&&
논리곱(AND)
||
논리합(OR)
!
논리부정(NOT)
더보기

bValue = !false;                 // !(Not) : 피연산자의 논리 부정을 반환, 반대되는 결과는 내는 연산자
bValue = true && false;     // &&(And) : 두 피연산자가 모두 true 일 경우 true, true && true 여야 true
bValue = true || false;        // ||(Or) : 둘중 한 요소라도 만족할때 쓰임
bValue = true ^ false;        // ^(Xor) : 두 피연산자가 다를 경우 true

 

<예시>

iValue = 10;
bValue = false && (++iValue > 5); // (++iValue > 5)는 무시되어진다
Console.WriteLine(iValue);  // output : 10, 생각하던 결과는 '11'이지만 실제결과는 '10'인 상황

iValue = 10;
bValue = true || (++iValue > 5); // (++iValue > 5)는 무시되어진다
Console.WriteLine(iValue);  // output : 10

 

5) 비트 연산자

    ◆ 비트 연산자는 데이터의 비트(bit) 단위로 연산을 수행하는 연산자

연산자
설명
& (AND)
두 비트 값이 모두 1일 때 1을 반환
| (OR)
두 비트 값 중 하나라도 1일 때 1을 반환
^ (XOR)
두 비트 값이 서로 다를 때 1을 반환
~ (NOT)
비트 값의 보수(complement)를 반환
<< (왼쪽 시프트)
비트를 왼쪽으로 이동
>> (오른쪽 시프트)
비트를 오른쪽으로 이동
더보기

int a = 0b1100;                            // 12 (2진수)

int b = 0b1010;                           // 10 (2진수)

 

int and = a & b;                          // 0b1000 (8)

int or = a | b;                              // 0b1110 (14)

int xor = a ^ b;                           // 0b0110 (6)

 

int c = 0b1011;                          // 11 (2진수)

int leftShift = c << 2;                 // 0b101100 (44)

int rightShift = c >> 1;               // 0b0101 (5)

 

int d = 0b1100;                         // 12 (2진수)

int bit3 = (d >> 2) & 0b1;          // 0b0011 & 0b1 = 0b11 & 0b1 = 0b1 (1) (3번째 비트)

d |= 0b1000;                            // 0b1100 | 0b1000 = 0b1100 (12)

 

<단항 연산자>

iValue = ~0x3E;         // ~(비트 보수) : 데이터를 비트단위로 보수 연산 (1 보수 : 0->1, 1->0)
                                  // ~0x를 붙이면 16진수(E)로 계산된다
                                  // 1010 -> 0101

 

<이진 연산자>

iValue = 0x11 & 0x83;   // &(And) : 데이터를 비트단위로 And 연산
                           1010
                           0111
                           0010 
                           
iValue = 0x11 | 0x83;   // |(Or)  : 데이터를 비트단위로 Or 연산
                          1010
                          0110
                          1110
                         
iValue = 0x11 ^ 0x83;   // ^(Xor) : 데이터를 비트단위로 Xor 연산
                         1010
                         0110
                         1100
                         
 ex) 포켓몬스터 속성마다 데미지 연산에 쓸수 있음
 ex)     그라운드, 플레이어, 몬스터, 미사일 // 1(충돌), 0(통과)
   그라운드   0          1       1       1
   플레이어   1          0       1       0
           |       0          1       0       0
           ^       1          1       1       0

 

<비트 쉬프트 연산자>

 iValue = 0x20 << 2;        // << : 왼쪽의 피연산자의 비트를 오른쪽 피연산자만큼 왼쪽으로 이동
                                        // iValue = 0x20 << 1; == 곱하기 2와 같다 (숫자에 따라 2의 배수씩 늘어남 1(2), 2(4), 3(8))
                                        // 0110(6) << 1 == 1100(12)
 iValue = 0x20 >> 2;        // >> : 왼쪽의 피연산자의 비트를 오른쪽 피연산자만큼 오른쪽으로 이동
                                        // iValue = 0x20 >> 1; == 나누기 2와 같다
                                        // 0110(6) >> 1 == 0011(3)

 

 

6) 연산자 우선순위

    ◆ 여러 연산자가 있는 식에서 우선 순위가 높은 연산자가 먼저 계산

더보기

 <연산자 우선순위>
  1. 기본 연산     : a[i], x++, x--
  2. 단항 연산     : +x, -x, !x, ~x, ++x, --x, (Type)x
  3. 곱하기 연산     : x * y, x / y, x % y
  4. 더하기 연산     : x + y, x - y
  5. 시프트 연산     : x << y, x >> y
  6. 비교 연산     : x < y, x > y, x <= y, x >= y
  7. 같음 연산     : x == y, x != y
  8. 논리 AND 연산     : x & y, x && y
  9. 논리 XOR 연산  : x ^ y
  10. 논리 OR 연산     : x | y, x || y
  11. 대입 연산 : x = y, x op= y


문자열 처리 기능 및 메서드
  ● C#에서는 문자열을 처리하는 다양한 기능과 메서드를 제공함.

 

1) 문자열 생성

더보기

string str1 = "Hello, World!";     // 리터럴 문자열 사용

= output : "Hello, World!"

 

string str2 = new string('H', 5);  // 문자 'H'를 5개로 구성된 문자열 생성

= output : "HHHHH"

 

2) 연결

더보기

string str1 = "Hello";

string str2 = "World";

string str3 = str1 + " " + str2;

= output : "Hello, World!"

이 코드는 str1 문자열과 str2 문자열을 공백으로 구분하여 연결한 새로운 문자열 str3을 생성함

 

3) 분할

더보기

string str = "Hello, World!";

string[] words = str.Split(',');

= output : "Hello" "World!"

 

4) 검색

더보기

string str = "Hello, World!";

int index = str.IndexOf("World");

= output : 7  // World!는 Hello부터 알파벳 갯수에 따라 7번째(따옴표와 공백까지 포함)부터 시작함

 

5) 대체

더보기

string str = "Hello, World!";

string newStr = str.Replace("World", "Universe");

= output : World! => Universe

이 코드는 str 문자열에서 "World" 문자열을 "Universe" 문자열로 대체한 새로운 문자열 newStr을 생성함

 

6) 변환

더보기

<비트 쉬프트 연산자>

string str = "123";

int num = int.Parse(str);

이 코드는 문자열 str을 정수형 숫자로 변환한 후, num 변수에 저장함.

 

<숫자를 문자열로 변환>

int num = 123;

string str = num.ToString();

이 코드는 정수형 숫자 num을 문자열로 변환한 후, str 변수에 저장함

 

7) 비교

더보기

<문자열 값 비교>

string str1 = "Hello";

string str2 = "World";

bool isEqual = str1 == str2;

= output : false

이 코드는 str1 문자열과 str2 문자열을 비교한 후, isEqual 변수에 그 결과를 저장함

 

<문자열 대소 비교>

string str1 = "Apple";

string str2 = "Banana";

int compare = string.Compare(str1, str2);

= output : -1

이 코드는 str1 문자열과 str2 문자열을 대소 비교한 후, compare 변수에 그 결과를 저장함.

compare 변수는 0보다 작으면 str1이 str2보다 작고, 0이면 str1과 str2가 같으며, 0보다 크면 str1이 str2보다 큼

[아무 옵션도 설정하지 않고 비교하는 경우 문자열을 사전식으로 비교하며, 대소문자를 구분함. 즉, ‘A’는 ‘a’보다 작음]

 

8) 포멧팅

더보기

<문자열 형식화>

string name = "John";

int age = 30;

string message = string.Format("My name is {0} and I'm {1} years old.", name, age);

= output : My name is name and I'm age years old.

이 코드는 문자열 형식 문자열을 사용하여 name 변수와 age 변수의 값을 문자열 message에 삽입함

 

<문자열 보간>

string name = "John";

int age = 30;

string message = $"My name is {name} and I'm {age} years old.";

= output : My name is name and I'm age years old.

이 코드는 문자열 보간 기능을 사용하여 name 변수와 age 변수의 값을 문자열 message에 삽입함