C# 21

C# 1.0 - 힙과 스택

일반적으로 프로그램을 실행하면 프로그램의 코드는 메모리에 적재된다.메모리상의 코드는 CPU에 의해 하나씩 읽히면서 실행되는데, 이 과정에서 프로그램은 자연스럽게 데이터를 위한 메모리가 필요해진다. 그에 따라 메모리는 코드와 데이터로 채워진다.힙과 스택은 데이터를 위한 메모리라는 점에서 같은 성질을 띄지만 메모리의 용도에 따라 구분된다.스택Stack은 스레드가 생성되면 기본적으로 1MB의 용량으로 스레드마다 할당되고, 자료구조에서 다루는 스택과 동작 방식이 같다.이 스택 공간을 활용해서 스레드는 메서드의 실행, 해당 메서드로 전달하는 인자, 메서드 내에서 사용되는 지역 변수를 처리한다.스레드가 Sum 메서드를 호출하는 과정에서 스레드에 할당된 수택에 5와 6의 4바이트 정수값과 Sum 메서드를 호출한 후 ..

C# 2025.09.26

C# 1.0 - 예외

1. 오류(error) vs 예외(exception)오류 (Error)보통 컴파일러 수준이나 런타임에서 복구 불가능한 상황을 가리킬 때 사용한다.예: 컴파일 오류(세미콜론 빠짐, 형식 불일치), OutOfMemoryError 같은 치명적 상황.프로그램이 정상적으로 실행될 수 없을 때 발생한다.예외 (Exception)프로그램 실행 중 발생하는 비정상적인 상황을 나타내는 객체.C#, Java 같은 언어에서는 예외를 try-catch로 잡아서 처리할 수 있다.예: NullReferenceException, IndexOutOfRangeException, FileNotFoundException.2. “비정상 종료”의 의미프로그램을 실행했는데 비정상 종료되면, 대부분 예외를 던졌는데 처리되지 않고 전파된 경우입니..

C# 2025.09.24

C# 1.0 - 프로젝트 구성

프로젝트는 비주얼 스튜디오의 소스코드 관리를 위해 도입된 개념이다.한 프로젝트는 여러 개의 소스코드를 담을 수 있고, 해당 프로젝트를 빌드하면 하나의 exe 또는 DLL 파일이 만들어 진다.프로젝트를 생성하면 그 프로젝트에서 관리하는 모든 정보를 담는 '프로젝트 파일'이 만들어진다. 프로젝트 파일은 언어마다 확장자가 다르다. C# 언어의 경우 비주얼 스튜디오가 생성하는 프로젝트 파일의 확장자는 'csproj'이다.프로젝트 이름이 'ConsoleApp1'이라면 프로젝트 파일은 ConsoleApp.csproj가 되고 파일 탐색기를 통해 프로젝트가 있는 디렉토리에서 이 파일을 찾을 수 있다.프로젝트 파일은 텍스트를 담고 있기 때문에 윈도우의 메모장 등으로 내용을 볼 수 있지만 보통은 비주얼 스튜디오에서 프로젝..

C# 2025.09.24

C# 1.0 - 연산자

시프트 연산자시프트(shift) 연산자는 비트 단위로 데이터를 제어할 때 사용한다. 데이터가 표현되는 2진수를 생각하면 된다. 정수형으로 숫자 38은 2진수로 100110에 해당한다. 10진수 3832비트 2진수 00000000 00000000 00000000 00100110시프트 연산자는 2진수 상태의 값을 좌/우로 비트를 밀어내는 연산자다. 숫자 38: 2진수 00000000 00000000 00000000 00100110좌측으로 비트를 2번 시프트 : 38 > 200000000 00000000 00000000 00001001 결과값 9 고급 언어에서는 비트 연산이 그다지 자주 사용되는 편은 아니지만, 일부 상황에서 유용한 때가 있다.좌측 시프트를 한 번 할 때마다 2를 곱하는 효과가 있다. 따라서 ..

C# 2025.09.23

C# 1.0 - 문법요소

구문전처리기 지시문C#의 전처리기 지시문(preprocessor directive)은 특정 소스코드를 상황에 따라 컴파일 과정에서 추가/제거하고 싶을 때 사용한다.class Program{ static void Main(string[] args) { string txt = Console.ReadLine(); if(string.IsNullOrEmpty(txt) == false) { Console.WriteLine("사용자 입력: " + txt); } }}Console.ReadLine 메서드는 Enter 키가 눌릴 때까지의 키보드 입력을 받는 역할을 한다.메서드가 실행되면 콘솔 화면에는 입력을 기다리는 프롬포..

C# 2025.09.21

C# 객체지향 문법 [C#의 클래스 확장 - 멤버 유형 확장]

클래스에서 기본으로 제공되는 멤버 유형은 필드와 메서드다.프로퍼티는 메서드의변형이고, 델리게이트는 중첩 클래스의 변형이다.C#의 기본적인 필드, 메서드 외에 다양한 구성요소가 존재한다.읽기 전용 필드프로퍼티를 이용하면 필드의 값을 읽기만 가능하도록 외부에 노출할 수 있다.클래스 내부에서도 읽기만 가능하도록 만들고 싶다면? 또는 한 번만 값을 사용한 후 다시 값을 설정하지 못하게 만들고 싶을 수도 있다. 이런 경우에 readonly 예약어를 사용해 읽기 전용 필드(read - only field)를 정의하면된다.public class Scheduler{ readonly int second = 1; //읽기 전용 필드 정의 및 값을 대입 readonly string name; //읽기 전용 필드 ..

C# 2025.07.26

C# 객체지향 문법 [C#의 클래스 확장 - 열거형]

열거형(enumeration type)도 값 형식의 하나로 byte, sbyte, short, ushort, int, uint, long, ulong만을 상속받아 정의할 수 있는 제한된 사용자 정의 타입이다.[접근_제한자] enum 타입명{ // 숫자를 대표하는 식별자 이름 나열}// enum 타입은 숫자형 값에 사람이 인식하기 쉬운 문자열 이름을 부여한다. // 상속 타입을 지정하지 않는 경우 기본적으로 System.Int32가 된다.enum은 내부에 정의된 식별자 순서에 따라 각각 0부터 시작해 1씩 값을 증가시키며 대응시킨다.따라서 예제 코드의 Sunday는 숫자0이고, 그 이후로 1, 2, 3, ...과 같은 식으로 증가해 Saturday는 6이 되어 결국 상속받은 System.Int32 타..

C# 2025.07.23

C# 객체지향 문법 [C#의 클래스 확장 - 구조체]

'Object로부터 파생된 타입 관계'를 보면 기본 타입에서 숫자형과 char, bool 타입이 값 형식에 속한다.참조 형식은 string, object와 class로 정의되는 모든 타입이 포함된다. 그런데 값 형식에도 class처럼 사용자 형식을 두려면?구조체(Struct)를 사용하면 된다. 구조체는 클래스를 정의하는 문법과 매우 유사하다. class 예약어를 struct 예약어로 대체한다는 것과 함께 다음의 차이점이 있다. 인스턴스 생성을 new로 해도 되고, 안 해도 된다.기본 생성자는 명시적으로 정의할 수 없다. - (C# 10 부터 궂체에도 기본 생성자를 정의할 수 있다.)매개변수를 갖는 생성자를 정의해도 마치 기본 생성자가 있는 것처럼 C# 컴파일러에 의해 자동으로 지원된다. (클래스의 경우 ..

C# 2025.06.04

C# 객체지향 문법 [C#의 클래스 확장 - 인터페이스]

인터페이스(interface)는 간단하게 계약(contract)이라고 정의되며, 구현 없이 메서드 선언만 포함된 클래스 문법과 비슷한 면이 있다.접근_제한자 interface 인터페이스_명{ //[메서드 선언];}// 설명: 인텊페이스에는 메서드 선언을 0개 이상 포함할 수 있다. 관례적으로 인터페이스의 이름에는// I 접두사를 붙인다.인터페이스를 '추상 메서드만 0개 이상 담고 있는 추상 클래스'라고 생각해도 무방하다.다음의 두 가지 표현은 몇 가지 특징을 제외하고는 완전히 동일하다.abstract class DrawingObject{ public abstract void Draw(); public abstract voidi Move();}interface IDrawingObject;{..

C# 2025.05.27

C# 객체지향 문법 [C#의 클래스 확장 ~ 델리게이트]

클래스, 캡슐화, 상속, 다형성을 구현하는 것으로 C# 언어가 객체지향 언어라고 말할 수 는 있지만, 현실 세계에서 프로그래밍 하려면 좀 더 다양한 요소가 필요하다.타입 유형 확장중첩 클래스중첩 클래스(nested class는 클래스 내부에 또 다른 클래스를 정의하는 것이다.중첩 클래스가 필요한가?ex) 하드디스크는 내부에 플래터(platter)라고 하는 원형 금속판을 여러 개 포함하고 있으며, 헤드(head)가 그 금속판 위에 데이터를 읽고 쓰는 동작을 수행한다. 이를 C#으로 표현하면 3개의 클래스로 만들 수 있다.class Platter{}class Head{}public class HardDisk{ platter [] platter; Head head;}하지만 플래터와 헤드는 다른 구성..

C# 2025.05.19