전체 보기
🍀

도메인 생성, Entity vs Vo, int vs Integer

작성일자
2023/05/09
태그
DIARY_DEVELOP
프로젝트
NOI
책 종류
1 more property

도메인 생성 (DDD 도전,,?)

(1) 기획 측 요구 사항

회원가입시 기본 유형을 선수로 하고, 회원 업그레이드시 코치 유형으로 업그레이드
일단 회원가입시 role을 선수(디폴트)로 설정
일단 회원가입시 무조건 선수로 가입하게하고, 코치도 선수와 동일하게 테이블생성
player테이블의 코치 데이터는 선수의 중위값을 나타낼때 쓰면 좋겠음.
Statistics 테이블 별개로
⇒ 내가 궁금한 점(회의 때 여쭤보자)
선수 중위값은 team의 training statistics에 현재 저장하고 있는데, 이것 외에 추가적으로 저장해야 할 게 있는가. 예를 들면 평균 같은?
코치도 동일하게 player 테이블을 생성하면 member랑 player 테이블 나눌 필요가 없어지지 않는가. 그냥 member랑 player테이블 합칠 것인가?

(2) 생성 과정 (base entity부터 연관관계 method까지)

1.
base entity 만들기 → 모든 도메인들에 넣어줄 공통 필드 추출
@Getter @MappedSuperclass @EntityListeners(AuditingEntityListener.class) @SuperBuilder @NoArgsConstructor public abstract class BaseEntity { @CreatedDate private LocalDateTime createdDate; @LastModifiedDate private LocalDateTime modifiedDate; }
Java
복사
2.
각 도메인 클래스들 만들기
예시) Member 도메인
Member.java
@Entity @Getter @NoArgsConstructor @AllArgsConstructor @Builder @BatchSize(size = 50) public class Member extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id") private Long id; // 기본 정보 private String name; private Date birth; private String email; private Gender gender; // 인증 정보 private String role; private String provider; private String provider_id; }
Java
복사
Gender.java → enum type
public enum Gender { M, F, U }
Java
복사
결과
3.
연관 관계 넣어주기
예시) Member 도메인과 Player 도메인
Player.java
@Entity @Getter @NoArgsConstructor @AllArgsConstructor @Builder public class Player { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "player_id") private Long id; @OneToOne(fetch=FetchType.LAZY) @JoinColumn(name = "member_id") @OnDelete(action = OnDeleteAction.CASCADE) private Member member; // 선수 기본 정보 (Member:Record=1:1) // 선수 추가 정보 @Builder.Default private Boolean joined = false; // 팀 소속 여부(승인 전까진 false) private Integer number; // 등번호 private String position; // 포지션 }
Java
복사
잠깐,,, 도메인 생성 중 int랑 Integer 차이가 헷갈린다면?

(참고) inv vs Integer

int : 자료형(primitive type)
산술 연산 가능함
null로 초기화 불가
Integer : 래퍼 클래스 (Wrapper class) - 기본형을 객체로 다루기 위해 사용하는 클래스
Unboxing하지 않을 시 산술 연산 불가능함
null값 처리 가능

(3) 엔티티 vs VO

도메인
정의) 개발하는 기능에 필요한 객체들을 도출해낸 것
특징) 도메인의 개념을 Entity와 VO(Value Object)로 나눌 수 있음
엔티티
정의) 식별자를 가짐
특징) 식별자를 제외한 것들은 값이 바뀌어도 바뀌기 전/후가 같은 객체임
VO
정의) 식별자 없이 값만 가짐
특징) 값이 변경되면 다른 객체가 되어 버림

하루 정리

TIL 작성하기
3시 30분 데브코스 면접
6시 GDSC 웹 강의 실습 보조
NOI
도메인 생성