JPA에서 domain class 만들기
JPA를 사용하기 위해서 앞으로 만들 Entity 객체는 기본 구조가 필드 변수와 Getter와 Setter이다.
Entity 객체
- 필드 변수
- Getter, Setter
필드 만들기
Getter, Setter 만들기 (lombok 사용 안함)
이런 Generate 창이 뜨게 되는데, 여기서 Getter and Setter를 선택해준다.
필요한 필드명 선택해주고 OK 클릭
이렇게 생성된다.
lombok을 사용한 Getter, Setter
lombok을 사용하면, 각각의 필드마다 Getter, Setter를 구현하지 않고 어노테이션만 추가해도 된다.
이렇게 lombok을 사용할 수 있는 이유는 이전에 프로젝트 설정에서 lombok 의존성을 추가했기 때문이다. (만약, lombok 의존성을 추가하지 않았다면, build.gradle에 lombok 의존성을 추가하도록 한다.)
+) Getter, Setter를 class scope에서 설정
위와 같은 예시
+) Getter, Setter를 field scope에서 설정
해당 필드만 getter, setter 생성
이렇게 되면, name 필드에만 Getter, Setter 생성
(만약, 다른 필드에도 Getter, Setter가 필요하다면 해당 필드에 어노테이션 추가)
+) Delombok 하기
[마우스 우클릭] - [Refactor] - [Delombok] - [Getter 혹은 Setter 선택]
만약, Getter를 선택하면 Getter 어노테이션이 사라지고, 각각의 필드에 대한 Getter 메소드가 코드로 작성되어서 생성된다.
ToString
우선 Test 코드를 작성하기 위해 Test 파일을 만든다.
[OK]를 누르면 된다.
test 폴더 안의 domain 패키지에 UserTest 클래스가 생겼다.
UserTest 코드를 작성하면 다음과 같다.
Test 실행 결과는 해쉬코드가 나왔다.
내용을 알 수 가 없기 때문에 디버깅 등을 할 때 힘들 수 있다.
Java의 모든 객체는 Object class의 하위 객체이다. (상속 받는 것을 명시(extends Object)하지 않았지만, 상속 받고 있음)
+) toString() 상세보기
[class 명] + @ + [hashCode]
사실상 위의 코드에서는 Object 클래스의 toString()을 실행하도록 되어있다.
System.out.println(">>> " + user);
System.out.println(">>> " + user.toString());
// 2개의 코드는 같은 의미를 가진다.
따라서, Java에서는 toString() 메소드를 overriding 하도록 권고하고 있다.
이는 우리가 만드는 JPA Entity에도 toString()을 overriding 하는 것이 좋다.
+) overriding 하는 경우
User class에서 toString() override하기
다시 Test 코드 실행
override된 함수로 잘 나온다.
하지만, 위처럼 직접 추가를 하면 필드가 추가되었을 때 계속 수정해야 한다.
따라서 lombok에서 제공하는 toString() 어노테이션을 추가하기
toString 메소드 지우기
다시 실행해보기
잘 나온다.
마찬가지로 Getter, Setter와 마찬가지로 toString도 Delombok을 할 수 있다.
Delombok을 통해 toString() 함수를 살펴보자.
생성자 관련 lombok 어노테이션
JPA를 사용하게 되면, Entity 객체를 생성해야 하는 경우가 많다.
lombok에서 제공하는 생성자 관련 어노테이션은 3가지가 있다.
@NoArgsConstructor // 인자 없는 Constructor
// JPA에는 인자가 없는 Constructor가 반드시 필요하기 때문에 항상 선언
@AllArgsConstructor // 객체가 가지고 있는 필드들을 인자로 받는 것
// 모든 필드를 받는 Constructor
@RequiredArgsConstructor // 꼭 필요한 인자만을 인자로 받아서 생성
필드 값 필수 지정하기 (해당 필드에 @NonNull 지정하기)
@NonNull이 붙어있는 필드는 반드시 필요한 필드로 지정하는 것
Test 코드 작성 예시)
Delombok을 통해 Constructor 뜯어보기
EqualsAndHashCode
JPA에서 EqualsAndHashCode를 사용할 일은 크게 없다.
다만, @Data 어노테이션에서 구현하고 있는 내용이고, Java에서 기본적으로 객체의 동등성을 비교하기 위해 eqauls 메소드와 hashCode 메소드를 overriding 할 것을 권고하고 있다.
따라서, Entity를 만들 때도 equals, hashCode, toString 메소드를 override 하는 것을 추천한다.
너무 파고 들지 않기 위해 이번 강좌에서는 이러한 어노테이션을 사용한다 정도만 알고 넘어가자.
Data
Entity 객체에서 가장 많이 사용하게 될 lombok 어노테이션
@Data 해당 클래스 찾아보기
앞에서 선언한 어노테이션을 일부 선언한 것과 같은 효과를 보인다.
이렇게만 선언해줘도 된다.
@Data는 만능처럼 보이지만, OOP의 몇 가지 원칙을 깨뜨린다.
이것도 이 정도만 알고 넘어가도록 하자.
Builder
AllArgsConstructor와 비슷하게 객체를 생성하고 필드 값을 주입해주는데, builder의 형식을 가지고 제공해준다.
필요한 값을 builder 형식으로 제공한다.
2023 KAKAO Tech Campus_BackEnd 선택 과정
Spring JPA와 Security 강의 정리 내용입니다.
'개발 > Spring' 카테고리의 다른 글
Repository Interface 계층 살펴보기 (0) | 2023.07.20 |
---|---|
H2 DB 및 로그 설정 (0) | 2023.07.18 |
스프링 부트 프로젝트 생성 (0) | 2023.07.17 |
JPA (0) | 2023.07.05 |
[5주차] Spring Basic - 개발 도구 설치 & 설정 (0) | 2023.06.28 |