언어 자료구조 알고리즘/C# 언어 문법

11.Class

언제나휴일 2009. 8. 19. 05:47
반응형

Class

 

다루는 내용

 - 클래스와 구조체

 - 캡슐화 할 수 있는 멤버

 

구조체와 클래스는 하나의 논리 단위에 속하는 일련의 데이터와 동작을 캡슐화 하는 형식이다.

데이터는 멤버 속성으로 표현이 되고 동작은 멤버 메소드 및 이벤트 등으로 표현을 할 수가 있다.

구조체의 경우는 이전 항목에서 설명한 바와 같이 스택에 인라인으로 할당되며 값 형식으로 선언된 범위를 지나게 되면 스택과 함께 소멸이 된다.  이에 MSDN에서는 생성 후 수정하지 않을 데이터를 주로 표현하는 작은 데이터 구조에 사용할 것을 권하고 있다.

이에 비해 클래스는 참조 형식으로 관리화 힙에 할당이 되어 참조되는 범위가 벗어날 때까지 메모리에 유지되는 것을 보장받으며 모든 참조가 범위를 벗어나면 CLR에 의해 가비지 수집 대상으로 표시된다.

 

Look & Feel & Think   

다음의 예를 보고 value형식과 reference형식의 차이를 살펴보자.

DemoClass와 DemoStruct에는 int형의 멤버 속성인 A를 갖고 있다.

 

 

이를 테스트하는 About클래스의 멤버 메소드 TestStruc와 TestClass를 보면 생성한 것이 DemoStruct와 DemoClass라는 것 말고는 차이가 없다.

 

이를 실제 호출하였을 때의 결과를 보면 차이가 발생함을 느낄 수 있을 것이다.

 

구조체와 같은 값 형식의 경우 값의 복사에 의해 대입 연산이 이루어지게 되어 완전히 다른 독립적으로 동작을 하게 되어 한 쪽을 변경을 하게 되었을 때 다른 나머지에 영향을 미치지 않는다.  실제 별도로 할당되어 있기 때문이다.

 

class와 같은 참조 형식의 경우는 참조에 의해 대입 연산이 이루어지게 되어 명칭만 다를 뿐 실제 하나의 인스턴스(개체)를 가르키고 있어 한 쪽에서 변경을 하면 이를 참조하는 모든 곳에서 바뀌게 된다.  실제 할당된 인스턴스는 하나이기 때문이다.

 

클래스와 구조체는 차이점은 단순히 값 형식이냐 참조 형식이냐의 차이뿐만이 아니다.  오히려 캡슐화를 통해 멤버들을 하나의 논리로 포함하는 공통점을 빼면 공통점을 찾기 힘들다고 보는 것이 많는 표현이 될 것이다.

 

캡슐화 과정 속에서도 클래스의 가장 큰 특징중에 하나는 상속(본인의 생각으로는 파생이라는 용어가 더 정확하다 생각하지만 MSDN에서 표현을 그대로 인용하기로 한다.)은 구조체와 차이를 보이고 있고 이로 인해 다형성이 발생하며 이 또한 구조체에서는 찾아 볼 수가 없다.

이들은 OOP의 3기둥으로 중요한 요소로 자리잡고 있으며 별도의 항목에서 다루도록 하겠다.

 

캡슐화 할 수 있는 멤버로는 다음과 같이 다양한 종류를 포함할 수 있다.

필드 내부에 선언되는 임의 형식의 변수
상수 const 한정사를 사용하며 컴파일 시에 인식되어 묵시적으로 클래스의 멤버이다. 
속성 전용 필드 값을 읽고 쓰고 계산하기 위한 매커니즘을 제공하는 멤버로 실제로는 접근자라는 특별한 메소드이다. 
메소드 일련의 수행 구문을 포함하는 코드 블록으로 C언의 함수와 매핑해서 생각할 수 있다.
생성자 클래스 혹은 구조체 명과 동일한 이름의 특수 메소드로 멤버 필드의 기본값을 설정하기 용이하게 사용될 수 있으며 경우에 따라서는 액세스 한정자를 private하게 함으로써 인스턴스화를 제한 할 수도 있다. 
소멸자 인스턴스의 소멸하는 과정에 사용되는 특수한 메소드이다.  구조체에는 정의할 수 없으며 하나의 소멸자만을 가질수 있고 C#사용자에 의해 호출할 수 없으며 한정자나 매개변수를 갖지 않는다. 
이벤트 인스턴스에서 특정 상황이 발생할 때 다른 클래스나 인스턴스에게 알려주기 위해 사용하며 이벤트를 발생시키는 클래스를 게시자라하며 이를 받아 처리하는 클래스를 구독자라 한다. 
인덱서 배열과 마찬가지로 인덱싱 할 수 있도록 하는 멤버로써 매개변수가 있다는 부분을 제외하면 속성과 비슷한 특징을 갖는다. 
연산자 수행 구문을 구성하는 가장 기본적인 요소로 +,-,*,/와 같은 키워드를 사용한다.   
중첩형식 클래스나 구조체 내에서 선언된 형식을 얘기한다.

참고로 Escort CSharp(C#)은 거의 모든 자료를 MSDN을 기반으로 작성한 것이며 MSDN보다 뛰어날 수가 없다.

반응형

'언어 자료구조 알고리즘 > C# 언어 문법' 카테고리의 다른 글

16. 다형성  (0) 2009.08.19
15. 상속  (0) 2009.08.19
14.정적 클래스 및 정적 멤버  (0) 2009.08.19
13.메소드  (0) 2009.08.19
12. 속성(Property)  (0) 2009.08.19
11.Class  (0) 2009.08.19
10.Casting  (0) 2009.08.19
9.String  (0) 2009.08.19
8. Object  (0) 2009.08.19
7. 배열  (0) 2009.08.19
6. valuetype 기본 형식  (0) 2009.08.19