본문 바로가기

C#18

[예제로 배우는 C# 프로그래밍] 전처리기 C# 전처리기 전처리기 지시어 전처리기 지시어는 실제 컴파일이 시작되기 전에 컴파일러에게 특별한 명령을 미리 처리하도록 지시하는 것이다. 모든 C# 전처리기 지시어는 #로 시작하며, 한 라인에 한 개의 전처리기 명령만을 사용한다. 또한, 전처리기 지시어는 C# Statement가 아니기 때문에 끝에 ;를 붙이지 않는다. 전처리기 지시어는 해당 파일 안에서만 효력이 있다. 만약 하나의 클래스가 두 개의 파일에 나뉘어 Partial Class로 저장되었을 때, 두 개의 파일에서 동일한 심볼을 사용하고 싶다면, 두 개의 파일에 각각 심볼을 정의해야 한다. 조건별 컴파일 C# 전처리기에서 자주 사용되는 것에는 #define, #if, #else, #endif 등이 있다. #define은 심볼을 정의할 때 사용된.. 2022. 7. 6.
[예제로 배우는 C# 프로그래밍] 이벤트 C# 이벤트 이벤트 이벤트는 클래스 내에 특정한 일이 일어났음을 외부의 이벤트 가입자들에게 알려주는 기능을 한다. C#에서는 event라는 키워드를 사용하여 이벤트를 표시하며, 클래스 내에서 일종의 필드처럼 정의된다. 이벤트에 가입하는 외부 가입자 측에서는 이벤트가 발생했을 때 어떤 명령들을 실행할 지를 지정해주는데, 이를 이벤트 핸들러라고 한다. 이벤트에 가입하기 위해서는 += 연산자를 사용하여 이벤트 핸들러를 이벤트에 추가한다. 반대로 이벤트 핸들러를 삭제하기 위해서는 -= 연산자를 사용한다. 하나의 이벤트에는 여러개의 이벤트 핸들러들을 추가할 수 있으며, 이벤트가 발생되면 추가된 이벤트 핸들러들을 모두 차례로 호출한다. 다음 예제는 클래스 내에서 이벤트를 정의하고 사용하는 코드이다. // 클래스 내.. 2022. 7. 6.
[예제로 배우는 C# 프로그래밍] 메서드 파라미터 C# 메서드 파라미터 메서드 클래스 내에서 코드 블럭을 실행시키는 함수를 메서드라고 한다. 메서드는 0~N개의 인수를 가질 수 있으며, 하나의 반환 값을 갖는다. 반환값이 없으면 리턴 타입을 void로 둔다. 또한 public, private 같은 접근 제한자를 리턴 타입 앞에 둘 수 있다. public int GetData(int a, string b, bool c) { } Pass by Value C#은 메서드에 인수를 전달할 때, 값을 복사해서 전달하는 Pass by Value 방식을 따른다. 전달된 인수를 메서드 내에서 변경한다고 해도 메서드가 끝나고 함수가 리턴된 후에는 전달되었던 인수의 값은 호출자에서 원래 값 그대로 유지된다. class Program { private void Calcula.. 2022. 7. 6.
[예제로 배우는 C# 프로그래밍] Nullable 타입 C# Nullable 타입 Nullable Type C#에서는 Value Type에도 null을 할당할 수 있는 Nullable 타입을 지원한다. Nullable 타입은 Value 값을 갖고 있으면서 Null 상태를 체크할 수 있는 기능을 갖고 있는 struct이다. 따라서 Nullable 타입은 구조체이므로 Value 타입이다. int?와 같이 해당 Value Type 뒤에 물음표를 붙이면 해당 정수형 타입이 Nullable 정수형 타입임을 의미한다. 즉, 이 변수에는 Null을 할당할 수 있다. 이러한 특별한 문법은 .NET의 Nullable 구조체로 컴파일시 변환된다. 즉, int?는 Nullable와 동일한 역할을 한다. int? i = null; bool? b = null; int?[] a = .. 2022. 7. 6.
[예제로 배우는 C# 프로그래밍] 클래스 C# 클래스 클래스 class 키워드는 Reference Type을 정의하는데 사용된다. 클래스는 메서드, 속성, 필드, 이벤트 등을 멤버로 포함하는 소프트웨어 단위로서 보통 이 클래스 정의로부터 객체를 생성해서 사용하게 된다. 클래스를 정의할 때 중요한 멤버는 공용 메서드와 속성인데, 이 공용 멤버들은 외부 객체와의 상호작용을 위해 사용된다. 클래스 정의는 class 키워드를 사용해서 정의한다. class 키워드 뒤에 클래스명을 써주고, 클래스 블럭 안에 필드, 메서드, 속성, 이벤트 등을 정의해준다. 클래스 각 멤버들은 public, protected, private 등의 접근제한자에 따라 외부 객체로부터 접근이 허용될 수도 있고 제한될 수도 있다. public class MyCustomer { //.. 2022. 7. 6.
[예제로 배우는 C# 프로그래밍] 구조체 C# 구조체 Value Type vs Reference Type C#은 Value Type과 Reference Type을 지원한다. struct를 사용하면 Value Type을, class를 사용하면 Reference Type을 만든다. C# .NET의 기본 데이터형들은 struct로 정의되어 있다. 즉, int, double, float, bool 등의 기본 자료형들은 모두 struct로 정의된 Value Type이다. Value Type은 상속될 수 없으며, 주로 상대적으로 간단한 데이터값을 저장하는데 사용된다. Reference Type은 클래스를 정의하여 만들며, 상속이 가능하고 좀 더 복잡한 데이터와 행위들을 정의하는 곳에 많이 사용된다. Value Type의 파라미터 전달은 데이터를 복사하여.. 2022. 7. 6.
[예제로 배우는 C# 프로그래밍] 네임스페이스 C# 네임스페이스 네임스페이스  .NET Framework는 무수하게 많은 클래스들을 갖고 있는데, 이 많은 클래스들을 충돌 없이 보다 편리하게 관리하고 사용하기 위해 .NET에서 네임스페이스를 사용한다. C#에서도 이러한 개념을 적용하여 클래스들이 대개 네임스페이스 안에서 정의된다. 클래스가 네임스페이스 없이도 정의될 수 있지만, 거의 모든 경우 일반적으로 네임스페이스를 정의한다. namespace MyNamespace { class A { } class B { } } 네임스페이스 참조 네임스페이스를 사용하는 방법은 두가지가 있다. ① 클래스명 앞에 네임스페이스 전부를 적는 경우 ② 프로그램 맨 윗단에 해당 using을 사용하여 사용하고자 하는 네임스페이스를 한번 설정해주고 이후 해당 파일 내에서 .. 2022. 7. 6.
[예제로 배우는 C# 프로그래밍] 예외 처리 C# 예외 처리 예외 처리 C#을 포함한 모든 .NET 프로그래밍 언어는 .NET Framework의 Exception 메커니즘에 따라 예외를 처리한다. .NET의 System.Exception은 모든 Exception의 Base 클래스이며, 예외 처리는 이 Exception 객체를 기본으로 처리하게 된다. 만약 예외가 발생했는데 이를 프로그램 내에서 처리하지 않으면 이를 Unhandled Exception이라 부르고, 프로그램은 Crash하여 종료된다. C#에서는 try, catch, finally 키워드를 사용하여 예외를 핸들링하게 되고, throw라는 키워드를 통해 Exception을 만들어 던지거나 혹은 기존 Exception을 다시 던질 수 있다. try { // 실행하고자 하는 문장들 DoSo.. 2022. 7. 6.
[예제로 배우는 C# 프로그래밍]yield C# yield yield yield 키워드는 호출자에게 컬렉션 데이터를 하나씩 리턴할 때 사용한다. 흔히 Enumerator(Iterator)라고 불리는 이 기능은 집합적인 데이터셋으로부터 데이터를 하나씩 호출자에게 보내는 역할으 한다. yield는 yield return 또는 yield break 2가지 방식으로 사용되는데, 각각의 사용처는 다음과 같다. ① yield return : 컬렉션 데이터를 하나씩 리턴하는데 사용 ② yield break : 리턴을 중지하고 Iteration 루프를 빠져나올 때 사용 다음의 예제를 살펴보자. using System; using System.Collections.Generic; class Program { static IEnumerable GetNumber().. 2022. 7. 6.