강력한 형식 시스템은 변수나 객체의 자료형이 미리 정의되어 있어 데이터 타입에 대한 안전성과 정확성을 보장하는 시스템이다.
가비지 컬렉션 기능은 동적 할당된 메모리를 자동으로 회수해주는 기능이다. C#에서는 개발자가 메모리를 직접 할당하고 해제하는 대신, .NET 프레임워크에서 가비지 수집기가 자동으로 메모리를 해제해준다.
.NET 프레임워크는 Microsoft에서 개발한 프로그래밍 플랫폼으로, 다양한 프로그래밍 언어를 지원하며, 개발자가 손쉽게 애플리케이션을 개발할 수 있도록 도와준다.
자료형 | .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 |
리터럴의 개념과 역할
프로그램에서 직접 사용되는 상수 값으로, 소스 코드에 직접 기록되어 있는 값
C#에서 리터럴은 컴파일러에 의해 상수 값으로 처리되며, 변수나 상수에 할당되거나 연산에 사용
리터럴의 종류와 예시
C#에서는 다양한 종류의 리터럴을 지원
각각의 리터럴은 다른 형식으로 표현되며, 다양한 값의 범위를 가지고 있습니다.
정수형 리터럴
부동소수점형 리터럴
문자형 리터럴
문자열 리터럴
코드 컨벤션(Code convention)은 개발자들 사이에서 약속된 코드 작성 규칙으로, 코드의 가독성을 높이고 유지 보수를 쉽게 하기 위해 사용됩니다. 코드 컨벤션은 프로그래밍 언어마다 다를 수 있으며, 우리는 다음의 규칙을 따를 예정입니다.
ClassName
, MethodName
, PropertyName
과 같은 형태입니다.variableName
, parameterName
, localVariableName
과 같은 형태입니다.ID
, HTTP
, FTP
등이 있습니다.산술 연산자
연산자 | 설명 |
---|---|
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
/ | 나눗셈 |
% | 나머지 |
관계 연산자
연산자 | 설명 |
---|---|
== | 같음 |
!= | 다름 |
> | 큼 |
< | 작음 |
>= | 크거나 같음 |
<= | 작거나 같음 |
논리 연산자
연산자 | 설명 |
---|---|
&& | 논리곱 And |
|| | 논리합 Or |
! | 논리부정 Not |
데이터의 bit 단위로 연산을 수행하는 연산자.
연산자 | 설명 |
---|---|
& | 두 비트 값이 1일 때 1을 반환 |
| | 두 비트 값 중 하나라도 1일 때 1을 반환 |
^ | 두 비트 값이 서로 다를 때 1을 반환 |
~ | 비트 값의 보수(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; // 0 (3번째 비트)
d |= 0b1000; // 0b1100 | 0b1000 = 0b1100 (12)
bit가 너무 생소한 개념이어서 이해하기가 어렵다.. 따로 추가적인 공부의 필요성을 느낀다.
복합 대입 연산자
연산자 | 예시 | 설명 |
---|---|---|
+= | x+=y; | x=x+y; |
-= | x-=y; | x=x-y; |
*= | x*=y; | x=x*y; |
/= | x/=y; | x=x/y; |
%= | x%=y; | x=x%y; |
증감 연산자
연산자 | 설명 |
---|---|
++ | 1증가 |
-- | 1감소 |
정말 많이 사용했던 연산자들이다. 활용하기에 따라 정말 강력한 기능을 수행한다.
문자열 생성
string str1 = "Hello, World!"; // 리터럴 문자열 사용
string str2 = new string('H', 5); // 문자 'H'를 5개로 구성된 문자열 생성
연결
string str1 = "Hello";
string str2 = "World";
string str3 = str1 + " " + str2;
분할
string str = "Hello, World!";
string[] words = str.Split(',');
Console.WriteLine(words[0]);
Console.WriteLine(words[1]);
검색
string str = "Hello, World!";
int index = str.IndexOf("World");
Console.WriteLine(index); // 7 출력
대체
string str = "Hello, World";
string newStr = str.Replace("World", "Universe");
Console.WriteLine(newStr); // Hello, Universe 출력
Console.WriteLine(str); // Hello, World 출력
변환
string str = "123";
int num = int.Parse(str); // 문자열을 숫자형으로 변환
num += 10; // 숫자형이 되었기 때운에 가능하다.
Console.WriteLine(num.ToString()); // 문자형인 133 출력
비교
string str1 = "Hello";
string str2 = "World";
bool isEqual = str1 == str2;
Console.WriteLine(isEqual); // false 출력
string str1 = "Apple";
string str2 = "Banana";
int compare = string.Compare(str1, str2);
Console.WriteLine(compare); // -1 출력
포맷팅
문자열 형식화
string name = "John";
int age = 30;
string message = string.Format("My name is {0} and I'm {1} years old.", name, age);
문자열 보간
string name = "John";
int age = 30;
string message = $"My name is {name} and I'm {age} years old.";
// 내가 작성한 코드
Console.Write("이름을 입력하세요: ");
string name = Console.ReadLine();
Console.Write("나이를 임력하세요: ");
string age = Console.ReadLine();
Console.WriteLine("안녕하세요, {0}! 당신은 {1} 세 이군요.", name, age);
// 풀이 코드
Console.Write("이름을 입력하세요: ");
string userName = Console.ReadLine();
Console.Write("나이를 입력하세요: ");
string userAge = Console.ReadLine();
Console.WriteLine("안녕하세요, " + userName + "! 당신은 " + userAge + " 세 이군요.");
출력하는 방식의 차이가 있었다.
// 내가 작성한 코드
Console.Write("첫 번째 수를 입력하세요: ");
string strNum1 = Console.ReadLine();
Console.Write("두 번째 수를 입력하세요: ");
string strNum2 = Console.ReadLine();
float num1 = float.Parse(strNum1);
float num2 = float.Parse(strNum2);
Console.WriteLine("더하기: " + (num1 + num2));
Console.WriteLine("빼기: " + (num1 - num2));
Console.WriteLine("곱하기: " + (num1 * num2));
Console.WriteLine("나누기: " + (num1 / num2));
// 풀이 코드
Console.Write("첫번째 수를 입력하세요: ");
int num1 = int.Parse(Console.ReadLine());
Console.Write("두번째 수를 입력하세요: ");
int num2 = int.Parse(Console.ReadLine());
Console.WriteLine("더하기: " + (num1 + num2));
Console.WriteLine("빼기: " + (num1 - num2));
Console.WriteLine("곱하기: " + (num1 * num2));
Console.WriteLine("나누기: " + ((float)num1 / num2));
자료형의 변환을 콘솔에 입력하면서 할 수 있었다는 것을 알게 되었다.
// 내가 작성한 코드
Console.Write("섭씨 온도를 입력하세요: ");
string strCel = Console.ReadLine();
int cel = int.Parse(strCel);
int fah = (cel * 9 / 5) + 32;
Console.Write("변환된 화씨 온도: " + fah);
// 풀이 코드
Console.Write("섭씨 온도를 입력하세요: ");
float celsius = float.Parse(Console.ReadLine());
float fahrenheit = (celsius * 9 / 5) + 32;
Console.WriteLine("변환된 화씨 온도: " + fahrenheit);
float
형식으로 변수를 저장했어야 했는데 간과했다.
// 내가 작성한 코드
Console.Write("키를 입력하세요(m): ");
string strHei = Console.ReadLine();
Console.Write("몸무게를 입력하세요(kg): ");
string strWei = Console.ReadLine();
float Hei = float.Parse(strHei);
float Wei = float.Parse(strWei);
float bmi = Wei / (Hei * Hei);
Console.WriteLine("당신의 BMI는: " + bmi);
키 입력에서 cm로 입력을 했다가 결과값이 이상해서 약간 헤메었지만 단위를 적어주어 해결하였다.
사전캠프에서 익혔던 내용들의 구체적인 개념들을 배울 수 있는 시간이었다. 강사님이 중간중간 개발 과정에서의 팁들을 자주 알려주셔서 놓치는 부분 없이 집중해야함을 느꼈다.