가장 유능한 사람은 가장 배움에 힘쓰는 사람이다. -괴테
인터페이스 분리의 원칙 : ISP : Interface Segregation Principle
1.요점
-한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다.
(자신이 사용하지 않는 기능에 영향을 받지 말아야 한다는 의미)
-다시말해, SRP(클래스의 단일 책임)처럼, ISP(인터페이스의 단일 책임)을 말한다.
-무슨말인지……? 간단하게 말해서 클래스와 연관없는 메서드를 구현하지 말라는 뜻
예시1) 잘못된 인터페이스 설계
1)예시를 위해 게시판 인터페이스를 만들어보겠습니다
interface 게시판{
쓰기메서드();
삭제메서드();
수정메서드();
}
2) 게시판 인터페이스를 임플리먼츠한 공지사항 클래스를 만들어보았습니다.. 여기는 문제가없어 보입니다?
//공지사항을 관리하는 게시판입니다
Class 공지사항 implements 게시판{
쓰기메서드(){
//do..write notice
}
삭제메서드(){
//do..delete noitce
}
수정메서드(){
//do..edit noitce
}
}
3)또 다른 게시판을 만들어볼까요? 이번에는 사용자가 문의를 할 수 있는 게시판입니다.
//문의한 내용을 관리하는 게시판. 이 게시판에 삭제 기능을 빼달라는 요청이 있다면?
Class 문의사항 implements 게시판{
쓰기메서드(){
//do..write notice
}
삭제메서드(){
//???
}
수정메서드(){
//do..edit noitce
}
}
-음..? 문의사항은 게시판인터페이스의 삭제메서드를 쓰지 않는군요? 이것이 위에서 말한 클래스(클라이언트)에서 사용하지 않는 메서드를 구현하지말라는 내용을 어긴 예시입니다.
-그럼 어떻게 해야될까요?? ISP의 원칙에 따라 인터페이스를 분리시키겠습니다.
1) 인터페이스 분리
Public interface bord_write{
쓰기메서드();
}
Public interface bord_delete{
삭제메서드();
}
Public interface bord_edit{
수정메서드();
}
2) 공지사항클래스는 쓰기,삭제,수정 임플리먼츠
Class 공지사항 implements bord_write, bord_delete, bord_edit {
}
3) 문의사항 클래스는 쓰기,수정 임플리먼츠
Class 문의사항 implements bord_write, bord_edit {
}
이렇게 적용하게되면, 각각의 클래스들은, 필요한 인터페이스만 사용하면 되는 것!
쉽게 말해서 인터페이스를 각각의 기능으로(단일책임) 나누어서 필요한 기능만 임플리먼츠하는 것.
하지만 말처럼 쉽지않다는 점…인터페이스를 너무 작게 나누다보면, 인터페이스 자체가 너무 많아질 수 도 있기때문
그래서 인터페이스를 잘 설계하는 것이 중요한데, 항상 인터페이스를 설계할 때 위 부분을 염두하면서 많은 시간을 가지고 설계하여 경험을 쌓는게 중요한 것 같습니다.
'프로그래밍 > 개발새발' 카테고리의 다른 글
awstate 설치(자세히/오류해결포함) 및 권한설정-아파치 로그 웹통계 툴 (0) | 2019.09.25 |
---|---|
객체지향 5원칙 : 5.의존성 역전의 원칙 , 의존성 주입이란 무엇인가.. (1) | 2019.09.09 |
객체지향 5원칙 : 3.리스코브 치환의 원칙, 적용방법!쉬운 예시! (0) | 2019.06.25 |
객체지향 5원칙 : 2.OCP 개방폐쇄 원칙, "폐쇄와 확장"은 이렇게! (0) | 2019.06.21 |
객체지향 5원칙 : 1.SRP 단일 책임 원칙 이렇게 쓰면 '안'된다! (0) | 2019.06.19 |