초기화 코드가 중복되는 것을 최소화하라

 

생성자를 작성하다보면 우리는 다양한 방법을 생각한다.

1. 매개 변수가 없는 생성자

2. 매개 변수가 있는 생성자

3. 오버로딩한 생성자들

4. 매개 변수가 기본값을 가지는 생성자

5. Client가 호출 불가능한 생성자(Singleton pattern)

 

오늘은 이 중 3, 4항목을 다루겠다.

 

3. 오버로딩한 생성자들

장점

a. 코드의 결합도가 낮다.

b. 코드 변경시 Client의 코드 수정을 덜 신경써도 된다.

단점

a. 코드량이 늘어 나고 4번 항목에 비해 제공하는 옵션이 상대적으로 적다.

public class MyClass
{
	private List<int> datas;
    
	private string name;
    
	public MyClass() : 
		this(0,"")
	{
    
	}
    
	public MyClass(int Length) :
		this(Length, "")
	{
	}
    
	public MyClass(int Length, string name)
	{
		datas = new List<int>(Length);
		this.name = name;
	}    
}

 

4. 매개 변수가 기본값을 가지는 생성자

장점

a. 상대적으로 적은 코드량으로 Client에게 더 많은 옵션을 제공한다.

b. 모든 매개변수에 대해서 기본값을 지정 시(제네릭 클래스 제외) new 예약어를 사용할 수 있다.

단점

a. 모든 매개변수에 대해서 기본값을 지정해도 제네식 클래스는 매개변수가 없는 생성자가 필요하다.

b. 같은 옵션영역에서의 생성자들의 코드 결합도가 높아진다.

 

public Class MyClass
{
	private List<int> datas;  
	private string name;
    
	public MyClass() :
		this(0,string.Empty)
	{
	}
    
	public MyClass(int initNumber = 0, string name = "")
	{
		datas = new List<int>();
		this.name = name;
	}
}

 

어떤 방법으로 생성자를 작성할지는 개발자의 자유이다.

유의할점이 있다면 생성자는 합리적인 매개변수를 받아야 하고 예외를 유발해서는 안 된다.

 

마치며 생성자의 호출 순서를 정리하고 끝내겠다.

1. 정적 변수의 저장 공간을 0으로 초기화

2. 정적 변수에 대한 초기화 구문 수행

3. 베이스 클래스의 정적 생성자 수행

4. 정적 생성자 수행

5. 인스턴스 변수의 저장 공간을 0으로 초기화

6. 인스턴스 변수에 대한 초기화 구문 수행

7. 베이스 클래스 생성자 수행

8. 인스턴스 생성자 수행

 

한번 생성이 완료된 시점 부터는 5번 부터 시행 된다. 

 

'Program > Effective C#' 카테고리의 다른 글

Effective C# ITEM16  (0) 2020.11.05
Effective C# ITEM15  (0) 2020.11.03
Effective C# ITEM13  (0) 2020.10.28
Effective C# ITEM 12  (0) 2020.10.26
Effective C# ITEM11  (0) 2020.10.25

+ Recent posts