카테고리 없음

[TIL] 생소한 C#

WooKGOD 2025. 1. 15. 19:56
반응형

클라이언트를 접하면서 예전에 잠깐 공부했던 C#을 다루고 있다. 너무 예전에 했던터라 다시 하면서 기억이 잘 나지 않는다.

 

그래도 유니티 엔진을 다루는 것은 서버를 공부하는거보단 훨씬 재밌다고 느껴진다. 결과물이 바로 눈에 보이기 때문에 흥미를

 

잃지 않고 계속해서 할 수 있는 원동력이 되는 것 같다.

 


 

오늘 학습한 내용

 

 

유니티(Unity)가 C#을 사용하는 이유

 

1. 마이크로소프트의 지원 및 .NET 프레임워크 통합

  • .NET 프레임워크와의 호환성: C#은 마이크로소프트가 개발한 .NET 프레임워크의 핵심 언어입니다. 유니티는 초기부터 .NET 런타임을 통합하여 강력한 라이브러리와 도구를 활용할 수 있도록 설계되었습니다.
  • 안정적이고 지속적인 업데이트: C#은 마이크로소프트가 꾸준히 발전시키고 지원하므로, 장기적인 관점에서 안정적인 기술로 간주됩니다.
  • 크로스플랫폼 지원: .NET은 다양한 운영체제(Windows, macOS, Linux) 및 플랫폼에서 실행 가능하며, 이는 유니티의 멀티플랫폼 목표와 잘 맞아떨어집니다.

2. 사용자 친화성과 배우기 쉬운 문법

  • 간결하고 직관적인 문법: C#은 Java와 유사한 구조를 가지며, 초보 개발자부터 숙련된 프로그래머까지 쉽게 배울 수 있는 언어로 설계되었습니다. 이는 게임 개발 입문자들에게 큰 장점입니다.
    • 예: C++에 비해 메모리 관리(포인터, 할당 등)를 직접 다룰 필요가 없어 더 간단합니다.
  • 객체지향 프로그래밍(OOP) 지원: C#은 객체지향 프로그래밍을 강력히 지원하며, 유니티 엔진의 구조(게임 오브젝트, 컴포넌트 기반 디자인)와 자연스럽게 통합됩니다.

3. 높은 생산성

C#은 다음과 같은 이유로 개발 생산성을 높입니다:

  • Garbage Collection(자동 메모리 관리): C#은 메모리 관리를 자동화하여 개발자가 메모리 누수나 포인터 관리 같은 저수준 작업에서 벗어나도록 돕습니다.
  • 풍부한 라이브러리와 도구: C#은 문자열 처리, 컬렉션, 멀티스레딩 등 다양한 기능을 제공하는 표준 라이브러리를 갖추고 있어 추가적인 작업 없이도 강력한 기능을 사용할 수 있습니다.
  • 비동기 프로그래밍 지원: C#의 async와 await 키워드는 비동기 작업을 간단하고 효율적으로 구현할 수 있게 합니다. 이는 네트워크 호출이나 리소스 로딩 같은 비동기 작업에 유용합니다.

4. 멀티플랫폼 지원

유니티는 하나의 코드를 사용해 다양한 플랫폼에서 게임을 실행할 수 있는 멀티플랫폼 엔진입니다.

  • C#은 크로스플랫폼 언어로 설계되어, PC, 모바일, 콘솔, VR/AR 등 다양한 환경에서 실행될 수 있습니다.
  • Mono 및 IL2CPP(Intermediate Language to C++) 기술을 사용하여 C# 코드를 여러 플랫폼에 맞게 변환 및 최적화합니다.

5. 강력한 커뮤니티와 문서 지원

  • C#은 유니티 커뮤니티뿐만 아니라 전 세계적으로 널리 사용되는 언어입니다. 이로 인해 학습 자료, 예제 코드, 기술적 지원을 쉽게 구할 수 있습니다.
  • 유니티의 공식 문서와 튜토리얼에서도 C#을 중심으로 다루기 때문에 초보 개발자도 빠르게 적응할 수 있습니다.

6. 성능과 최적화

C#은 고성능 언어는 아니지만, 유니티가 성능 문제를 보완하는 데 주력하고 있습니다:

  • IL2CPP 변환: 유니티는 C# 코드를 IL(Intermediate Language)로 컴파일한 뒤, 이를 C++로 변환하여 최적화된 실행 파일을 생성합니다.
  • 멀티스레드 작업 지원: C#의 Task 및 Parallel 라이브러리를 통해 멀티스레드 작업이 용이하며, 이는 유니티의 Job System과 ECS(Entity Component System) 같은 최신 기술과 결합되어 성능을 더욱 향상시킵니다.

7. 경쟁 언어(C++/Java 등)에 비해 적합성

  • C++: C++은 성능이 뛰어나지만, 복잡한 메모리 관리와 어려운 문법으로 인해 초보자나 소규모 팀에게 적합하지 않을 수 있습니다.
  • Java: Java는 유사한 문법을 가지고 있지만, .NET과의 통합성이나 게임 개발에 특화된 유니티의 요구 사항을 충족하지 못합니다.
  • Python: Python은 배우기 쉽지만, 성능과 실시간 작업(Real-time)의 요구 조건을 충족하기 어렵습니다.
반응형