본문 바로가기

note

객체지향설계 5대 원칙(SOLID) 중 인터페이스 분리 원칙(ISP)

인터페이스 분리 원칙 ( ISP : Interface Segregation Principle) 




인터페이스 분리의 원칙(ISP)에 대해 설명하기 전에 인터페이스가 무엇인지 간단하게 설명을 하겠습니다.



인터페이스(Interface) 란?



어떤 클래스가 있고 그 클래스가 특정한 인터페이스를 사용하여 구현된다면 그 클래스는 반드시 그 인터페이스에 포함되어 있는 메소드를 구현하도록 강제하는 것.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Interface Baby {
    public void cry();
}
 
 
class CuteBaby implements Baby {
    public void cry() {
        System.out.println("으앙");
    }
}
 
class PrettyBaby implements Baby {
    public void cry() {
        System.out.println("엉엉");
    }
}
 
cs





인터페이스 분리 원칙 ( ISP : Interface Segregation Principle)



  • 어떤 클래스를 인터페이스를 사용하여 구현할 때 사용하지 않는 메소드를 가지고 있는 인터페이스에 의존하게 하지 말아야 한다.
  • 클래스가 사용하는 기능만 제공하도록 인터페이스를 분리하는 것.
  • ‘하나의 일반적인 인터페이스보다는, 여러 개의 구체적인 인터페이스가 낫다.’



아래의 예를 보시면 Korean 클래스와 Parrot 클래스가 Animal 인터페이스로 구현되고 있습니다.
그렇지만 두 개의 클래스는 불필요한 행위를 하는 메소드를 구현해야 하는 문제가 있습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Interface Animal{
    public void walk();
    public void eat();
    public void fly();
    public void buy();
}
 
 
class Korean implements Animal{
    public void walk() {...}
    public void eat() {...}
    public void fly() {} // 필요 없음!
    public void buy() {...}
 
}
 
class Parrot implements Animal{
    public void walk() {...}    
    public void eat() {...}
    public void fly() {...}
    public void buy() {} // 필요 없음!
}
 
cs





인터페이스를 더 세분화하면 클래스에 필요한 메소드만 구현할 수 있습니다.
아래의 예제에서 Korean과 Bird는 이전 예제에서 필요하지 않았던 메소드를 구현하지 않고 필요한 메소드만 구현하고 있습니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Interface Animal{
    public void walk();
    public void eat();
}
 
Interface Person {
    public void buy();
}
 
Interface Bird {
    public void fly();
}
 
class Korean implements Animal, Person{
    public void walk() {...}
    public void eat() {...}
    public void buy() {...}
}
 
class Bird implements Animal, Bird{
    public void walk() {...}    
    public void eat() {...}
    public void fly() {...}
}
cs





이점

 

  • 클래스에 필요한 메소드만 선언할 수 있습니다.
  • 재사용성이 높아집니다.
  • 용도가 명확한 인터페이스를 제공할 수 있습니다.


'note' 카테고리의 다른 글

node.js version 관리 n 버전 변경 안되는 현상  (2) 2019.09.04
IaaS, PaaS, SaaS  (0) 2017.06.10
Cent OS 7에 MySql 설치하기  (0) 2017.04.09
AWS에 Cent OS7 셋팅하기  (0) 2017.04.09
Git Tag 사용법  (0) 2017.01.26