[SOLID] 인터페이스 분리 원칙

이재훈·2023년 8월 15일
0

SOLID

목록 보기
4/5

객체지향의 핵심 원리와 원칙들

ISP, 인터페이스 분리 원칙

ISP : Interface Segregation Principle
클라이언트별로 세분화된 인터페이스를 만들어야 한다.

인터페이스 분리원칙이 깨진 상황

public interface Repository {
    void createUser();
    User findUserById(Long id);

    void createArticle();
    Article findArticleBtId(Long id);
}

여기에 Repository가 선언되어 있습니다. 해당 인터페이스를 구현하는 두 개의 클래스를 만들어 보도록 하겠습니다.

public class UserRepository implements Repository{
    @Override
    public void createUser() {
        
    }

    @Override
    public User findUserById(Long id) {
        return null;
    }

    @Override
    public void createArticle() {

    }

    @Override
    public Article findArticleBtId(Long id) {
        return null;
    }
}
public class ArticleRepository implements Repository{
    @Override
    public void createUser() {
        
    }

    @Override
    public User findUserById(Long id) {
        return null;
    }

    @Override
    public void createArticle() {

    }

    @Override
    public Article findArticleBtId(Long id) {
        return null;
    }
}

해당 코드를 보고 문제를 눈치 채신 분들이 있을 것입니다.
UserRepository 클래스에는 createUser메서드와 findUserById 메서드의 구현만 필요하고
ArticleRepository 클래스에는 createArticle 메서드와 findArticleBtId 메서드의 구현만 필요합니다. 하지만 Repository 인터페이스를 구현했기 때문에 필요없는 메서드를 오버라이딩 해야하는 상황이 생긴 것 입니다.

사용해야하는 코드에도 문제가 생깁니다. 사용할 수 없는 메서드가 불필요하게 노출되는 경우가 발생합니다.


이런 구조로 변경되어야 합니다.

인터페이스 분리 원칙을 지키는 코드

인터페이스 분리 원칙을 지키는 코드는 구현 클래스에는 불필요한 메서드를 구현하지 않도록 만들고, 인터페이스를 사용하는 클래스에는 불필요한 메서드를 구현하지 않도록 만들고, 인터페이스를 사용하는 클래스에는 불필요한 메서드를 노출시키지 않아 유지보수하기 좋은 코드를 만들어줍니다.

결론

인터페이스를 적절히 사용하여 유지보수하기 쉬운 코드를 만들어야 합니다.


해당 게시글은 프로그래머스 스쿨 강의
"실무 자바 개발을 위한 OOP와 핵심 디자인 패턴(푸)"
를 정리한 내용입니다. 쉽게 잘 설명해주시니 여러분도 강의를 듣는 것을 추천드립니다.

profile
부족함을 인정하고 노력하자

0개의 댓글