📂 0. 메모리 구조
- 할당 : 변수를 위해 메모리를 확보하는 것
- 해제 : 사용이 끝난 메모리를 비우는 것
- 메모리 누수 : 해제되지 않아 낭비되는 메모리
- 스택 ( Stack ) : 지역 변수 , 매개 변수 , 함수 호출 정보 등이 저장되는 메모리 영역 ( 함수 종료시 해제 )
- 힙 ( Heap ) : 참조 타입 객체가 저장되는 메모리 영역, 가비지 컬렉터 ( GC ) 가 관리한다.
- 데이터 ( Data ) : 전역 , 정적 , 상수 데이터가 저장된 영역
- 코드 ( Code ) : 실행할 명령어가 저장된 영역
- 가비지 컬렉터 ( GC ) : 사용하지 않는 Heap 메모리를 자동으로 회수하는 기능
📂 1. 실행 방식
- 정적 ( Static ) : 프로그램 실행 중에 한 번만 할당되고 모든 곳에서 공유
- 동적 ( Dynamic ) : 실행 도중에 생성 / 결정되는 데이터 ( 예시 : 전투 중 드랍 아이템 )
- 런타임 ( Runtime ) : 프로그램이 실제로 실행되는 시간대
📂 2. 자료형 & 변수
- 자료형 ( Data Type ) : 데이터 종류와 크기를 정의하는 규칙
- 정수형 : byte , sbyte , short , ushort , int , uint , long , ulong
- 실수형 : float , double , decimal
- 문자열 : char , string
- 논리형 : bool
- 변수 ( Variable ) : 데이터를 저장하기 위한 이름이 붙은 공간
- Null : 마구 객체도 참조하지 않음을 나타내는 값
📂 3. 기본 문법 ( 문법 / 제어문 )
- 조건문 : 조건에 따라 코드 실행 흐름을 제어 ( if , else , switch )
- 반복문 : 조건 / 횟수에 따라 반복 실행 ( for , foreach , while , do-while )
- continue : 반복문에서 다음 반복으로 건너뛴다
- break : 반복문을 즉시 종료한다
- 삼항연산자 (?:) : 조건식 결과( true: false: ) 에 따라 두 값 중 하나 선택
- is ( 형변환 ) : 객체가 특정 타입인지 검사하는 연산자 ( true / false 반환 )
- as ( 형변환 ) : 객체를 특정 타입으로 변환 시도 , 실패시 null 반환
- 캐스팅 ( Casting ) : 변수나 객체를 다른 자료형으로 변환 ( 명시적 / 암시적 변환 포함 ) ( 언박싱도 포함 )
- 오브젝트 ( Object ) : C#의 최상위 참조 타입 , 모든 타입의 부모 클래스
- 박싱 ( Boxing ) : 값 타입을 참조 타입 ( Object ) 으로 변환하는 과정 ( Heap 저장 )
- 언박싱 ( Unboxing ) : 참조 타입 ( Object )에 담긴 값을 다시 값 타입으로 변환하는 과정 ( Stack 저장 )
- 오버플로우 ( Overflow ) : 데이터가 자료형의 허용 범위를 넘어설 때 발생하는 오류
- 얕은 복사 ( Shallow Copy ) : 객체의 참조만 복사하여 , 원본과 복사본이 같은 데이터를 참조하게 되는 방식
- 깊은 복사 ( Deep Copy ) : 객체의 모든 필드와 하위 참조까지 완전히 복제하여 독립된 복사본을 만드는 방식
- 레거시 코드 ( Legacy Code ) : 과거에 작성되어 현재도 동작하지만 , 유지보수가 어렵거나 오래된 코드를 의미
📂 4. 메서드 & 매개변수
- 메서드 ( Method ) : 특정 동작을 모아놓은 재사용 가능한 코드 블록
- 매개변수 ( Parameter ) : 함수 정의 시 값을 받을 자리
- 인자값 ( Argument ) : 함수 호출 시 실제로 전달하는 값
- ref / out / in : 메서드 매개변수 전달 방식 제어 ( 참조 / 출력전용 / 읽기전용 )
- this : 현재 객체 자신을 참조하는 키워드
- static : 인스턴스 없이 클래스 차원에서 공유되는 멤버
📂 5. 객체지향 프로그래밍 ( OOP )
- 클래스 ( Class ) : 객체를 만들기 위한 설계도
- 객체 ( Object ) : 클래스로부터 만들어진 실체
- 인스턴스 ( Instance ) : 특정 클래스에서 생성된 구체적 객체
- 필드 ( Field ) : 클래스 내부에 선언된 변수
- 멤버 ( Member ) : 클래스나 구조체 안에 포함된 구성 요소 ( 필드 , 메서드 , 속성 등 클래스 안의 모든 것 )
- 쉐도잉 ( Shadowing ) : 같은 이름의 멤버가 가려지는 현상
- 오버로딩 ( Overloading ) : 같은 이름의 메서드를 매개변수에 따라 다르게 정의
- 캡슐화 : 데이터 ( 필드 )와 기능 ( 메서드 )을 하나의 객체 안에 묶음
- 상속 : 기존 클래스의 기능을 물려받아 확장
- 다형성 : 같은 이름의 메서드가 상황에 따라 다르게 동작
- 추상화 : 불필요한 세부사항은 감추고, 중요한 부분만 표현
- 인터페이스 ( Interface ) : 클래스가 반드시 구현해야 하는 속성과 메서드의 규격 ( 약속 )만 정의하는 틀
- 추상클래스 ( Abstract Class ) : 공통 기능은 구현하고, 반드시 구현해야 하는 추상 멤버를 자식 클래스에 강제
📂 6. 자료구조 & 데이터 표현
- 선입선출 ( FIFO ) : 먼저 넣은 데이터가 먼저 나온다 ( Queue )
- 후입선출 ( LIFO ) : 나중에 넣은 데이터가 먼저 나온다 ( Stack )
- 배열 : 같은 자료형 데이터를 연속적으로 저장하는 구조 ( Array )
- 열거형 : 이름 붙은 상수 집합 ( Enum )
- 구조체 : 값 타입 데이터 묶음 ( Struct , 작은 데이터 묶음 표현 )
- 딕셔너리 ( Dictionary ) : 키-값 쌍으로 데이터 저장하고 키로 빠르게 조회할 수 있는 컬렉션
- Count : 컬렉션에 현재 들어있는 요소의 개수
- Capacity : 컬렉션이 재할당 없이 담을 수 있는 요소의 최대 크기
- Key : 딕셔너리에서 값 ( Value )에 접근하기 위해 사용하는 고유 식별자 ( Unique Key )
📂 7. 고급 문법
- 제네릭 ( Generic ) : 자료형을 일반화해 재사용성을 높이는 문법
- 델리게이트 ( Delegate ) : 메서드를 변수처럼 다룰 수 있는 타입
- 람다식 ( Lambda ) : 간단한 익명 메서드 표현식 ( => )
- 네임스페이스 ( Namespace ) : 클래스 , 구조체 , 인터페이스 등을 묶어 관리하는 일종의 폴더