[자바 객체 지향] 객체 지향 설계 5원칙 : ISP, DIP

2021. 8. 9. 21:20CSE/JAVA

1. ISP - 인터페이스 분리 원칙

=> 다음과 같이 인터페이스로 역할에 따라 인터페이스로 나누는 것

 

- SRP와 ISP는 같은 문제에 대한 두 가지 다른 해결책이다.

=> 하지만 특별한 경우가 아니라면 단일 책임 원칙을 적용하는 것이 더 좋은 해결책이다.

- 인터페이스 최소주의 원칙 : 인터페이스를 통해 메서드를 외부에 제공할 때는 최소한의 메서드만 제공하라는 것

=> 상속의 혜택을 제대로 누리기 위해, 상위 클래스는 풍성할수록 좋고, 인터페이스는 작을수록 좋다.

 

2. DIP - 의존 역전 원칙

- 위와 같이 자동차와 스노우타이어 사이에 의존관계가 있다고 하자.

=> 하지만 자동차의 수명이 스노우타이어의 수명보다 길고, 이 경우, 자동차의 타이어를 일반 타이어로 교체할 때, 문제가 생긴다.

=> 따라서 다음과 같이 자동차가 타이어 인터페이스에만 의존하게 함으로써 타이어 변경에 영향을 받지 않도록 할 수 있다.

- 원래는 스노우타이어가 그 무엇에도 의존하지 않는 클래스였는데, 타이어 인터페이스에 의존하게 됐다

=> 의존 방향의 역전

- 상위 클래스일수록, 인터페이스일수록, 추상클래스일수록 변하지 않을 가능성이 높다

- 의존 역전 원칙 : 자신보다 변하기 쉬운 것에 의존하던 것을 추상화된 인터페이스나 상위 클래스를 두어, 변하기 쉬운 것의 변화에 영향받지 않게 하는 것

 

3. SoC

- SoC (Separation Of Concerns) : 관심사의 분리, 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모으고, 관심이 다른 것은 가능한 한 따로 떨어져 서로 영향을 주지 않도록 분리하라는 것

- SoC를 적용하면 자연스럽게 SOLID에 도달하게 된다.

 

- SOLID 원칙을 적용하면 소스 파일의 개수가 많아지는 경향이 있다.

=> 하지만 논리를 더욱 잘 분할하고, 잘 표현하기에 이해하기 쉽고, 개발하기 쉬우며, 유지와 관리, 보수하기 쉬운 소스가 만들어진다.