객체지향 5원칙 : 4.인터페이스 분리의 원칙, 예시를 보며 이해하는 과정..

가장 유능한 사람은 가장 배움에 힘쓰는 사람이다. -괴테

 

 

 

 

 

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

}

 

 

 

이렇게 적용하게되면, 각각의 클래스들은, 필요한 인터페이스만 사용하면 되는 것!

 

쉽게 말해서 인터페이스를 각각의 기능으로(단일책임) 나누어서 필요한 기능만 임플리먼츠하는 것.

 

하지만 말처럼 쉽지않다는 점인터페이스를 너무 작게 나누다보면, 인터페이스 자체가 너무 많아질 수 도 있기때문

 

그래서 인터페이스를 잘 설계하는 것이 중요한데, 항상 인터페이스를 설계할 때 위 부분을 염두하면서 많은 시간을 가지고 설계하여 경험을 쌓는게 중요한 것 같습니다.

 

 

 

 

댓글

Designed by JB FACTORY