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();
}
}
범용 인터페이스를 용도에 맞게 분리함으로서 구현체를 만들 때 필요한 기능만을 구현할 수 있게 된다.