전체 글

전체 글

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 3. 인터페이스(Interface)

    4. 인터페이스(Interface) 인터페이스의 궁극적인 목적은 Type을 연결하는 데 있습니다. Type을 Interface기반으로 구현하게 되면 반드시 특정 기능을 지원하기 위한 장치(메서드나 필드 등)가 존재함을 약속할 수 있는데 이는 종종 '계약'에 비유되기도 합니다. 인터페이스는 직접 작성할 수 있지만 .NET에는 특정 기능을 위한 몇 가지 인터페이스가 이미 마련되어 있습니다. 인터페이스 구현되는 메서드 기능 IComparable CompareTo(type) Type의 인스턴스를 대상으로 순서나 정렬을 구현하기 위한 비교메서드입니다. IComparer Compare(type, type) 두번째 Type이 첫번째 Type의 인스턴스를 정렬하거나 정렬하기 위한 메서드를 구현합니다. IDisposab..

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 2. 제네릭(generic)

    3. 제네릭(generic) 제네릭이 처음 등장한 건 2005년 C# 2.0과 .NET Framework 2.0 때인데 당시 마이크로소프트는 제네릭을 Type을 매개변수로 전달함으로써 Type이 좀 더 효율적이고 안전하게 재사용될 수 있도록 할 수 있다고 소개한 바 있습니다. 제네릭의 유용성을 알아보기 위해서는 우선 실제 제네릭을 사용할 수 없을 때의 코드가 구현되는 경우를 먼저 살펴볼 필요가 있습니다. 제네릭이 등장하기 이전에는 매개변수에서 값을 다루는데 취약한 면이 있었으며 대안으로 사용했던 System.Object형식을 사용하는 것 자체가 성능 저하의 문제를 유발할 수 있었습니다. 예를 들어 HashTable에 특정 키와 값을 담아두는 아래와 같은 경우를 보면 System.Collections.Ha..

    [C#] 인터페이스(Interface)와 상속(Inheriting) - 1. 메서드(Method)와 이벤트(Event)

    1. 메서드(Method) 메서드에 관한 기본적인 내용은 아래 글에서도 다루고 있으니 참고 바랍니다. [.NET/C#] - [C#] C#과 OOP(Object-Oriented Programming) 클래스(Class) 안에서는 메서드를 통해 특정 기능을 구현하게 되는데 종종 비슷한 기능을 인스턴스화 된 객체와 Type에서 각각 수행될 수 있도록 2중으로 구현하는 경우가 있습니다. 예를 들어 .NET string에 보면 Type에서 호출될 수 있는 Compare() 메서드와 인스턴스 객체에서 호출될 수 있는 CompareTo() 메서드가 있는데 이 둘은 비교를 수행한다는 점에서 비슷한 동작을 수행하며 해당 Type을 사용하는 개발자는 편의성을 고려해 이 둘의 메서드를 선택적으로 사용할 수 있게 됩니다. T..

    [C#] C#과 OOP(Object-Oriented Programming) - 7. 레코드(Record)

    7. Record 사용 위 예제에서 Car Class의 displacement Property는 객체가 생성되고 난 후 초기값이 결정되고 나서도 언제든 값이 바뀔 수 있습니다. Car sedan = new(); sedan.displacement = 999; Console.WriteLine($"{ sedan.displacement }"); sedan.displacement = 3000; Console.WriteLine($"{ sedan.displacement }"); //999 //3000 하지만 객체의 인스턴스가 생성되는 순간에만 값이 결정되고 그다음 값이 바뀌지 말아야 하는 경우라면 Property의 set을 init으로 사용할 수 있습니다. public class Car { public int dis..

    [C#] C#과 OOP(Object-Oriented Programming) - 6. 패턴 매칭(Pattern Matching)

    6. 객체 비교를 위한 패턴 매칭(Pattern Matching) 패턴 매칭은 이미 아래 글에서 잠깐 살펴보았는데 [.NET/C#] - [C#] 흐름제어, 형변환, 예외처리 [C#] 흐름제어, 형변환, 예외처리 1. 변수 ● 산술 연산자 연산자는 변수나 실제값에 해당하는 피연산자를 더하거나 곱하는 등의 연산을 수행하며 일반적으로 다른 변수에 할당 가능한 또 다른 값을 반환합니다. 연산자 중 이항 lab.cliel.com 예제에서의 경우뿐만 아니라 객체의 Type비교를 위한 경우에도 패턴 매칭을 적용할 수 있습니다. namespace mylibrary; public class Car { public int displacement { get; set; } } public class Truck { } 예제는 ..

    [C#] C#과 OOP(Object-Oriented Programming) - 5. 속성(Property)과 인덱서(Indexer)

    5. 속성(Property)과 인덱서(Indexer) ● 속성(Property) 속성은 특정 값을 설정할 때 메서드처럼 호출하고 값을 가져오는 경우 Field처럼 호출하여 사용할 수 있도록 하는 것으로 해당 기능을 구현하기 위한 구문이 간소화될 수 있습니다. namespace mylibrary; public class Car { public int Speed { get; set; } public int RPM => Speed * 2; } 예제에서는 Speed와 RPM이라는 2개의 Property를 정의하였습니다. Speed는 값을 읽는 get과 값을 설정하는 set으로 인해 int형식의 값을 설정하고 가져올 수 있고 RPM은 Speed에서 *2를 연산한 결과만을 읽을 수 있는 Property가 되었습니다..

    [C#] C#과 OOP(Object-Oriented Programming) - 4. Method (메서드)

    4. Method (메서드) '함수'라고 하는 것과 개념이 동일하지만 어떤 Type(클래스)에서 하나의 Member로 취급될 수 있고 이러한 특징 때문에 이를 '메서드'라고 부르게 되었습니다. ● 값을 반환하기 메서드는 아무런 값도 반환하지 않거나 특정 값을 반환하도록 만들 수 있습니다. 그리고 값을 반환하는지에 대한 구분은 메서드에서 반환받을 값의 Type이 명시되었는지 혹은 void로 메서드가 수식되었는지로 판단할 수 있습니다. namespace mylibrary; public class Car { //void는 아무런 값도 반환하지 않음 public void Stop() { Console.WriteLine("자동차 정지"); } //int형식의 값을 반환함 public int Drive() { Co..

    [C#] C#과 OOP(Object-Oriented Programming) - 3. 필드(Field)

    3. Field '자동차'는 자신만의 차량번호와 생산이 완료되 시장에 나오는 출고일이라는 날짜가 존재할 수 있습니다. 이 값을 다루기 위해 이전에 만든 Car클래스에서는 Field를 아래와 같이 추가합니다. public class Car { public string Number; public DateTime FDate; } 예제에서는 Field에서 string과 DateTime형식을 사용했지만 Field를 만드는 데는 int나 Array 등 C#에서 다룰 수 있는 모든 형식뿐만 아니라 Car와 같은 자신이 직접 만든 형식까지도 사용할 수 있습니다. ● 접근 한정자 '접근 한정자'는 캡슐화 과정에서 Field를 어떻게 외부에 노출할 것인지를 지정하는 것입니다. 위 예제에서 Car클래스의 Number과 Co..