반응형

C# 267

[C#] 5.1.5 생성자

5.1.5 생성자 생성자는 정의한 클래스나 구조체의 개체가 생성될 때 수행할 코드를 작성하는 메서드입니다. 생성자는 반환 형식을 명시할 수 없고 형식 이름과 같은 이름을 갖는 특별한 메서드입니다. C#에서 정의할 수 있는 생성자 종류에는 기본 생성자, 입력 매개 변수가 있는 생성자, 정적 생성자가 있습니다. 기본 생성자는 입력 매개 변수가 없는 생성자를 말합니다. 기본 생성자는 클래스에서만 명시적으로 정의할 수 있으며 구조체는 매개 변수 있는 생성자만 정의할 수 있습니다. 또한, 클래스나 구조체 내에 어떠한 생성자도 정의하지 않으면 묵시적으로 기본 생성자가 만들어지며 멤버들을 기본값으로 초기화하는 등의 작업을 수행합니다. [그림 15] 구조체에 명시적으로 기본 생성자를 정의할 경우 오류화면 ▶ 생성자를 ..

[C#] 5.1.4 인덱서

5.1.4 인덱서 인덱서는 멤버 요소들로 구성된 컬렉션 개체의 요소에 쉽게 접근할 수 있게 해 주는 멤버입니다. 인덱서는 매개 변수가 있다는 점을 제외하면 구현 방법이 속성과 매우 흡사하며 속성처럼 get 블록과 set 블록을 선택적으로 정의할 수 있습니다. 인덱스를 캡슐화할 때에는 요소 형식, this 키워드, [매개 변수]를 선언하고 내부에 get 혹은 set 블록을 정의하면 됩니다. class Example{ ... public string this[int index] { get { return ...; } set { ...[index] = value; } }} 사용하는 곳에서는 인덱스 연산자를 이용하여 원하는 요소를 참조할 수 있습니다. static void Main(string[] args){ ..

[C#] 5.1.3 메서드와 매개 변수 전달 방식

5.1.3 메서드와 매개 변수 전달 방식 메서드는 수행해야 할 작업에 대한 코드가 있는 블록입니다. 메서드는 이름과 수행에 필요한 입력 매개 변수와 수행한 결과 형식을 선언하고 블록 내에서 수행할 코드를 정의해야 합니다. 메서드의 입력 매개 변수는 여러 개가 올 수 있으면 콤마를 통해 구분하게 됩니다. 그리고 반환 형식은 하나만 정의할 수 있으며 필요가 없으면 void 로 선언합니다. int DoAny(int a, int b){ return a + b;} 입력 매개 변수는 전달하는 방법에는 값으로 전달하는 방법과 참조로 전달하는 방법이 있습니다. 선언문에 단순히 형식과 변수 이름만 명시하면 값을 복사하여 전달되며 out이나 ref를 명시하면 참조로 전달됩니다. 값을 복사하여 전달하면 호출한 곳의 변수와 ..

[C#] 5.1.2 멤버 속성

5.1.2 멤버 속성 멤버 속성은 멤버 필드에 있는 값을 얻어오거나 변경할 때 사용할 수 있게 제공하는 특별한 메서드입니다. 멤버 속성을 캡슐화하기 위해서는 형식과 속성 명을 선언하고 전용 필드의 값을 얻어올 때 사용하는 get 블록과 설정하는 set 블록을 선택적으로 정의할 수 있습니다. 각 블록에서는 메서드처럼 내부에서 수행할 작업에 대한 코드를 작성할 수 있으며 필요에 따라 get 블록과 set 블록의 접근 한정을 다르게 지정할 수도 있습니다. get 블록에서는 선언한 형식을 반환해야 하고 set 블록에서는 value 이름으로 전달된 값을 사용할 수 있습니다. using System; namespace Ex_MemberProperty { class Man { public string name; //..

[C#] 5. 캡슐화

5. 캡슐화 C#에서는 프로그램 목적에 맞게 사용자가 형식을 정의할 수 있습니다. C#에서 사용자가 형식을 정의하기 위한 문법으로 클래스와 구조체, 열거형 등을 제공하고 있는데 열거형에 대해서는 앞에서 다루었으며 여기에서는 클래스와 구조체에 대해 알아봅시다. 클래스와 구조체는 여러 개의 멤버를 하나의 형식으로 묶어 하나의 형식으로 정의할 수 있습니다. 이와 같은 작업을 캡슐화라고 하는데 C언어에서는 구조체만 제공하고 있으며 캡슐화 대상도 멤버 필드(멤버 변수)로 한정되어 있었습니다. C++언어에서는 클래스를 제공하고 구조체와 클래스에 캡슐화 대상이 멤버 필드뿐만 아니라 멤버 메서드도 캡슐화 대상입니다. 그리고 C언어는 캡슐화된 멤버에 접근 지정자를 제공하고 않아서 모든 멤버에 접근할 수 있습니다. 이는 ..

[C#] 방문자 패턴(Visitor Pattern) - 구현

25. 방문자 패턴(Visitor Pattern) [그림] 방문자 패턴(Visitor Pattern) 클래스 다이어그램 25.4 구현 반복자 패턴에 대한 예제 프로그램을 구현하는 순서는 Element 군, Visitor 군, MyTour와 데모 코드 순으로 하겠습니다. 25.4.1 Element 군 MyTour는 사진과 일기를 통합 관리하는 컬렉션 입니다. 사진과 일기와 같이 MyTour에서 관리 가능한 요소에 대한 기반 클래스를 Element라 정하고 사진을 Picture, 일기를 Diary라 정하겠습니다. 방문자 패턴에서는 요소에 따라 다르게 처리해야 할 기능들을 구체화 된 방문자 형식을 정의를 하고 실제 요소 형식에서는 단순히 방문자를 수용하는 메서드만 정의를 합니다. 즉, 실질적인 구현은 각 요소..

[C#] 방문자 패턴(Visitor Pattern) - 설계(Design)

25. 방문자 패턴(Visitor Pattern) 25. 3 디자인 반복자 패턴에 대한 설명을 위한 예제로는 여행에 대한 일기 형식의 기록과 사진을 통합 관리하는 응용을 가지고 보여 드릴께요.. 응용에는 여행에서의 사진과 일기를 보관하는 컬렉션을 두려고 합니다. 일단, 사진과 일기는 해당 컬렉션에 같이 보관할 수 있게 하기 위해 기반 클래스를 만들어야 겠지요. 그리고, 해당 컬렉션에 특정 명령을 내렸을 때 사진이나 일기에 따라 구체적 행위가 다르게 적용해야 하는 기능들을 추상화 하여 방문자를 정의할 것입니다. 그리고, 사진과 일기의 기반 클래스에서는 방문자를 수용할 수 있게 하고 방문자에서 자신을 처리할 수 있는 메서드를 호출하게 할께요. 대신 방문자에서는 일기와 사진과 같은 요소 형식들에 따라 처리하는..

[C#] 방문자 패턴(Visitor Pattern) - 개요, 시나리오

25. 방문자 패턴(Visitor Pattern) 25.1 개요 프로그래밍을 하다 보면 여러 구성 요소들로 구성된 개체를 정의해야 하는 경우는 매우 흔한 일입니다. 그리고, 특정 명령을 수행함에 있어 내부 구성 요소 개체들의 형식에 따라 적용해야 할 구체적 행위가 다른 경우가 있을 것입니다. 이와 같은 경우에 방문자 패턴을 사용하면 개체들의 형식에 따라 적용해야 할 구체적 행위를 분리하여 정의할 수 있습니다. 이는 새로운 행위를 정의할 필요가 생길 경우에도 구성 요소 형식을 변경하지 않으면서 추가할 수 있게 됩니다. 방문자 패턴에서는 개체를 구성하는 여러 요소 개체들에게 요소의 형식에 따라 수행할 구체적 작업을 방문자에 정의하게 됩니다. 대신 요소의 형식에서는 방문자를 수용하는 메서드를 제공을 하고 방문..

[C#] 템플릿 메서드 패턴(Template Method Pattern) - 구현

24. 템플릿 메서드 패턴(Template Method Pattern) [그림] 템플릿 메서드 패턴(Template Method Pattern) 클래스 다이어그램 24.4 구현 템플릿 메서드 패턴에 대한 예제 프로그램을 구현하는 순서는 EHApp, MyApp 순으로 하겠습니다. 24.4.1 EHApp EHApp 클래스에서 사용자에 노출할 메서드는 Do 메서드 하나입니다. 그리고, Do 메서드에서 수행할 작업 절차는 초기화, 사용자와 상호 작용, 해제화를 하는 것으로 정하였습니다. public void Do(){ InitInstance(); Run(); ExitInstance();} 그리고, 초기화와 해제화의 경우는 실제 작성할 응용의 목적에 따라 재 정의를 할 수 있어야 겠지요. protected vir..

[C#] 템플릿 메서드 패턴(Template Method Pattern) -설계(Design)

24. 템플릿 메서드 패턴(Template Method Pattern) 24. 3 디자인 템플릿 메서드에 대한 설명을 위한 예제로는 프레임 워크를 기반으로 구체화 된 응용을 보여드리겠습니다. 프레임 워크에 해당하는 클래스 이름은 EHApp 라 정하였고 사용자에게 노출하는 메서드로는 Do가 있습니다. EHApp 클래스의 Do 메서드에서는 응용에서 필요한 초기화 작업을 하는 InitInstance를 수행한 후에 사용자와 상호 작용을 수행하는 Run을 수행하고 응용을 종료할 때 해야 할 해제화 작업을 하는 ExitInstance를 하도록 정의하였습니다. 물론, EHApp를 기반으로 파생한 MyApp에서는 목적에 맞게 초기화 작업과 해제화 작업에 대한 재 정의를 할 수 있어야겠죠. 그리고, Run 메서드에서는 ..

반응형