2019. 2. 5. 13:59


c#은 객체의 생성과 소멸 과정에 자동으로 호출되는 두 매커니즘이 있습니다.
바로 생성자, 소멸자 입니다.
닷넷은 소멸자의 역할을 프로그래머가 딱히 해줄필요가 없으므로, c/c++과 같이 메모리 반납을
명시적으로 해줄 필요가 없습니다. 참 편리한 닷넷이네요.


1. 생성자
  - 객체가 생성이 될때 자동으로 호출되는 메서드 입니다.
  - 일반적으로 객체의 초기화 작업시 많이 이용합니다.

class A{

   public A(){

       Console.WriteLine("생성자 호출");

   }

}
  
이렇게 정의가 되어 있다면 Main() 메소드에서
A a = new A();
이렇게 하면 객체가 생성되면서 생성자가 호출됩니다.


물론 호출과 정의시 규칙이 있습니다.
  ㄱ. 생성자는 클래스 이름과 반드시 동일해야합니다.
      - 이것은 두말나위 없습니다.(클래스이름을 그대로 적으셔야 합니다)

  ㄴ. 생성자는 반환타입이 없어야 합니다.
      - 메서드의 일종이라고 해도, return 타입을 가져서는 안됩니다.

  ㄷ. 생성자는 여러개의 매개변수를 가질수 있고, 
      일반적인 메서드 오버로딩이 가능합니다.
     - 여러개의 매개변수를 가지며, 다양한 생성자를 여러개 만들수 있습니다.
       >> public A(int a, string str){}  A(int a, int b){} 이런식으로도 가능합니다.

  ㄹ. 생성자를 정의하지 않으면 디폴트(기본) 생성자가 자동으로 만들어진다.
    - 매개변수를 가지지 않는 A(){} 라는 생성자가 자동으로 만들어집니다.

  ㅁ. 생성자는 상속되지 않는다.
    - 메서드나, 필드는 상속되지만 생성자는 자식클래스에 상속되지 않습니다.


2. 생성자 오버로딩
  - 생성자도 일종의 메서드에 속합니다. 그러므로 오버로딩 규칙이 적용됩니다.
  - 오버로딩이란 용어를 잘 모르셔도 그냥 보시면 이해가 될것입니다.

class A{

   public A(){          

        Console.WriteLine("기본생성자");                  // 1번 생성자

   }

   public A(int i){

       Console.WriteLine("int 매개변수 생성자");          // 2번 생성자

   }

   public A(string s){

       Console.WriteLine("string 매개변수 생성자");       // 3번 생성자

   }      

}


자 생성자가 총 3개이군요

A a = new A();           // 실인수가 없으므로 오버로딩 규칙으로 1번 생성자로!!
A b = new A(3);          // 실인수가 int형인 3인 정수형이므로 2번 생성자로
A c = new A("hello");  //실인수가 string type 이므로 3번 생성자로!!


3. 상속과 생성자
  - 생성자는 상속되지 않습니다.
  - 그러므로 당연히 생성자에 키워드에 virtual, override, sealed 는 사용불가입니다.


위 그림은 닷넷 상속구조입니다. 제일 중요한 Object 클래스 부터 상속되어집니다.

베이스 키워드를 사용하면 자식 객체의 생성자에서 부모 객체의 생성자를 명시적으로
호출할수는 있습니다. 

class Child : Parent{

   public Child() : base(1){

       Console.WriteLine("자식생성자");

   }

}

위와 같이 자식 객체 생성자에서 부모 객체 특정 생성자를 명시적으로 호출합니다.


'프로그래밍 > C#' 카테고리의 다른 글

C#-11. 객체지향에서 용어정리  (0) 2019.02.09
C#-10. 클래스의 정적멤버  (0) 2019.02.06
C#-8. C# 응용프로그램의 기본구조  (0) 2019.02.03
C#-7. 객체지향과 클래스  (0) 2019.01.31
C#-6. 데이타 타입  (0) 2019.01.29
Posted by 토실토실천재