Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

I'm FanJae.

[20260427] C#의 기본적인 내용 정리 본문

Unity/Unity 초격차캠프

[20260427] C#의 기본적인 내용 정리

FanJae 2026. 4. 27. 18:04

※ 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 클래스를 사용하기 위해서는 객체를 생성하여 사용한다.

Comments