2008. 11. 7. 15:35

클래스 기초 & 속성

성 = 영어로는 Property 라고 하지요~~
속성은 다음과 같은 문법(구문)을 가지고 있어요. 바로 볼까요?

class 클래스 {
       int 속성명 {

            set {
                  //속성 설정 구현 코드
            }
      get {
               //속성값 반환 구현 코드
      }
   }

}

 필드와 달리 . 속성은 get/set 접근자(accessor)를 통해 필드 멤버에 접근하게 함으로써 클래스 내부의 데이터를 보호할 수 있게 합다.
get 접근자는 속성 멤버의 데이터 타입을 반환하는 메서드와 동일하며, set 접근자는 void를 반환하는 method와 동일하다고 생각하면 됩니다.
다만, set 접근자에선 value라고 하는 특수한 인수가 사용되며, value 인수는 속성멤버의 데이터 타입과 동일한 데이터 타입을 가집니다.-- 이건 어찌보면 당연한 말인데요라고 생각하실거에요.
value 인수에는 속성 멤버에 저장된 값이 인수로 전달됩니다.
get 접근자는 속성 멤버의 값을 읽을 때 호출되며, set 접근자는 속성 멤버에 값을 저장할 때 호출됩니다.

만약 여러분이 읽기 전용 속성을 구현하고 싶다면 : set 접근자를 과감히생략하면 되겠지요~
글고 쓰기 전용 속성을 구현하고 싶다면  : get 접근자를 과감히생략하면 되겠지요. 

class Album {
// 생략 .....
// 속성 멤버
int Classification {
    get {

        return classification;

    }  

    set {

        if (value >= CLASSIC && value <= FOREIGN)

            classification = value;

       }

    }

}

new 연산자와 생성자....
클래스의 인스턴스(instance) 즉, 객체는 new 연산자를 사용하여 생성합니다.
이때 생성된 인스턴스는 힙(heap)메모리에 저장됩니다.
클래스의 인스턴스를 생성하는 구문은 다음과 같습니다.

클래스명 인스턴스명 = new 클래스명(인수);

예---> Album album = new Album(); 

***  주 목 ***
new 연산자가 호출되어 클래스의 인스턴스가 생성될 때 해당 클래스의 생성자가 호출~~됩니다.  이거 앞에서 나온 내용같지 않나요?
생성자는 클래스명과 같은 이름의 반환값이 없는 특수한 메서드로, 말그대로 클래스의 인스턴스가 생성될 때 자동적으로 호출되며 주로 멤버 필드를 초기화 하는 역활을 담당합니다.
생성자는 다음과 같은 구문을 갖습니다.

class 클래스명 {

    클래스명(인수) {

    }

}

생성자를 추가할 수 있습니다.
여기서 메서드 오버로딩 이라는 개념도 나오니깐... 잘 봐두세요
반드시 인수가 없는 생성자만 있는것은 아닙니다. 인수가 있는 생성자가 있을수도 있지 않겠어요
또한 여러개의 생성자를 정의할 수도 있습니다.

인수가 다른 여러 메서드 멤버를 정의하는 것을 method overloading 이라고 합니다. 메서드 오버로딩 

 class Album {       
    Album() {                // 인수가 없는 생성자
        count = 1;
        names =  new string[count];
    }
    Album(int count) {        // 인수가 하나의 생성자 
        this.count = count;
        names = new string[count];
    }

생성자가 여러 개인 경우에는 new 연산자 다음의 클래스명 괄호 안의 인수의 갯수와 데이터 타입이 동일한 생성자가 호출됩니다. 따라서       
Album  album = new Album(10);                 // Album(int count) 생성자 호출


<<출처>> 데브피아

'C# .NET' 카테고리의 다른 글

메모리 관리와 동적 할당.. C  (0) 2008.11.13
메모리(힙과 스텍, 데이터영역)의 이해  (0) 2008.11.13
클래스 기초 & 메서드  (0) 2008.11.07
클래스 기초 & 필드  (0) 2008.11.07
클래스 기초 & 열거형  (0) 2008.11.07