인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다.
인터페이스 분리 원칙은 큰 덩어리의 인터페이스들을 구체적이고 작은 단위들로 분리시킴으로써 클라이언트들이 꼭 필요한 메서드들만 이용할 수 있게 한다.
즉 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터 페이스 하나보다 낫다 라는 뜻 입니다.
바로 예시 코드를 들어 간단하게 설명 하도록 하겠습니다.
우선 ISP를 위반한 코드를 보여드리겠습니다.
interface Car{
void rideCar();
void Accel();
void stop();
void UseElectric();
}
class K3 implements Car{
@Override
public void rideCar() {
System.out.println("K3에 탑승했습니다.");
}
@Override
public void Accel() {
System.out.println("악셀을 밟습니다.");
}
@Override
public void stop() {
System.out.println("브레이크를 밟아 멈춥니다.");
}
@Override
public void UseElectric() {
System.out.println("K3 차량은 전기를 사용할 수 없습니다");
}
}
Car 라는 인터페이스가 있고, K3는 Car인터페이스를 구현한 클래스 입니다.여기서 UseElectric 이라는 기능이 있습니다. K3는 전기차가아니라서 해당 기능을 수행할 수 없습니다.자신이 이용하지 않는 메서드를 구현하고있어 ISP를 위반을 하게 됩니다. 하나의 인터페이스의 기능이 범용성(자동차의기능 + 전기차의 기능) 을 가지게 되면 이런 문제가 발생한는 것 입니다.
해결방법은 인터페이스를 분리하는 것 입니다!
interface Car{
void rideCar();
void Accel();
void stop();
}
interface electricCar{
void UseElectric();
}
class K3 implements Car{
@Override
public void rideCar() {
System.out.println("K3에 탑승했습니다.");
}
@Override
public void Accel() {
System.out.println("악셀을 밟습니다.");
}
@Override
public void stop() {
System.out.println("브레이크를 밟아 멈춥니다.");
}
}
class Tesla implements Car, electricCar{
@Override
public void rideCar() {
System.out.println("테슬라에 탑슿했습니다.");
}
@Override
public void Accel() {
System.out.println("악셀을 밟습니다");
}
@Override
public void stop() {
System.out.println("브레이크를 밟아 멈춥니다.");
}
@Override
public void UseElectric() {
System.out.println("전기를 사용합니다.");
}
}
Car의 인터페이스는 모든 자동차가 가지는 기능만 이용하고, 전기차만이 가지는 기능은 따로 인터페이스를 만들어 아래와 같이 ISP 인터페이스 분리 원칙을 지키면서 K3 , Tesla 구현 클래스를 만들 수 있게 됩니다.
참고 - 김영한 스프링 핵심원리 기본편, 위키백과
'객체지향프로그래밍' 카테고리의 다른 글
SOLID 5원칙 - DIP 의존관계 역전 원칙(Dependency inversion principle) (0) | 2022.01.21 |
---|---|
SOLID 5원칙 - LSP 리스코프 치환 원칙(Liskov Substitution Principle) (0) | 2022.01.19 |
SOLID 5원칙 - OCP 개방 폐쇄 원칙(Open/Closed Principle) (0) | 2022.01.18 |
SOLID 5원칙 - SRP 단일 책임 원칙(Single Responsibility Principle) (2) | 2022.01.18 |
객체 지향 프로그래밍 (Object-Oriented Programming) 이란? - JAVA (0) | 2022.01.13 |