2009년 1월 8일 목요일

객체의 생성


객체의 설계도인 클래스를 작성하면, 실제로 클래스의 실현(instantiation)인 객체를 생성할 수 있습니다.

데이터형은 모두 객체라고 했습니다. 이를 다시 말하면 객체도 하나의 데이터형인 것입니다. 닷넷 프레임워크에서 제공하는 내장형과 enum, struct와 같이 메모리의 스택 영역을 사용하는 데이터형을 값형(Value Type)이라고 했습니다.

그리고 데이터형 중 참조형(Reference Type)에서 변수는 스택 영역에 저장되지만 실제 객체는 힙(Heap) 메모리 영역에 저장된다고 했습니다. 그리고 변수에는 단지 힙  메모리 영역에서 객체의 위치 정보만을 저장하게 됩니다. 클래스의 실현인 객체도 힙 메모리 영역을 사용합니다. 그리고 객체에 대한 변수도 단지 힙 영역의 객체 위치 정보만을 저장합니다. 따라서 객체도 하나의 참조형 데이터인 것입니다.

참조형 데이터인 객체를 실제 코드에서 사용하려면 힙 영역 메모리에 적재해서 사용해야 할 것입니다. 메모리에 객체를 만들어 적재하는 것을 객체의 생성이라고 표현할 수 있습니다. 객체의 생성은 생성자(Constructor)가 담당하게 됩니다.

 

 객체의 생성

 

    class Date
    {
        private int yy;
        private int mm;
        private int dd;

        public Date()
        {
            this.yy = 2008;
            this.mm = 3;
            this.dd = 14;
        }

        public Date(int yy, int mm, int dd)
        {
            this.yy = yy;
            this.mm = mm;
            this.dd = dd;
        }

        public void GetDate()
        {
            Console.WriteLine("{0}년 {1}월 {2}일", yy, mm, dd);
        }

        public void SetDate(int year, int month, int day)
        {
            yy = year;
            mm = month;
            dd = day;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Date today1 = new Date();
            today1.GetDate();

            Date today2 = new Date(2008, 03, 07);
            today2.GetDate();
        }
    }

  • 메모리 할당 : 키워드 new를 사용해서 힙 영역의 메모리를 할당한다.
  • 생성자에 의한 객체의 값 초기화 : 생성자에 의해 객체의 값을 초기화한다.

 

 생성자

생성자는 클래스의 이름과 같으며, 형태는 메소드와 비슷하고 객체의 값을 초기화 시켜준다.

생성자의 특징을 정리하면 다음과 같습니다.

  • 클래스명과 생성자명이 같다.
  • 반환 값이 없다. 그렇지만 void를 의미하진 않는다.
  • 기본 생성자의 접근 권한은 public이다.
  • 기본 생성자의 경우 인자를 포함하지 않는다.
  • 기본 생성자에 의해 객체의 모든 멤버들이 초기화된다.
    숫자형 멤버는 0, 불리언형 멤버는 false,  참조형 변수는 null로 초기화 된다.

 

            Date today1 = new Date();    <-- 객채의 값이 0으로 초기화

            Date today2 = new Date(2008, 03, 07);   <--객체의 값이 2008,03,07로 초기화

            class da

            class Date()

            {

                public Date()
                {
                    this.yy = 2008;                  <--위의 예제에서 이와 같이 클래스 내에 생성자를 구현할 수도 있다.
                    this.mm = 3;
                    this.dd = 14;
                }

              }



[출처]
객체의 생성|작성자 웃진

댓글 없음:

댓글 쓰기