본문

[2017.09.06] 03-4. OOP의 5대원칙 - ISP

4. ISP - Interface Segregation Principle


(출처 - https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)#cite_note-martin-design-principles-8)

특화된 여러 개의 인터페이스가 하나의 범용 인터페이스보다 낫다. (유연하다.)


실습

ISP 원칙 적용 전

ISP 원칙 적용 후 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
interface IBird {
    public void fly();
    public void eat();
    public void chirp();
}
 
class Penguin implements IBird {
    @Override
    public void fly() {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void eat() {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void chirp() {
        // TODO Auto-generated method stub
    }
}
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
interface Flyable {
    public void fly();
}
 
interface Eatable {
    public void eat();
}
 
interface Chirpable {
    public void chirp();
}
 
interface Swimable {
    public void swim();
 
class Penguin implements Eatable, Chirpable, Swimable {
    @Override
    public void swim() {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void chirp() {
        // TODO Auto-generated method stub
    }
 
    @Override
    public void eat() {
        // TODO Auto-generated method stub
    }
}
cs

예제처럼 범용적인 IBird이라는 인터페이스를 Penguin에서 구현하면 fly(), eat(), chirp() 메소드를 모두 구현해야 한다. 

그러나 범용적인 IBird 인터페이스 구현으로 Penguin의 날지 못하고 수영할 수 있는 특성을 표현 할 수 없다.

그래서 특화된 3개의 인터페이스(Flyable, Eatable, Chirpable)로 분리하면 원하는 인터페이스를 유연하게 구현 할 수 있다.


장점

a. 확장, 유지보수에 유연하게 대처할 수 있다.



#ISP #SOLID #JAVA SOLID #JAVA OOP

공유

댓글