[C#] 프로젝트 만들어보기

Min·2024년 7월 23일
0

CSharp

목록 보기
1/25
post-thumbnail

문서를 보기 전 주의사항

최대한 객관적인 자료를 토대로 공부하려고 하지만, 처음하는 공부이기 때문에 정리과정에서 수 많은 주관이 들어가고, 틀린 정보가 생성될 수 있습니다.
모쪼록 읽는데 있어 주의하시고, 꼭 공식문서와 크로스 체킹해서 올바른 정보만 가져갈 수 있도록 참고했으면 좋겠습니다.

기본 콘솔 프로젝트

기본 콘솔 프로젝트를 만들어보고 안에있는 구성요소에 대한 공부를 해보자

프로젝트 만들기

  1. 솔루션 탐색기 오른쪽 마우스 클릭 → 추가 → 새 프로젝트

  2. 새 프로젝트 추가 → C# → 콘솔 앱
  3. 프로젝트명 정하기(사진 생략)
  4. 프레임워크 설정
  • 결과

뭐야이게

처음에 보고 두 가지 면에서 조금 당황했다.

  • .NET이 뭐야?
  • 왜 아무것도 없이 텅텅 비어있어?

.NET Framework

MSDN에서 말하는 .NET Framework의 구성요소는 다음과 같다.

  • 런타임 : 애플리케이션 코드를 실행합니다.
  • 라이브러리 : JSON 구문 분석과 같은 유틸리티 기능을 제공합니다.
  • 컴파일러 : C#(및 기타 언어) 소스 코드를 (런타임) 실행 코드로 컴파일합니다.
  • SDK 및 기타 도구 : 최신 워크플로를 사용하여 앱을 빌드하고 모니터링할 수 있습니다.
  • 앱 스택 : ASP.NET Core 및 Windows Forms와 같이 앱을 작성할 수 있습니다.

    내가 당장 직관적으로 받아들일 수 있는 단어는, 런타임과 라이브러리 컴파일러이다. C++에서 저 세단어는 프로그램의 빌드와 실행에 직접적으로 연관이 있다. 그렇다는 것은 .NET Framework는 C#이라는 언어의 빌드와 실행을 위한 Framework라고 이해해도 크게 무리가 없을 것 같다.

    간단히 말해서! C#은 .NET위에서 동작한다는 것이다.

    당연히 .NET의 버전에 따라 호환하고 지원하는 C#의 기능도 다를테니, 처음에 .NET Framework의 버전을 정하는 것은, C++의 빌드 버전을 고르는것과 유사하다고 할 수 있다.

런타임을 돕는다?

런타임을 돕는다는 말이 뭘까? 이에 대해서 조금더 자세히 알아보자

  • CLR(Common Language Runtime)
    • Performance improvements.(성능 향상)
    • The ability to easily use components developed in other languages.(다른 언어로 개발된 컴포넌트를 쉽게 사용할 수 있음)
    • Extensible types provided by a class library.(확장 가능한 타입)
    • Language features such as inheritance, interfaces, and overloading for object-oriented programming.(객체 지향 프로그래밍)
    • Support for explicit free threading that allows creation of multithreaded and scalable applications.(명시적인 멀티스레딩 지원)
    • Support for structured exception handling.(구조화 된 예외 처리)
    • Support for custom attributes.(사용자 정의 특성 지원)
    • Garbage collection.(가비지 컬렉션)
    • Use of delegates instead of function pointers for increased type safety and security. For more information about delegates, see Common Type System.(델리게이트 사용)

      .NET Framework를 사용하면 CLR이라는 런타임 환경을 지원해준다고 한다. CLR의 지원을 받으면 위 같은 기능들을 지원받을 수 있는데, 다른 내용은 아직 잘 모르겠고, 가장 눈에 띄는 것은 가비지 컬렉션이다.

      C++과 C#의 가장 큰 차이라고 하면, C++은 Unmanaged Language, C#은 Managed Language라는 것이다. 여태 직접 메모리 관리를 해야하는 언어를 사용하였고, 자동으로 메모리를 관리를 해주는 '가비지 콜렉터'라는 신비한 존재가 있다고 이야기는 들어봤지만, 구체적으로 어디서 지원하는 기능인지 아는 바가 없었다. 근데 C#에서 가비지 콜렉터를 지원하는 주체가 .NET Framework의 CLR이라는 것을 알게 되었다. 케케묵은 미스테리가 한가지 풀린 느낌이다.

      어쨌던, 이런 식으로 런타임 환경을 지원하고, 메모리 관리까지 자동으로 해주는 Framework라는 것을 알게 되었다.

표준 라이브러리?

C++의 표준 라이브러리는 STL이다. 그럼 C#의 표준라이브러리는 무엇일까?

  • BCL(Base Class Library)
    .NET Framework에서 지원하는 표준 라이브러리이다. 당연히 .NET 프레임워크 기반의 언어에서는 모두 사용이 가능하다고 한다. 구체적인 기능에 대한 공부는 차차 사용해보면서 살을 붙이도록 하자.

텅텅 비어있네?

  • C# 콘솔 프로젝트의 기본 템플릿

  • 위 프로젝트를 C++로 작성한다면?

C++프로젝트를 보면 프로세스의 진입점이 main 함수라는 것, iostream 헤더의 std::cout함수를 이용해서 "Hello, Wolrd!"라는 문자를 출력한다는 것, 그리고 나면 프로세스의 생애주기가 끝난다는 것, 모든 것이 명확하다.

하지만 C# 프로젝트를 보면 도대체가 진입점은 어디인지, Console이라는 class는 어떻게 접근해서 WriteLine이라는 함수를 사용했는지, C#의 생애주기는 어떻게 시작해서 어떻게 끝나는지 뭐 하나 명확한게 없다. 이게 객체지향언어인가 생각하던 찰나 기본 탬플릿에 있는 링크가 보였다. 클릭



그럼 .NET 6 이전에는?

아하 원래는 저랬구나. 문서를 읽어보면 최상위문(잘모르겠음)이라는 것을 사용해서 기본 탬플릿 코드를 간결하게 만든 것 같다. 하지만 나처럼 처음 공부하는 사람에게는 오히려 코드의 생애주기를 파악하기 힘들어 독이 될 수 도 있기 때문에, 이전 탬플릿에 써있는 키워드를 보고 공부를 시작하면 좋을 것 같다.


앞으로 공부할 키워드

위에서부터 쭉 훑으면서 공부 할 키워드를 확인해보자

  • C#에서의 using 키워드
  • System
  • C#에서의 namespace
  • C#에서의 접근제한지정자 키워드와 사용처
  • C#에서의 class와 struct
  • 진입점과 진입점함수의 파라미터
  • 자료구조
  • static 키워드
profile
티내는 청년

0개의 댓글

관련 채용 정보