학습목표 : 인터페이스 분리 원칙 (Interface segregation principle)을 이해하고, 예제로 설명할 수 있다.
ISP[Interface segregation principle] 인터페이스 분리 원칙
- "클라이언트는 자신이 사용하지 않는 메서드에 의존 관계를 맺으면 안된다." - 로버트 C. 마틴
단일 책임 원칙(SRP) 와 인터페이스 분할 원칙(ISP)은 같은 문제에 대한 두가지 다른 해석
<특별한 경우가 아니면, 아래 구조에서는 SRP 원칙을 적용하는 것을 권장함>
인터페이스 최소주의 원칙 - 인터페이스를 통해 메서드를 외부에 제공할 때는 최소한의 메서드만 제공
예제) 못된 예제
package book.oopforsprings.lec05.solid;
public class ISP남자_NO {
public static void main(String[] args) {
/* 돌아는 간다 */
아들_남편 아남 = new 남자2();
아남.기념일챙기기();
아남.효도하기();
}
}
/* 아들 과 남편의 상관없는 interface 생성 */
interface 아들_남편{
void 효도하기();
void 기념일챙기기();
}
/* 아빠 와 친구의 상관없는 interface 생성 */
interface 아빠_친구{
void 용돈주기();
void 운동하기();
}
/* 의미가 명확치 않은 인터페이스 상속 */
class 남자2 implements 아들_남편, 아빠_친구{
@Override
public void 용돈주기() {
System.out.println("애들에게 용돈을");
}
@Override
public void 운동하기() {
System.out.println("친구들과 운동을");
}
@Override
public void 효도하기() {
System.out.println("엄마에게 효도를");
}
@Override
public void 기념일챙기기() {
System.out.println("아내와의 기념일 챙기기");
}
}
예제) 잘된 예제
package book.oopforsprings.lec05.solid;
public class ISP남자_OK {
public static void main(String[] args) {
I남편 i남편 = new 남자3();
i남편.기념일챙기기();
I아들 i아들 = new 남자3();
i아들.효도하기();
}
}
/* 각각의 최소단위의 인터페이스로 분리 interface 생성 */
interface I아들{ void 효도하기(); }
interface I남편{ void 기념일챙기기(); }
interface I아빠{ void 용돈주기(); }
interface I친구{ void 운동하기(); }
/* 의미가 명확치 않은 인터페이스 상속 */
class 남자3 implements I남편,I아들,I아빠,I친구{
@Override
public void 용돈주기() {
System.out.println("애들에게 용돈을");
}
@Override
public void 운동하기() {
System.out.println("친구들과 운동을");
}
@Override
public void 효도하기() {
System.out.println("엄마에게 효도를");
}
@Override
public void 기념일챙기기() {
System.out.println("아내와의 기념일 챙기기");
}
}
덧붙이는 말.
인터페이스는 각 성격에 맞게 최소단위로 분리하는게 원칙이다.
이는 또한 SRP(Single responsibility principle, 단일책임원칙) 원칙을 위배하지 않게 된다.
참고도서 : 스프링 입문을 위한 자바 객체 지향의 원리와 이해 (위키북스)
'객체지향 (OOP) > 객체 지향 설계 5원칙' 카테고리의 다른 글
[DIP] 객체지향 설계 5 원칙 (5) (0) | 2021.05.22 |
---|---|
[LSP] 객체지향 설계 5 원칙 (3) (0) | 2021.05.15 |
[OCP] 객체지향 설계 5 원칙 (2) (0) | 2021.05.14 |
[SRP] 객체지향 설계 5 원칙 (1) (0) | 2021.05.13 |
객체지향 설계 5원칙 (0) | 2021.05.13 |