한 번 템플릿은 영원한 템플릿

템플릿은 타입을 감춘다

템플릿의 파라미터에 타입을 지정하여 특정 타입을 갖춘 새로운 타입의 클래스가 만들어진다.

한 번 템플릿은 영원한 템플릿

언젠가는 반드시 템플릿의 파라미터를 결정해야 한다. 하지만, 타입을 결정하기 위한 책임을 점점 뒤로 미룰 수록, 템플릿에 전달하기 위한 파라미터를 포함하기 위해 새로운 템플릿으로 코드를 구현해야 한다.
 이렇게 템플릿에 의존하고 타입이 결정되지 않은 템플릿 클래스가 점점 늘어간다. 템플릿으로 정의한 타입(클래스)가 있다면, 이 타입과 상속이나 연관 등 어떤 형태로든 관계를 맺는 클래스는 타입을 결정하기 위한 책임의 길을 걷지 않는 이상 템플릿으로 구현해야 한다.
한 번 템플릿은 영원한 템플릿이다.

템플릿은 객체 지향 프로그래밍이 아니다

템플릿의 파라미터를 결정하는 것은 템플릿으로 처리하고자 하는 타입을 결정하는 것이며, 이는 메소드나 클래스에서 어떤 타입을 처리하겠다고 명시하는 것과 같다. 객체 지향 프로그래밍에서 각각 다른 타입들의 다른 동작은 다형성으로 구현하는데, 타입을 인식하고 타입에 맞는 처리를 하는 코드는 다형성과 반대되는 개념이라고 할 수 있다. 그렇기 때문에 템플릿은 인터페이스로 노출되어서는 안된다.

템플릿이 객체 지향 프로그래밍에 맞지 않는 것은

템플릿에 의해 노출된 타입에 의존하기 때문이다. 템플릿의 타입은 클래스 내부의 멤버를 특정 타입으로 지정하기 위해서 사용하는 경우가 많다. 그런데, 이 타입이 노출될 필요가 있다는 것은 멤버가 노출되어야 한다는 것을 의미하며, 정보 은닉의 위반을 의미한다. 경우에 따라서 정보 은닉이 해제되어야 하는 경우도 있지만, 가능하면 설계를 바꿔서라도 정보는 은닉하는 것이 바람직하다.

템플릿의 타입을 고정하기 위해서는 템플릿에 의존하는 객체들은 템플릿의 인터페이스를 완전히 감출 수 있도록 새로운 인터페이스를 정의해야 함을 의미한다.

Comments are closed.

Website Built by WordPress.com.

Up ↑