본문 바로가기

프로그래밍/C#101

C# 인터페이스 이해하기 인터페이스(Interface) 인터페이스는 추상화를 달성하고 객체가 서로 상호 작용할 수 있도록 하는 강력한 도구이다. 클래스가 구현해야 하는 메서드, 속성 및 이벤트의 집합을 정의하지만 이에 대한 구현은 제공하지 않는다. 이를 통해 코드의 유연성과 재사용성을 높인다. 소프트웨어 개발의 추상화는 시스템의 다른 부분에서 구현의 세부 사항을 숨기는 프로세스이며 이는 복잡성을 줄이고 개발자가 모든 세부 사항을 이해할 필요 없이 동일한 코드베이스에서 작업할 수 있도록 하기 위함이다. 또한 추상화를 통해 개발자는 구현 세부 정보 대신 기능에 집중할 수 있게 된다. 인터페이스란 무엇인가? 인터페이스는 클래스처럼 보이지만 구현이 없다. 여기에는 이벤트, 인덱서, 메서드 또는 속성의 선언만 포함된다. 인터페이스가 선언.. 2023. 8. 3.
C# Closure 이해하기 C# Closure Closure는 C# 2.0부터 지원된 기능으로서 C#의 무명메서드(Anonymous Method)와 람다식(Lambda Expression)으로 구현할 수 있다. 먼저 간단히 무명메서드를 이용하여 Closure를 사용한 예를 살펴보자. 다음은 간단한 무명메서드를 정의하여 print라는 델리게이트 객체에 할당한 예이다. 여기서 정의된 delegate 블록은 작은 함수라 볼 수 있는데, 이 함수는 단순히 콘솔 출력 문장 하나로 되어 있다. 이것이 Closure가 아니다. public void Test2() { Action print = delegate (string msg) { Console.WriteLine(msg); }; print("A"); } 이제 한걸음 더 나아가 Test() .. 2023. 8. 2.
C# 무명 메서드(Anonymous Method) 무명 메서드(Anonymous method) C# 2.0에서부터 메서드를 미리 정의하지 않아도 되는 메서드명이 없는 무명 메서드(혹은 익명 메서드, Anonymous Method)를 지원하게 되었다. 만약 어떤 메서드가 일회용으로 단순한 문장들로 구성되어 있다면, 굳이 별도의 메서드를 정의하지 않아도 되는 것이다. 무명 메서드를 만들기 위해서는 delegate 키워드와 함께 아래와 같이 파라미터와 실행 문장 블록을 적으면 된다. delegate 뒤의 파라미터는 해당 메서드 원형(prototype)에 맞는 동일한 파라미터 타입이어야 하며, 실행 문장블록에는 여러 문장들을 쓸 수 있다. 무명 메서드는 외관상 인라인 메서드(inline method) 형식을 띠며, 무명 메서드 자체를 delegate 타입의 변.. 2023. 8. 2.
C# 7.0 튜플(Tuple) 튜플이란? C# 7 이전 버전에서는 메서드에서 하나의 값만을 리턴할 수 있었지만, C# 7부터는 튜플(Tuple)을 사용하여 메서드로부터 복수 개의 값들을 리턴할 수 있게 되었다. 메서드 원형을 정의할 때 리턴타입이 복수 개이므로 튜플 리턴 타입(tuple return type) 표현식을 사용하게 되는데, 이는 괄호 ( ) 안에 여러 리턴타입을 순서대로 나열하면 된다. 예를 들어, int 2개와 double 하나를 리턴할 경우 (int, int, double)과 같이 표현할 수 있으며, 더 나아가 편의를 위해 각 리턴타입마다 이름을 지정할 수도 있다. 예를 들어 (int count, int sum, double average)와 같이 작성이 가능하다. 예제 코드 (double, int) t1 = (4.5.. 2023. 7. 27.
C# Queue 기본 생성자로 초기화 하기 Queue를 List랑 동일하게 초기화 시키고 싶었다. 예상과는 다르게 에러가 발생. List를 초기화하는 방식처럼 Queue도 초기화 될줄 알았는데 당연하게 될줄 알았던 부분이 작동하지 않았다. List L1 = new List { 1, 2, 3 }; Queue Q1 = new Queue { 1, 2, 3 }; // error 발생 컬렉션 이니셜라이저(Collection initializers) 컬렉션 이니셜라이저를 사용하면 컬렉션 타입을 초기화할 때 하나 또는 그 이상의 요소 이니셜라이저를 지정해서 초기화 할 수 있다. 단 IEnumerable을 구현하고 적절한 시그니처가 있는 Add를 인스턴스 메서드 또는 확장 메서드로 포함해야 한다. 요소 이니셜라이저는 단순한 값, 식 또는 개체 이니셜라이저일 수.. 2023. 7. 26.
C# virtual 키워드 virtual 키워드란? virtual 키워드는 메서드, 속성, 인덱서 또는 이벤트 선언을 수정하고 파생 클래스에서 재정의하도록 허용하는 데 사용된다. 예를 들어 이 메서드는 이를 상속하는 모든 클래스에서 재정의 할 수 있다. virtual - 가상함수. 구현부가 필요하다. 상속받은 쪽에서 무조건 구현하지 않아도 된다. abstract - 순가상함수. 상속받은 쪽에서 무조건 구현되어야 한다. public class base { // virtual은 base클래스에서 정의되어야 한다. 정의하지 않으면 error! public virtual double Area() { return x * y; } // abstract는 base클래스에서 정의하지 않아도 된다. public abstract bool IsVal.. 2023. 7. 5.