게임 개발_HISTORY
C# STUDY_TIL250927 [C# 언어의 특징] 본문
📝 학습 요약
- 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 프레임 워크는 다양한 언어를 지원하며, 개발자가 손쉽게 어플리케이션을 개발 할 수 있도록 도와준다.

- 원래는 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# 문법 종합반 강의 수강
'Development In Unity > Study : C#' 카테고리의 다른 글
| C# STUDY_TIL251007 [클래스와 객체] (0) | 2025.10.07 |
|---|---|
| C# STUDY_TIL251006 [숫자 맞추기 게임, 틱텍토 게임 구현] (0) | 2025.10.06 |
| C# STUDY_TIL251005 [메서드] (0) | 2025.10.05 |
| C# STUDY_TIL251004 [배열과 컬렉션] (0) | 2025.10.04 |
| C# STUDY_TIL250928 [변수와 자료형, 연산자와 문자열] (0) | 2025.09.28 |
