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에 삽입함
'유니티개발 TIL' 카테고리의 다른 글
2주차 3일 TIL_C#기초-3(클래스) (8) | 2025.07.09 |
---|---|
2주차 2일 TIL_C#기초-2(조건문과 반복문, 매서드) (15) | 2025.07.09 |
1주차 5일 TIL - 간단한 기능 모작(포켓몬스터-02), TIL정리 (1) | 2025.07.04 |
1주차 4일 TIL - 객체지향프로그래밍- (0) | 2025.07.03 |
1주차 3일 TIL - 간단한 기능 모작(포켓몬스터-01) (2) | 2025.07.02 |