반응형
Interface Segregation Principle은 하나의 거대한 Interface 를 사용하기 보다는 여러개의 작은 Interface를 사용하는 원칙이다.
Interface Segregation Principle을 지키지 않은 코드
public interface Animal {
void eat();
void fly();
}
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("Eat Cat food");
}
@Override
public void fly() {
throw new UnsupportedOperationException("I can not fly!");
}
}
Animal은 하늘과 육지 동물들을 모두 포함하는 인터페이스이다.
그러다 보니 eat, fly 메소드가 존재한다.
하지만 fly는 육지 동물에게는 필요 없을 수 도 있다.
Animal을 구현하고 있는 Cat은 날 수 없다. 따라서 fly 메소드는 Cat에는 필요가 없다. 하지만 Animal을 구현해야하기 때문에 구현할 필요가 있다.
이는 Interface Segregation Principle이 준수되지 않은 경우 이다.
Interface Segregation Principle을 준수하는 코드
public interface Eater {
void eat();
}
public interface Flyer {
void fly();
}
public class Cat implements Eater {
@Override
public void eat() {
System.out.println("Eat Cat food");
}
}
위 예제 코드를 보면 하나의 Animal 인터페이스에서 Eater, Flyer와 같은 작은 인터페이스로 분리되어 있고, Cat은 필요한 인터페이스만 구현하고 있다.
이렇게 되면 불필요한 메소드를 구현할 필요가 없어지게 된다.
즉, 필요한 의존성만을 가지게 된다.
반응형
'공부 > SOLID' 카테고리의 다른 글
Dependency Inversion Principle(의존성 역전 원칙) (0) | 2021.09.21 |
---|---|
Liskov Substitution Principle(리스코프 치환 원칙 ) (0) | 2021.06.01 |
Open Closed Principle(개방-폐쇄 원칙) (0) | 2021.05.03 |
Single Responsibility Principle(단일 책임 원칙 ) (0) | 2021.04.29 |