[TIL 15일차] Sprint Mission2.2 - 디스코드: 관심사 분리를 통한 레이어 간 의존성 주입

오늘의 성취

  1. 개발 진행 상황
    • 관심사 분리를 통한 레이어 간 의존성 주입
      • 이전에는 Service로 의존성을 나타냈다면, 이번에는 Service가 아닌 Repository로 의존성을 나타냄
  2. JCF*ServiceFile*Service의 공통점과 차이점
    • 공통점
      • 비즈니스 규칙과 검증 로직은 거의 동일
      • 도메인 객체를 생성하고, 수정하는 로직도 거의 동일
    • 차이점
      • JCF*Service에서 데이터는 Map을 활용하기 때문에 실행 중 메모리에만 있고, 프로그램이 종료하면 사라진다.
      • File*Service에서 데이터는 시작할 때 파일에서 이전 데이터를 로드하여 메모리에 올려 사용하고, 작업한 데이터를 다시 파일에 저장할 수 있다.
      • 즉, 저장 로직에서 차이가 난다.

프로젝트 요구사항

//...

2. 심화 요구 사항

2-1. 관심사 분리를 통한 레이어 간 의존성 주입

  • 다음의 조건을 만족하는 서비스 인터페이스의 구현체를 작성하세요.
    • 클래스 패키지명: com.sprint.mission.discodeit.service.basic
    • 클래스 네이밍 규칙: Basic[인터페이스 이름]
    • 기존에 구현한 서비스 구현체의 “비즈니스 로직”과 관련된 코드를 참고하여 구현하세요.
    • 필요한 Repository 인터페이스를 필드로 선언하고 생성자를 통해 초기화하세요.
    • “저장 로직”은 Repository 인터페이스 필드를 활용하세요. (직접 구현하지 마세요.)
  • Basic*Service 구현체를 활용하여 테스트해보세요.

    public class JavaApplication {
        static User setupUser(UserService userService) {
            User user = userService.create("woody", "woody@codeit.com", "woody1234");
            return user;
        }
    
        static Channel setupChannel(ChannelService channelService) {
            Channel channel = channelService.create(ChannelType.PUBLIC, "공지", "공지 채널입니다.");
            return channel;
        }
    
        static void messageCreateTest(MessageService messageService, Channel channel, User author) {
            Message message = messageService.create("안녕하세요.", channel.getId(), author.getId());
            System.out.println("메시지 생성: " + message.getId());
        }
    
        public static void main(String[] args) {
            // 서비스 초기화
            // TODO Basic*Service 구현체를 초기화하세요.
            UserService userService;
            ChannelService channelService;
            MessageService messageService;
    
            // 셋업
            User user = setupUser(userService);
            Channel channel = setupChannel(channelService);
            // 테스트
            messageCreateTest(messageService, channel, user);
        }
    }
    
    • JCF*Repository 구현체를 활용하여 테스트해보세요.
    • File*Repository 구현체를 활용하여 테스트해보세요.
  • 이전에 작성했던 코드(JCF*Service 또는 File*Service)와 비교해 어떤 차이가 있는지 정리해보세요.

GitHub Repository 주소

https://github.com/JungH200000/10-sprint-mission/tree/sprint2

Categories:

Updated:

Leave a comment