인터페이스 분리 원칙 ( 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 |