프로그래밍/DesignPattern

원칙을 지키는 데 도움이 될만한 가이드라인...

모지사바하 2007. 7. 15. 22:19
다음과 같은 가이드라인을 따르면 의존성 뒤집기 원칙에 위배되는 객체지향 디자인을 피하는 데 도움이 된다.

1. 어떤 변수에도 구상 클래스에 대한 레퍼런스를 저장하지 말자.
- new 연산자를 사용하면 구상 클래스에 대한 레퍼런스를 사용하게 되는 것이다. 팩토리를 써서 구상 클래스에 대한 레퍼런스를 변수에 저장하는 일을 미리 방지하자.

2. 구상 클래스에서 유도된 클래스를 만들지 말자
- 구상 클래스에서 유도된 클래스를 만들면 특정 구상 클래스에 의존하게 된다. 인터페이스나 추상 클래스처럼 추상화 된 것으로부터 클래스를 만들어야 한다.

3. 베이스 클래스에 이미 구현되어 있던 메소드를 오버라이드 하지 말자
- 이미 구현되어 있는 메소드를 오버라이드한다는 것은 애초부터 베이스 클래스가 제대로 추상화 된 것이 아니었다고 불 수 있다. 베이스 클래스에서 메소드를 정의할 때는 모든 서브클래스에서 공유할 수 있는 것만 정의해야 한다.





※ 이 가이드라인은 항상 지켜야 하는 규칙이 아니라, 우리가 지향해야 할 바를 밝히고 있을 뿐

이다. 엄밀하게 말하자면 자바 프로그램 가운데 이 가이드라인을 완벽하게 따르는 것은 하나도

없다. 하지만 이 가이드라인을 완전히 습득한 상태에서 디자인을 할 때 항상 이 가이드라인을

염두에 둔다면, 원칙을 지키지 못하게 되더라도 원칙을 지키지 못한다는 걸 확실히 알고 있는

상태에서 그렇게 할 테고, 불가피한 상황에서만 합리적인 이유를 바탕으로 그렇게 하게 될 것이

다. 예를 들어, 어떤 클래스가 거의 바뀌지 않을 것 같은 경우에는 그 클래스의 인스턴스를 만드

는 코드를 작성한다고 해도 그리 큰 문제가 생기지 않는다. String 객체의 인스턴스는 사실 거의
별 생각 없이 만들어서 쓴다. 엄밀하게 말하자면 이것도 원칙에 위배되는 것이지만 별 문제가

되지 않는다. String 클래스가 바뀌는 일은 거의 없을 테니까...

하지만 클래스가 바뀔 가능성이 있다면 팩토리 메소드 패턴 같은 기법을 써서 변경될 수 있는 부분을 캡슐화 해야한다.