게임 개발_HISTORY

C# STUDY_TIL250927 [C# 언어의 특징] 본문

Development In Unity/Study : C#

C# STUDY_TIL250927 [C# 언어의 특징]

EVANJ 2025. 9. 27. 21:54

📝 학습 요약

  • C# 언어의 특징

🧩 학습 내용 구조

 C# 언어의 특징
▫️Microsoft에서 만든 객체 지향 프로그래밍 언어이며, 안전하고 형식이 분명하다.
객체 지향 프로그래밍 : 프로그래밍 세계를 레고 블록이라고 생각한다면, 각각의 레고 블럭(=객체)이 자기 고유한 속성(data)과
행동(method)을 가지고 있고 이 블록들을 조립해서(=객체끼리 협력시켜서) 프로그램을 만드는 게 객체 지향 프로그래밍이다.

 

🌐 객체지향 프로그래밍 언어(OOP, Object-Oriented Programming language)

: 객체 간의 상호작용으로 프로그램을 구성하는 방식. Java, python, C++, C# 등이 대표적인 객체지향 프로그래밍 언어이다.
장점은 코드 재활용에 유리하고, 유지보수에 용의하며 동일한 메소드 명으로 여러 구현이 가능해서 확장성도 높아 협업에도 좋다. 단점으로는 초기 설계가 복잡하며, 상속 구조나 다형성 때문에 성능이 느릴 수 있다. 그리고 과도한 구조화를 진행했을 때 오히려 이해가 어려울 수 있다.

 

🔹주요개념
클래스(Class) : 객체를 만들기 위한 설계도
객체(Object) : 클래스를 기반으로 생성된 실체, 실체화 된 것을 인스턴스(Instance) 이다.
속성(Attribute) : 객체가 가지는 데이터
매소드(Method) : 객체가 수행할 수 있는 행동

🔹OOP의 4대 핵심 특성
캡슐화(Encapsulation) : 내부 속성을 숨기고, 필요한 기능만 외부에 공개하는 것
상속(Inheritance) : 기존 클래스의 기능을 물려받고 확장하는 것
추상화(Abstraction) : 공통된 속성과 동작만 추출하여 단순화하는 것

다형성(Polymorphism) : 동일한 메서드가 다양한 방식으로 동작하는 것 (하나의 객체가 여러 타입을 가질 수 있는 뜻)

 

안전하다 (Type-safe)
→ 잘못된 타입(e.g : 숫자 변수에 문자열을 넣기 같은 것)을 자동으로 막아주고, 메모리 직접 접근 같은 위험한 동작을 최소화한다.

형식이 분명하다 (Strongly-typed)
→ 변수의 자료형을 정확히 지켜야 하고, 컴파일러가 미리 검사해줘서 오류를 줄일 수 있어요.
→ e.g : int age = "스물"; → 컴파일 단계에서 에러 발생!

 

▫️ 강력한 형식 시스템과 가비지 컬렉션 기능을 제공한다.

  • 강력한 형식 시스템 (Strong type system)
    → 모든 데이터에 타입이 명확히 붙어 있고, 변환 시에도 엄격하게 검사해요.
    → 예: int, float, string, bool 등 자료형이 확실하게 구분됨.
  • 가비지 컬렉션 (Garbage Collection)
    → 프로그래머가 일일이 메모리 해제 free() 를 안 해도 됨.
    → 더 이상 쓰이지 않는 객체는 .NET 런타임이 알아서 메모리를 정리해줘서 메모리 누수를 방지.

▫️ “다양한 플랫폼”에서 사용 가능하며, .NET 프레임워크에서 실행된다.

.NET 프레임 워크는 다양한 언어를 지원하며, 개발자가 손쉽게 어플리케이션을 개발 할 수 있도록 도와준다.

.NET FrameWork_Diagram

  • 원래는 Windows 전용이었지만 지금은 .NET Core / .NET 5+ 덕분에 Mac, Linux, 모바일(Android/iOS), 웹(Blazor) 등 다양한 플랫폼에서 실행 가능하다. 즉, C# 하나만 배워도 여러 분야에 응용할 수 있다는 장점을 가졌다.
  • e.g :
    • ASP.NET → 웹 서비스 개발
    • Xamarin / MAUI → 모바일 앱 개발
    • Unity → 게임 개발
    • WPF/WinForms → 데스크톱 앱

▫️ C, C++, Java 등 다른 언어들과 문법 및 구조적으로 유사하다.

C 계열 언어(C, C++, Java)를 해본 사람은 C#도 금방 배울 수 있다.
아래와 같이 문법 구조가 비슷해서 다른 언어 경험자가 쉽게 적응할 수 있다.

// C
int num = 10;
printf("%d", num);

// Java
int num = 10;
System.out.println(num);

// C#
int num = 10;
Console.WriteLine(num);

 

🌱 프로그래밍 개념

  • 프로그래밍 언어 : 사람과 Compiler가 이해할 수 있는 약속된 형태의 언어
  • Compiler : 프로그래밍 언어로 작성된 프로그램을 기계어로 번역하는 역할을 가짐
  • 기계어 (Machine Language) : 컴퓨터가 이해할 수 있는 0과 1로 구성된 형태의 언어
  • IDE (Integrated Development Environment) : 통합 개발 환경 이라는 뜻으로, 코드를 작성, 실행, 디버깅(오류찾기)을 한 곳에서 할 수 있는 툴이며, 대표적으로 Visual studio, Visual studio code가 있다. 자동완성, 디버깅 도구, 프로젝트 기능이 있어 입문자에게 필수적으로 사용된다.
  • 런타임 (Runtime) / .NET : C# 코드는 단순히 기계어로 변환되는 것이 아니라, 먼저 중간 언어(IL, Intermediate Language)로 바꾸고 .NET CLR(Common Language Runtime)이 실행하면서 거바자 컬렉션, 메모리 관리, 보완 등을 제공해 준다.
    따라서 C#은 .NET이라는 실행환경 위에서 돌아간다고 이해하면 쉽다.
  • 변수(Variable) : 데어터를 저장하는 상자이다.
  • 자료형(Data Type) : 그 상자(변수)에 넣을 수 있는 데이터의 종류  e.g) int(정수), float(소수), string(문자열), bool(참/거짓)
    C#은 강한 타입의 언어라서 변수에 어떤 자료형이 들어가는지 엄격히 지켜진다.
  • 제어문(Control Statement) : 프로그램의 흐름을 제어하는 문자이다.
    "조건에 따라 행동이 달라지는" 것과 "반복되는 작업"을 다룰 수 있다.
    조건문 : if, switch
    반복문 : for, while, foreach
  • 함수(Method) : 특정 기능을 수행하는 코드 묶음이다. 이를 활용하면
    같은 코드를 계속 복붙하지 않고, 함수를 만들어 재사용 할 수 있다.
void SayHello()
{
    Console.WriteLine("Hello!");
}

 

  • 클래스(Class) : 설계도와 같은 역할을 한다. (e.g 자동차 설계도)
  • 객체(Object) : 설계도를 기반으로 만든 실제 제품 (e.g 트럭, 세단, 스포츠카...)
  • 컴파일(Compile) : C# 코드를 중간 언어(IL)로 변환하는 것
  • 실행(Run) : CLR이 IL을 읽고 기계어로 바꿔 CPU가 수행하도록 하는 
  • 콘솔(Console) : 컴퓨터 프로그래밍에서 디버깅, 테스트, 로깅 등에 사용하는 인터페이스이다. 사전적 의미로는 시스템 관리자가 시스템의 상태를 알아보거나, 각종 업무를 처리하기 위해 사용하는 단말 장치이다.(e.g : cmd)

⚛️ 프로그래밍 기본요소

🔹 “Hello World” 코드 구조

// Hello World.cs
using System;

namespace HelloWorld
{
  class program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Hello World!");    
    }
  }
}
  • using System; : 이 코드는 System 네임스페이스에 있는 기능들을 가져와 사용하겠다는 선언이다.
  • name space : 코드를 구성하고 관련 있는 클래스나 다른 네임스페이스들을 담는 컨테이너를 정의한다.
  • class program : C# 클래스를 정의하는 키워드이며, 실제 데이터를 담고 기능을 수행하는 객체의 설계도이다.
  • static void Main() : C# 프로그램의 진입점(entry point), 즉 프로그램이 시작될 때 가장 먼저 실행되는 메서드이다.
    static : 이 매서드가 클래스의 인스턴스(객체)를 만들지 않고도 호출될 수 있음을 의미한다.
    void : 메서드가 어떤 값도 변환하지 않는다는 것을 의미한다.
    Main : 메서드 이름이며, C# 표준에서 진입점은 반드시 Main 이어야 한다.
    (string[] args) : 메서드가 외부로부터 문자열 배열을 인자로 받는다는 의미이다. 이는 보통 명령 프롬프트이다.
  • Console.WriteLine("Hello world"); : Console(화면)에 지정된 텍스트를 출력하고 새 줄로 이동시키는 기능을 수행한다.
  • {} : 코드 블럭의 시작과 끝을 나타내는 중괄호이다. 모든 논리적인 단위의 범위(Scope)를 정의한다.
  • ; : 하나의 구문(statement)의 끝을 나타낸다. C#에서 변수, 선언, 값 할당, 메서드 호출 등 대부분의 실행 가능한 명령문은 반드시 세미콜론으로 끝나야 한다.
  • Console.Write : 메소드는 Console.WriteLine 과 다르게 지정된 문자는 출력하되 줄 바꿈은 추가하지 않는다.
  • // (주석, Comments) : 코드의 설명이나 작업자간의 의사소통을 위해 사용된다. 한 줄 주석이며, 해당 줄 끝까지 주석
    처리된다. 주석의 내용은 정확하며 명확해야 한다. 코드가 변경된다면 주석 또한 그에 맞게 수정되어야 한다.
    /* */ : 여러 줄 주석, 시작과 끝을 명시하여 주석 처리된다.

🔑 주요 단축키

Main Hotkeys 사용법
Ctrl + ←/→   띄어쓰기, 특수문자 단위로 커서 이동
Home 커서를 해당 라인의 맨 앞으로 이동
End 커서를 해당 라인의 맨 뒤으로 이동
F12 해당 변수/함수의 정의로 이동
Shift + F12 해당 변수/함수의 참조를 검색
Ctrl + - (마이너스) 이전 작업하던 커서로 이동
Ctrl + Shift + - (마이너스) Ctrl + - 이동하기 전으로 다시 이동
Ctrl + C , K 드래그 한 부분 주석
Ctrl + C , U 드래그 한 부분 주석 해제

 

🚀 내일 할 일 (To-do)

  • C# 문법 종합반 강의 수강