System.out.println("member" + member)이 호출이 되면,
1] 개발자가 toString() 메서드를 오버라이딩했다면, toString()이 호출이 된다.
2] 개발자가 toString() 메서드를 오버라이딩하지 않았다면, 참조 변수가 찍힌다.
-> 1]의 경우, 만약 클래스 내에 필드가 100개라면 toString()을 오버라이딩할 때,
100개의 필드에 대해 일일이 코딩을 해줘야 하는 중작업이다.
Lombok에서는 이러한 문제를 @ToString()으로 한 방에 해결해 준다.
@Entity
@Getter@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 기본 생성자를 protected로 자동 생성해준다.
@ToString()
public class Member {
@Id@GeneratedValue
@Column(name = "member_id")
private Long id;
private String username;
private int age;
@ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name = "team_id")
private Team team;
//이하 생략
@Test
public void sss(){
Member member = new Member("123");
//member.toString() 호출!
System.out.println("member = " + member);
}
@ToString()이 Member 클래스 내의 모든 필드에 대해 출력해주는 toString()메서드를 오버라이딩해줌.
그러나 Member 클래스 내에서 노출하기 민감한 필드에 대해서는 호출해주고 싶지만 않다면???
아래와 같이 [of]를 사용하면 된다.
@Entity
@Getter@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED) // 기본 생성자를 protected로 자동 생성해준다.
@ToString(of = {"id", "username", "age"}) // 필드 범위 제한!
public class Member {
@Id@GeneratedValue
@Column(name = "member_id")
private Long id;
private String username;
private int age;
@ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL)
@JoinColumn(name = "team_id")
private Team team;
//이하 생략
'CS 잡지식' 카테고리의 다른 글
JPA가 제공하는 remove() 메서드에 대한 주의!! (0) | 2023.05.10 |
---|---|
Repository 구현 시, 주의점!!(feat.[수정] 메서드는 필요x) (0) | 2023.05.10 |
하이버네이트, 쿼리 파라미터 보는 법!! (1) | 2023.05.09 |
인텔리J - 메서드의 매개변수 조회 단축키(Feat. ctrl + P) (0) | 2023.05.09 |
JPA에서 같은 [식별자]로 Context에서 조회를 하면.... (0) | 2023.05.09 |