Section 39.3: 기본 생성자

특정 타입이 아래와 같이 생성자 없이 정의되었다면:

public class Animal { }

컴파일러는 아래 코드에 상응하는 기본 생성자를 자동으로 만들어 주게 된다:

public class Animal { public Animal() {} }

어떠한 형식이건, 생성자가 따로 정의되는 경우 기본 생성자는 만들어지지 않을 것이다. 만약 아래와 같이 타입 정의가 이루어진 경우라면:

public class Animal { public Animal(string name) {} }

Animal 클래스는 선언된 해당 생성자를 통해서만 생성이 가능할 것이다.

// 아래 코드는 유효하다 var myAnimal = new Animal("Fluffy"); // 아래 코드는 컴파일이 되지 않는다 var unnamedAnimal = new Animal();

위의 두번째 예제에서, 컴파일러는 아래와 같은 에러 메시지를 출력해 줄 것이다:

'Animal' does not contain a constructor that takes 0 arguments

만약 특정 클래스에 파라미터가 없는 생성자와 있는 생성자 두가지를 모두 제공하고자 한다면, 두 생성자를 모두 명시적으로 구현하여야 한다.

public class Animal { public Animal() {} //기본 생성자에 상응하는 생성자 public Animal(string name) {} }

파라미터 없는 생성자를 제공하지 않는 다른 클래스를 확장 (extend) 하는 클래스의 경우, 컴파일러는 기본 생성자를 만들어 줄 수 없다. 예를 들어, 아래와 같은 Creature 클래스가 있다고 가정한다면:

public class Creature { public Creature(Genus genus) {} }

class Animal : Creature {} 와 같이 기술된 Animal 클래스는 컴파일이 되지 않을 것이다.

본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts