Service and ServiceImpl

문정현·2023년 12월 28일
0

항상 하던 CRUD를 하던와중 팀장님이

Service를 상속받아와서 ServiceImplV1 같이 구현해주세요

?? service면 service지 무슨 implementation이 필요하다는 걸까

service의 기본적인 틀을 잡아서

public interface BoardService {
    public Board createBoard(CreateBoardRequestDto requestDto, Long memberId);
}

public class BoardServiceImplv1 implements BoardService {
	@Override
    public Board createBoard(CreateBoardRequestDto requestDto, Long memberId) {
    	// do something
    }
}

이렇게 오버라이딩해서 구현하는 것이다

아니 귀찮게 왜 나누는거지? 라고 생각할 수 있지만 의존성을 줄이고 결합도를 낮출 수 있다 아래와 같은 세가지의 다른 요구사항이 왔을때는 어떻게 할 것인가

공지사항 : 관리자만 쓰기 / 덧글기능없음 / 첨부파일있음
일반 게시판 : 회원만 쓰기 / 덧글목록추가 / 첨부파일없음
문의 게시판 : 누구나 쓰기 / 덧글기능없음 / 첨부파일있음

일일히 createNotification, createBoard, createComplain을 만들 것인가?
createBoard를 오버라이딩하여 내부 로직을 커스터마이징 하면 될것이다는 생각이 드는건 당연함

하지만 하나의 인터페이스에 너무 많은 책임을 가지게 하는것 또한 문제가 되는것도 맞기 때문에 무조건 Service인터페이스와 ServiceImpl로 나누어 구현하기보단, OCP를 준수하며 전략을 쉽게 바꿀 이유가 있는지에 대한 여부를 판단 후 구현하는게 좋다.
OCP는 그래서 언제 포스트할껀데..?!

profile
주니어 개발자를 꿈꾸며

0개의 댓글