전체 글(530)
-
Prime Number 17
자바에서 hashCode() 메서드 오버라이딩 시 흔히 사용되는 초기값 17 역시 단순한 임의의 숫자가 아니라, 컴퓨터 과학적·실무적 맥락에서 깊은 의미와 역할을 갖습니다. 🎯 핵심 요약hashCode()의 초기값으로 17을 사용하는 이유는, 해시코드 조합의 출발점을 예측 불가능하게 만들고, 필드 해시코드들의 충돌 가능성을 낮추기 위한 시드(seed) 역할을 하기 때문입니다. 📌 1. 해시코드에서 초기값의 역할은 무엇인가?✅ 해시코드 누적 합산 방식자바에서 다중 필드를 해시코드로 조합할 때는 다음과 같은 방식이 일반적입니다:int result = INITIAL; // 초기값result = 31 * result + field1; // 누적result = 31 * result + fiel..
2025.04.23 -
Prime Number 31
🔬 자바에서 hashCode() 구현 시 사용되는 숫자 31의 의미와 이유1. 서론 – hashCode()는 왜 중요한가?자바의 hashCode()는 단순한 도우미 메서드가 아닙니다. 이는 HashMap, HashSet, Hashtable과 같은 해시 기반 컬렉션의 핵심 엔진으로, 객체의 논리적 동일성 여부를 빠르게 판단하고, 해시 버킷을 정확하게 분배하는 역할을 합니다."좋은 해시코드란, 같은 객체에 대해서는 항상 같은 값을 반환하고, 다른 객체에 대해서는 해시 충돌 없이 분산되는 값이어야 한다." 2. 해시코드 계산에 사용되는 상수 31의 정체🔹 기본 구현 형태@Overridepublic int hashCode() { int result = 17; result = 31 * result ..
2025.04.23 -
equals() 메서드의 5대 계약 원칙
자바에서 equals() 메서드를 오버라이딩할 때 반드시 따라야 하는 "5대 계약 원칙(5 contracts of equals method)"은 객체의 논리적 동등성을 안정적으로 비교하기 위한 필수 조건들입니다. 이 계약들은 자바 API 문서(java.lang.Object.equals)에 명시되어 있으며, 컬렉션이나 정렬, 캐시, ORM 등 다양한 컴포넌트에서 올바른 동작을 보장하기 위해 절대 위반해서는 안 되는 규칙들입니다. 📌 equals() 메서드의 5대 계약 원칙1. 반사성 (Reflexivity)어떤 객체 x에 대해, x.equals(x)는 항상 true여야 합니다.자신과의 비교는 항상 참이어야 하며, 이는 기본적인 자기동일성 원칙입니다.위반하면 자료구조에서 무한 루프가 발생할 수도 있음.Pe..
2025.04.23 -
Object.equals()
🔍 1. 객체의 동일성 vs 동등성 – JVM 메모리 관점✅ 객체의 동일성 (Identity)== 연산자는 두 레퍼런스가 같은 힙 객체를 가리키는지를 비교합니다.즉, System.identityHashCode()가 같을 가능성이 높고, 힙 메모리 상의 주소가 동일하다는 것을 의미합니다.JVM 수준에서 동일한 object header를 공유하게 됩니다.A a1 = new A();A a2 = a1;System.out.println(a1 == a2); // true ✅ 객체의 동등성 (Equality)equals()는 논리적으로 같은지(동등한 값인지)를 비교합니다.두 객체가 서로 다른 힙 주소를 갖고 있어도, 논리적으로 같다고 판단할 수 있습니다.이 비교는 대부분 객체 내부의 필드 상태를 기준으로 수행됩니다..
2025.04.23 -
POJO vs JavaBean
POJO(Plain Old Java Object)와 JavaBean은 모두 "순수한 자바 객체"를 의미하지만, 용도와 규칙, 그리고 프레임워크 친화성 측면에서 차이가 있습니다. 아래에서 두 개념을 명확히 비교해드리겠습니다. ✅ POJO vs JavaBean 비교 정리구분POJO (Plain Old Java Object)JavaBean정의아무런 제약 없이 작성된 순수 자바 객체특정 명명 규칙을 따르는 자바 객체필수 조건없음 (제약 거의 없음)1) public 기본 생성자2) private 필드3) getter/setter 메서드생성자어떤 생성자든 가능반드시 기본 생성자(no-arg constructor) 필요접근자필드 접근 방식 자유반드시 getter/setter로 필드 접근접근 제어자필드 public 가..
2025.04.23 -
JavaBean의 Property란?
자바빈(JavaBean)의 속성(Property)은 간단히 말해, private 필드와 그 필드를 읽고 쓰기 위한 public getter/setter 메서드로 구성된 객체의 상태 정보입니다. ✅ 1. 자바빈 속성의 정의속성(property)은 내부적으로 private 필드이며,외부에서는 해당 필드를 public 메서드(getter/setter)를 통해 접근합니다.즉, 속성은 다음과 같은 구성으로 정의됩니다:public class Person { private String name; // ← 속성 (Property) public String getName() { // getter return name; } public void setName(String name) {..
2025.04.23