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/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
39.5: 생성자에서 다른 생성자 호출하기 (0) | 2022.03.14 |
---|---|
39.4: Static 생성자 강제 호출하기 (0) | 2022.02.23 |
39.2: 싱글톤 생성자 패턴 (0) | 2022.02.21 |
39.1: Static 생성자 (0) | 2022.02.10 |
39: 생성자와 종료자 (Finalizer) (0) | 2022.02.09 |