방프리

21.02.07 Chapter3. 제네릭 활용 (Item 21) 본문

C#/Effective C#

21.02.07 Chapter3. 제네릭 활용 (Item 21)

방프리 2021. 2. 7. 22:54

Item 21 : 타입 매개변수가 IDisposable을 구현한 경우를 대비하여 제네릭 클래스를 작성하라 

 

제약조건은 두 가지 역할을 한다.

(1) 런타임 오류가 발생할 가능성이 있는 부분을 컴파일 타임 오류로 대체

(2) 타입 매개변수로 사용할 수 있는 타입을 명확히 규정하여 사용자에게 도움

하지만 타입 매개변수로 지정된 타입이 제약 조건을 통해 요구하는 작업 외에 다른 작업을 추가로 수행할 수 있는지에 대해서는 신경쓰지 않는다.

하단의 코드는 제네릭 메서드 내에서 타입 매개변수로 주어지는 타입을 이용해 인스턴스를 생성할 때의 처리다.

using 구문을 통해 해당 타입에 IDisposable이 구현되어 있는지 확인 후 해당 함수를 실행시키는 것이다.

(쉽게 생각해서 null 체크를 한 것이다.)

 

함수가 아닌 해당 제네릭 타입으로 클래스 멤버변수를 생성한다면, 다음과 같이 작성할 수 있다.

참고로 sealed를 선언하면 표준 Dispose 패턴을 모두 구현할 필요가 없어진다. 하지만, 파생 클래스를 생성할 수 없으니

유의해서 사용해야 한다.

한마디로 정리하자면, Dispose 함수 사용 시에 해당 내용이 있는지 없는지 체크 (NULL 체크!!!) 후 사용하자

Comments