본문 바로가기

전체 글49

C# 정리 ) 델리게이트 메서드를 가리킬 수 있는 타입을 C# 에서는 delegate 라는 구문으로 제공한다. 델리게이트 타입을 만드는 방법은 일반적인 class 구문이 아니고 delegate 라는 예약어로 표현된다. 접근제한자 delegate 대상메서드의반환타입 식별자(...대상메서드의매개변수목록...); 대상이 될 메서드의 반환 타입 및 매개변수 목록과 일치하는 델리게이트 타입을 정의한다. C/C++은 델리게이트를 간단하게 함수 포인터라고 설명한다. 관례적으로 델리게이트타입의 이름 끝에 Delegate 라는 접미사를 붙인다. 인스턴스가 메서드를 호출할 수 있다는 점을 제외하고는 델리게이트는 타입에 속한다. 델리게이트를 담는 배열도 만들 수 있고, 메서드 시그니처가 동일한 경우 인스턴스/정적 유형에 상관없이 모두를 가리킬 수 .. 2021. 12. 5.
C# 정리 ) 추상 클래스 메서드 오버라이드는 일반적으로 virtual 메서드를 정의한 부모 클래스에서 해당 메서드의 기본적 기능을 구현하고 자식 클래스에서는 override 예약어를 사용해 그 기능을 재정의 하는것이다. 또한 부모, 자식 클래스는 new 를 이용해 인스턴스를 생성하는 것이 가능하다. 하지만 부모 클래스의 인스턴스를 생성하지 못하게 막고, 특정 메서드에 대해 반드시 재정의 하도록 강제하고 싶을 때가 있을 수 있다. 추상 클래스와 추상 메서드는 이와 같은 상황을 위해 존재한다. 먼저 추상 메서드는 abstract 예약어를 통해 지정한다. 그리고 구현 코드가 없는 메서드를 말한다. 추상 메서드는 일반 클래스에 존재할 수 없다. 반드시 추상클래스 안에서만 선언이 가능하다. abstact 예약어가 지정된 추상 메서드를 다.. 2021. 12. 5.
C# 정리 ) 중첩 클래스 지금까지의 방법으로 모든 객체를 표현할 수 있기는 하다. 하지만 때때로 그것만으로는 부족할 때가 있다. 중첩 클래스는 클래스 내부에 클래스를 또 정의하는 것이다. RPG게임의 직업들을 클래스를 지금까지의 방법으로 표현을 해보자 class 전사 { } class 사냥꾼 { } class 도적 { } 하지만 가만히 생각해보면 이 클래스들은 직업 안에 포함되어 있다. 그런데도 위와 같이 각각의 클래스를 나누어 정의하면 다른 클래스에서 사용될 가능성이 있다. 개발자가 실수할 여지를 남겨두는 것이다. 따라서 개념상으로 보면 다음과 같이 직업 내부로 정의를 제한하는 것이 더 올바를 수 있다. class 직업 { class 전사 { } class 사냥꾼 { } class 도적 { } } C#에서 클래스의 경우 접근 .. 2021. 12. 5.
C# 정리 ) 클래스 간의 형변환 타입을 정의하는것은 단위 환산을 빈번하게 해야하는 프로그램에서도 유용하다. 와우의 화폐 골드 실버 코퍼를 단순히 하나의 데이터 타입으로 정의한다면 계산에 오류가 생기기 쉽다. decimal gold = 10; decimal silver = gold * 100; decimal copper = silver * 100; gold = silver; // 이런식으로 대입을 해도 오류가 발생하지 않는다 이 코드에서는 공통된타입, decimal을 통해 모든 통화를 표시가혹 있는데, 이는 나중에 유지보수를 하는 동안 중대한 버그를 발생시킬 수도 있다. using System; namespace Project2 { public class 통화 { decimal money; public decimal Money { get.. 2021. 12. 5.