[TIL 7일차] Sprint Mission2.1 - 디스코드: 도메인 모델링 및 서비스 설계
오늘의 성취
- 개발 진행 상황
User클래스,Channel클래스,Message클래스의 공통 필드 관리를 위해BaseEntity클래스를 추상 클래스로 구현- 디스코드의 핵심 도메인(
User,Channel,Message)을 분석하여 도메인 모델링 - 도메인 모델 별 CRUD(생성, 읽기, 모두 읽기, 수정, 삭제) 기능을 인터페이스로 선언
- 오늘 헷갈린 접근 제어자
- default: “이 필드는 해당 패키지 식구들만 공유하자.”
- protected: “이 필드는 나를 상속받은 자식들에게만 물려줄 것이다.”
- 데이터 부재 처리
- 단건 조회(
Optional<T>): 결과가 존재하지 않을 수 있음을 반환 타입을 Optional로 감싸서 호출자가isPresent()나ifPresent()를 통해 NPE(NullPointerException) 방지 - 다건 조회(
List/Set): 데이터가 없을 경우null대신 빈 컬렉션(Collections.emptyList()등)을 반환하여 NPE를 방지- ex) 컬렉션
List<User>은 데이터가 없을 경우 빈 리스트[]를 반환해서list.isEmpty()로 상태 확인 가능 - ex) 일반 객체
User는 데이터가 없을 경우null반환하는데 상태 확인 가능한 방법이 없어서Optional<User>로 감싸서isPresent()또는ifPresent()메소드로 상태 확인 가능
- ex) 컬렉션
- 단건 조회(
프로젝트 요구사항
1. 기본 요구사항
1-2. 도메인 모델링
- 디스코드 서비스를 활용해보면서 각 도메인 모델에 필요한 정보를 도출하고, Java Class로 구현하세요.
- 패키지명:
com.sprint.mission.discodeit.entity - 도메인 모델 정의
- 공통
id: 객체를 식별하기 위한 id로 UUID 타입으로 선언합니다.createdAt,updatedAt: 각각 객체의 생성, 수정 시간을 유닉스 타임스탬프로 나타내기 위한 필드로 Long 타입으로 선언합니다.
- User
- Channel
- Message
- 공통
- 생성자
id는 생성자에서 초기화하세요.createdAt는 생성자에서 초기화하세요.id,createdAt,updatedAt을 제외한 필드는 생성자의 파라미터를 통해 초기화하세요.
- 메소드
- 각 필드를 반환하는
Getter함수를 정의하세요. - 필드를 수정하는
update함수를 정의하세요.
- 각 필드를 반환하는
- 패키지명:
1-3. 서비스 설계 및 구현
- 도메인 모델 별 CRUD(생성, 읽기, 모두 읽기, 수정, 삭제) 기능을 인터페이스로 선언하세요.
- 인터페이스 패키지명:
com.sprint.mission.discodeit.service - 인터페이스 네이밍 규칙:
[도메인 모델 이름]Service
- 인터페이스 패키지명:
//...
GitHub Repository 주소
https://github.com/JungH200000/10-sprint-mission/tree/sprint2
Leave a comment