인터페이스 분리 원칙

  • Interface Segregation Principle
  • 여러 용도의 범용 인터페이스는 작은 단위의 여러 인터페이스로 분리해야한다.

 

범용 인터페이스는 불필요한 기능의 구현을 강요한다

public interface CommonService {

    // 사용자 목록 조회
    List<Account> getUsers();

    // 게시물 목록 조회
    List<Board> getBoards();
}


@Service
@RequiredArgsConstructor
public class UserServiceImpl implements CommonService {

    private final UserRepository userRepository;
    private final BoardRepository boardRepository;

    @Override
    public List<Account> getUsers() {
        // 유저 목록 조죄
        return userRepository.getList();
    }

    @Override
    public List<Board> getBoards() {
        // 게시글 목록 조회 - 해당 클래스에서 사용하지 않는 불필요한 기능
        return boardRepository.getList();
    }
}

  • 인터페이스에 여러 용도의 기능이 뭉쳐있다면 단일 용도를 위해서 구현체를 만들 때 불필요한 기능의 구현까지 강요받게 된다.

 

범용 인터페이스를 분리하라

public interface BoardService {

    // 게시물 목록 조회
    List<Board> getBoards();
}


@Service
@RequiredArgsConstructor
public class BoardServiceImpl implements BoardService {

    private final BoardRepository boardRepository;

    @Override
    public List<Board> getBoards() {
        // 게시글 목록 조회 - 해당 클래스에서 사용하지 않는 불필요한 기능
        return boardRepository.getList();
    }
}


public interface UserService {
    // 사용자 목록 조회
    List<Account> getUsers();
}


@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {

    private final UserRepository userRepository;

    @Override
    public List<Account> getUsers() {
        // 유저 목록 조죄
        return userRepository.getList();
    }
}

  • 범용 인터페이스를 용도에 맞게 분리함으로서 구현체를 만들 때 필요한 기능만을 구현할 수 있게 된다.

 

다음글

+ Recent posts