비고
이 콘텐츠는 프레임워크 디자인 지침: 재사용 가능한 .NET 라이브러리에 대한 규칙, 관용구 및 패턴, 2판에서 Pearson Education, Inc.의 권한으로 다시 인쇄됩니다. 이 버전은 2008년에 출판되었으며, 이후 세 번째 에디션에서 완전히 수정되었습니다. 이 페이지의 일부 정보는 오래된 것일 수 있습니다.
형식 생성자와 인스턴스 생성자라는 두 가지 종류의 생성자가 있습니다.
형식 생성자는 정적이며 형식이 사용되기 전에 CLR에서 실행됩니다. 인스턴스 생성자는 형식의 인스턴스를 만들 때 실행됩니다.
형식 생성자는 매개 변수를 사용할 수 없습니다. 인스턴스 생성자는 할 수 있습니다. 매개 변수를 사용하지 않는 인스턴스 생성자를 매개 변수 없는 생성자라고도 합니다.
생성자는 형식의 인스턴스를 만드는 가장 자연스러운 방법입니다. 대부분의 개발자는 인스턴스를 만드는 다른 방법(예: 팩터리 메서드)을 고려하기 전에 생성자를 검색하고 사용하려고 합니다.
✔️ 간단하고 이상적인 기본 생성자를 제공하는 것이 좋습니다.
단순 생성자에는 매우 적은 수의 매개 변수가 있으며 모든 매개 변수는 기본 형식 또는 열거형입니다. 이러한 간단한 생성자는 프레임워크의 유용성을 높입니다.
✔️ 원하는 작업의 의미 체계가 새 인스턴스의 생성에 직접 매핑되지 않거나, 생성자 디자인 지침을 따르는 것이 부자연스럽게 느껴진다면 생성자 대신 정적 팩터리 메서드를 사용하는 것을 고려하세요.
✔️ 기본 속성을 설정하기 위한 바로 가기로 생성자 매개 변수를 사용합니다.
빈 생성자 사용과 일부 속성 집합, 여러 인수가 있는 생성자 사용 간에 의미 체계에 차이가 없어야 합니다.
✔️ 생성자 매개 변수를 사용하여 속성을 설정하는 경우 생성자 매개 변수와 속성에 동일한 이름을 사용합니다.
이러한 매개 변수와 속성 간의 유일한 차이점은 대/소문자여야 합니다.
✔️ 생성자에서 최소한의 작업을 수행합니다.
생성자는 생성자 매개 변수를 캡처하는 것 외에는 많은 작업을 수행해서는 안 됩니다. 다른 처리 비용은 필요할 때까지 지연되어야 합니다.
✔️ 적절한 경우 인스턴스 생성자에서 예외를 throw합니다.
✔️ 이러한 생성자가 필요한 경우 클래스에서 공용 매개 변수가 없는 생성자를 명시적으로 선언합니다.
형식에서 생성자를 명시적으로 선언하지 않으면 많은 언어(예: C#)가 자동으로 공용 매개 변수 없는 생성자를 추가합니다. 추상 클래스는 보호된 생성자를 가져옵니다.
매개 변수가 있는 생성자를 클래스에 추가하면 컴파일러에서 매개 변수가 없는 생성자를 추가할 수 없습니다. 이로 인해 실수로 호환성이 손상되는 변경이 발생하는 경우가 많습니다.
❌ 구조체에서 매개 변수가 없는 생성자를 명시적으로 정의하지 마십시오.
이렇게 하면 매개 변수가 없는 생성자가 정의되지 않은 경우 배열의 모든 슬롯에서 실행할 필요가 없으므로 배열을 더 빠르게 만들 수 있습니다. C#을 비롯한 많은 컴파일러에서는 이러한 이유로 구조체에 매개 변수가 없는 생성자가 있는 것을 허용하지 않습니다.
❌ 생성자 내의 개체에서 가상 멤버를 호출하지 않습니다.
가상 멤버를 호출하면 가장 파생된 형식의 생성자가 아직 완전히 실행되지 않은 경우에도 가장 많이 파생된 재정의가 호출됩니다.
형식 생성자 지침
✔️ 정적 생성자를 비공개로 만듭니다.
클래스 생성자라고도 하는 정적 생성자는 형식을 초기화하는 데 사용됩니다. CLR은 형식의 첫 번째 인스턴스가 생성되거나 해당 형식의 정적 멤버가 호출되기 전에 정적 생성자를 호출합니다. 사용자는 정적 생성자가 호출되는 시기를 제어할 수 없습니다. 정적 생성자가 프라이빗이 아닌 경우 CLR 이외의 코드에서 호출할 수 있습니다. 생성자에서 수행된 작업에 따라 예기치 않은 동작이 발생할 수 있습니다. C# 컴파일러는 정적 생성자를 프라이빗으로 강제 적용합니다.
❌ 정적 생성자에서 예외를 throw하지 마세요.
형식 생성자에서 예외가 throw되면 현재 애플리케이션 도메인에서 형식을 사용할 수 없습니다.
✔️ 런타임은 명시적으로 정의된 정적 생성자가 없는 형식의 성능을 최적화할 수 있으므로 정적 생성자를 명시적으로 사용하지 않고 인라인으로 정적 필드를 초기화하는 것이 좋습니다.
Microsoft Corporation의 일부 저작권 2005, 2009. 모든 권리 보유.
프레임워크 디자인 지침에서 Pearson Education, Inc.의 권한으로 재인쇄 : 재사용 가능한 .NET 라이브러리에 대한 규칙, 관용구 및 패턴, Krzysztof Cwalina 및 Brad Abrams의 제2판, Microsoft Windows 개발 시리즈의 일환으로 Addison-Wesley Professional이 2008년 10월 22일 출판했습니다.