방프리

20.05.10 Chapter2. .Net 리소스 관리 (Item 14) 본문

C#/Effective C#

20.05.10 Chapter2. .Net 리소스 관리 (Item 14)

방프리 2020. 5. 10. 18:27

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

 

C++ 개발자들은 여러 생성자 구문이 있다면 공통적인 부분을 private 헬퍼를 만든 후 사용한다. 

하지만 저자는 이 방법은 C#에서는 그다지 좋은 방법이 아니라고 한다.

위와 같이 헬퍼 메서드를 작성하는 것보다는 공용으로 사용할 수 있는 생성자를 만드는 것을 더 권장했다.

아마 컴파일러의 인식의 차이점 때문에 그런 듯 싶다.

C# 4.0에서 추가된 기본 매개 변수 기능을 활용하면 위의 코드를 다음과 같이 더 줄일 수 있다.

여러 개의 생성자를 생성하는 것보단 기본으로 주는 생성자 하나를 구현하는 방식이 훨씬 더 좋다.

하지만 이에 따른 트레이드 오프는 항상 고려해보아야 한다.

다음과 같이 구조를 고려해 볼 수 있으나 이 코드의 경우엔 내부적으로 많은 중복 코드를 발생시킨다.

첫 번째로 모든 변수의 초기화 구문이 실행된 후 베이스 클래스 생성자가 호출되고, 이후 commonConstructor

함수가 실행이 된다.

또한 생성자 구문에서는 readonly 객체 또한 생성자에서 초기화가 가능하다.

다음의 순서는 특정 타입으로 첫 번째 인스턴스를 생성할 때 수행되는 과정이다.

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

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

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

4. 정적 생성자 수행

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

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

7. 적절한 베이스 클래스의 인스턴스 생성자 수행

8. 인스턴스 생성자 수행

위의 개념을 잘 숙지하고 되도록이면 생성자 초기화 구문을 잘 활용하는 것이 좋다.

Comments