I'm FanJae.
[20260427] C#의 기본적인 내용 정리 본문
※ C++과 내용상 겹치는 부분은 제외하고, 다루지 않았던 내용을 중심으로 다뤘다.
1. C++과 C#의 차이
1) 언어 성격 비교
① C++
- 저수준의 제어 기능
- 성능 및 최적화에 유리
- 메모리 직접 관리
② C#
- 런타임(.NET)에 의존
- 생산성과 안정성 중심
- 메모리 자동 관리
2) 메모리 관리
// C++
int *p = new int; // 메모리 할당
delete p; // 메모리 해제
- C++은 개발자가 직접 메모리를 관리한다.
// C#
class Player
{
public int hp;
}
void Func()
{
Player = new Player();
// 별도 해제 코드가 없음
}
- 반면, C#은 Garbage Collector(GC)가 이를 자동으로 관리해준다.
- 사용하지 않는 객체를 자동으로 회수한다.
- 이를 통해서 메모리 누수 위험이 감소한다.
- 대신 GC 타이밍을 제어하는 데는 어려움이 있다.
3) 타입 시스템
- 해당 내용은 별도의 포스트로 다룬다.
- 요약 하면 값 형식(Value Type)과 참조 형식(Reference Type)으로 나눈다.
4) 구조체 vs 클래스
- C++의 경우 struct 와 class 가 기본 접근 지정자만 차이가 있다.
- C#의 경우 struct 는 값 형식 class 는 참조 형식이다.
5) 상속 구조 차이
- C++은 다중 상속이 가능하다. (물론 다중 상속이 ‘가능’하더라도 구조상의 이유로 무분별하게 사용하지는 않는다.)
- C#은 클래스 다중 상속이 불가능하다. (대신 C#은 Interfacce라는 것을 이용하여 해결한다.)
6) 컴파일 안전성
- C#은 컴파일 단계에서 오류를 강하게 체크한다.
int a;
Console.WriteLine(a); // 컴파일 에러
- C++에서 초기화하지 않은 지역 변수를 출력해도 컴파일 단계에서 오류가 없지만, C#은 아니다.
2. 출력
Console.WriteLine(); // 줄바꿈 포함 출력
Console.Write(); // 줄바꿈 없음
- C++의 std::cout 을 이용한 출력과 동일하다.
- Console.WriteLine()을 쓰면, C++의 std::cout << endl; 와 동일하게 출력할 수 있다.
1) 변수 기본 출력
int hp = 100;
Console.WriteLine("현재 체력: " + hp);
- C#에서는 변수를 출력할 때 위와 같은 형태로 출력하거나 문자열 보간을 이용해 출력한다.
2) 문자열 보간을 이용한 출력
int hp = 200;
Console.WriteLine($"현재 체력: {hp}");
- C#에서는 문자열 보간을 사용해 문자열에 식 결과의 서식을 지정할 수 있다.
3. 자료형 형 변환(Casting)
- 캐스팅이란, 한 데이터 형식의 값을 다른 데이터 형식으로 변환하는 것을 의미한다.
- 캐스팅은 2가지로 묵시적 형변환과 명시적 형변환이 존재한다.
1) 묵시적(암시적) 형 변환
int i = 10;
double d = i; // int형인 i가 double 데이터 형식으로 자동 형 변환
- 컴파일러에 의해 자동으로 수행된다.
- 일반적으로, 두 데이터 타입이 호환 될 때 발생하고, 더 작은 데이터 타입의 값을 더 큰 데이터 타입에 할당하는 경우에 발생한다.
2) 명시적 형 변환
double d = 12.34;
int i = (int)d;
- 개발자가 작성한 소스코드에 의해 수행된다.
- 더 큰 데이터 타입을 더 작은 데이터 타입으로 변환하는 것이 가능하다.
4. 문자열 ↔ 숫자 변환
- 문자열은 일반 자료형과 다르게 단순형 변환이 불가능하다.
- 각 자료형이 가지고 있는 Parse()와 TryParse()를 이용하여 문자열에서 자료형으로 변환이 가능하다.
1) Parse() (실패하면, 예외를 발생시킨다.)
int num = int.Parse("123");
- Parse()는 변환이 실패한 경우, 예외를 발생시킨다.
2) TryParse() (실패시 'false'를 반환시킨다.)
int.TryParse("123", out int num);
- TryParse()는 변환이 실패한 경우, false를 반환하고, 예외는 발생시키지 않는다.
- 변환이 성공한 경우, true를 반환하고 변환된 값을 out 매개변수로 변환한다.
5. Convert 클래스
- Convert 클래스는 기본 데이터 형식을 다른 데이터 형식으로 변환시킨다.
// Convert.ToInt32()
// Convert.ToDouble()
// Convert.ToString()
- 종류가 워낙 다양하기 때문에, 자주 쓰는 애들만 외우고, 나머지는 공식 문서에서 찾는 것이 더 좋다.
- Convert Class : https://learn.microsoft.com/en-us/dotnet/api/system.convert?view=net-10.0
Convert Class (System)
Converts a base data type to another base data type.
learn.microsoft.com
6. 입력
- Console.ReadLine()을 이용하여 입력을 받을 수 있다.
Console.Write(“이름을 입력해라”);
string name = Console.ReadLine();
Console.WriteLine(“안녕하세요 : ” + name);
- Console.ReadLine() 은 반환값이 string 이다.
- 따라서, 입력값을 정수 형태로 처리하고 싶으면, 별도의 변환 과정이 필요하다.
string input = Console.ReadLine();
int num = int.Parse(input);
string input2 = Console.ReadLine();
int.TryParse(input2, out int num2);
- 두 개중 하나를 사용하면 된다. 다만, input 값이 숫자로 변환하기 어려운 값이 들어올 가능성이 있다면, TryParse() 를 사용한 안전한 변환이 중요하다.
7. Random 클래스
Random rand = new Random(); // 객체 생성
int value = rand.Next(); // Random 객체 내부의 Next() 함수 호출.
// Next()는 정수 최대값 미만의 범위까지를 가진다.
- C#에서 난수를 발생시키기 위해 사용한다.
- Random 클래스를 사용하기 위해서는 객체를 생성하여 사용한다.
'Unity > Unity 초격차캠프' 카테고리의 다른 글
| [20260428] 메서드(Method)와 배열(Array) (0) | 2026.04.28 |
|---|---|
| [20260427] C# 값 형식(Value Type)과 참조 형식(Reference Type) (0) | 2026.04.27 |
| [C#] 콘솔 지뢰찾기 만들기 (0) | 2026.04.24 |
| [리마인드] 콘솔 화면 2인용 오목 만들기 (C++) (0) | 2026.04.22 |
| [20260406] C# - 반복문 (0) | 2026.04.06 |