프록시 객체의 재정의된 equals 메서드를 호출하게 되면 초기화되나요?
444
작성한 질문수 30
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Post post)) return false;
return id.equals(post.getId());
}위에 처럼 equals 메서드를 재정의했고 id값만 사용해 객체를 비교했습니다. 예상한걸로는 id값만 사용했기에 객체가 초기화 되지 않는걸 예상했고 하지만 실제로 동작에서는 초기화가 되는것을 확인했습니다.
@Override
public boolean equals(Object o) {
return true;
}그리고 테스트 하기위해 위에 처럼 필드를 사용하지 않게 재정의를 했고 하지만 역시 equals를 사용하면 객체가 초기화 되었습니다.
이유가 무엇인가요? 스택오버플로우 에서는 equals가 재정의되면 프록시 객체에서는 원본객체로 위임한다는 답변이 있습니다. 원본 객체로 위임하면서 초기화가 발생하는것일까요?
답변 2
0
안녕하세요, 인프런 AI 인턴이에요.
equals 메서드를 호출할 때 객체의 초기화 여부는 호출하고 있는 메서드와 객체의 종류에 따라 달라질 수 있어요. 프록시 객체의 경우, equals 메서드를 호출하면 원본 객체로 위임되어 초기화가 발생할 수 있어요.
프록시 객체는 실제 객체를 대신해서 동작하는 객체로, 원본 객체의 메서드 호출이 필요한 경우에 원본 객체로 위임하는 역할을 담당해요. 프록시 객체는 대부분 실제 객체가 초기화되기 전에 생성되기 때문에, equals 메서드를 호출하면 실제 객체의 초기화가 필요한 경우가 많아요.
예를 들어, @Override된 equals 메서드 내부에서 id 필드를 사용하는 경우에는 해당 프록시 객체가 실제 객체로 위임하여 원본 객체의 equals 메서드를 호출해야 하기 때문에 초기화가 필요해요.
하지만 equals 메서드 내부에서 필드를 사용하지 않거나 상수 값을 반환하는 경우에는 초기화가 필요하지 않을 수 있어요.
따라서, equals 메서드를 호출할 때 프록시 객체의 초기화 여부는 equals 메서드 내부에서 어떤 작업을 수행하는지에 따라 달라질 수 있어요. 해당 프록시 객체의 equals 메서드를 확인해보시고 초기화가 발생하는지, 어떤 작업을 수행하는지 확인해보시면 더 정확한 답변을 얻을 수 있을 것 같아요.
요청하신 내용에 대해 도움이 되었는지 확인해보세요. 추가적인 궁금한 점이 있으면 언제든지 물어보세요. 감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
21
2
inheritance startegy 선택시 고려사항
0
21
1
Entity 동등성 비교
0
18
1
실무 조언 관련 질문입니다.
0
44
1
H2데이터베이스 파일 생성
0
56
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
52
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
51
1
JPQL 메소드와 락
0
55
1
Delivery @OneToOne
0
60
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
92
2
UnsupportedOperationException 발생
0
85
3
H2 Database 연결이 안됩니다.
0
92
2
연관관계 매핑 질문드립니다.
0
85
2
h2데이터베이스 실행오류
0
107
2
persistence.xml
0
106
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
80
1
영속성 컨텍스트
0
65
1
JPA 프록시
0
94
1
Native Query와 MyBatis
0
67
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
85
1
임베디드 타입 예시 코드 관련 질문
0
114
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
94
3
인텔리제이 패키지 커서 단축키 질문
0
108
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
143
1





