this 및 toString/equals/hashCode
현재 객체를 가리키는 this를 사용하고, 유용한 toString을 작성하며, equals와 hashCode를 올바르게 구현합니다.
this 및 toString/equals/hashCode은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 3개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
this 키워드
this는 현재 객체를 가리킵니다. fields에 접근하거나 다른 생성자를 호출할 때 사용합니다. 매개변수 이름과 필드 이름이 같을 때 의도를 분명하게 표현하는 데 도움이 됩니다.
읽기 쉬운 toString
toString()은 객체를 사람이 이해하기 쉬운 요약으로 반환합니다. 재정의하여 식별자와 이름 같은 주요 필드를 표시하세요. 그러면 로그와 디버그 출력이 훨씬 이해하기 쉬워집니다.
equals와 == 비교
equals는 논리적 동등성을 확인하고, ==는 두 참조가 같은 객체를 가리키는지 확인합니다. 대부분의 도메인 클래스는 메모리 주소가 아니라 내용으로 비교하도록 equals를 재정의해야 합니다.
hashCode는 equals와 일치해야 합니다
hashCode는 equals와 일관되어야 합니다. a.equals(b)가 참이면 a.hashCode()는 b.hashCode()와 같아야 합니다. HashSet과 HashMap이 올바르게 작동하려면 이 규칙이 필요합니다.
팁과 주의할 점
동등성에는 식별자나 이메일처럼 안정적인 fields를 선택하고, toString은 짧게 유지하세요. equals와 hashCode 안에서 변경 가능한 컬렉션을 사용하지 마세요. 확신이 서지 않으면 통합 개발 환경으로 메서드를 생성한 뒤 검토하세요.
코드: this, equals, hashCode
이 예제에서는 내용이 같은 두 사람 객체를 만듭니다. equals는 true를 반환하고 해시 코드는 일치하며, HashSet은 두 번째 객체를 찾을 수 있습니다.
public class Main {
// Simple Person class to demo this, toString, equals, hashCode
static class Person {
private int id;
private String name;
// Constructor uses this to set fields
Person(int id, String name) {
this.id = id; // this.id refers to the field
this.name = name; // name comes from the parameter
}
// Human friendly string
@Override
public String toString() {
return "Person{id=" + id + ", name=" + name + "}";
}
// Logical equality: same id and same name
@Override
public boolean equals(Object o) {
if (this == o) return true; // same reference
if (o == null || getClass() != o.getClass()) return false;
Person other = (Person) o;
if (this.id != other.id) return false;
// Compare names safely (null aware)
if (this.name == null) return other.name == null;
return this.name.equals(other.name);
}
// Hash code consistent with equals
@Override
public int hashCode() {
int result = Integer.hashCode(id);
result = 31 * result + (name == null ? 0 : name.hashCode());
return result;
}
}
public static void main(String[] args) {
// Create two persons with the same content
Person a = new Person(1, "Ada");
Person b = new Person(1, "Ada");
// toString shows readable info
System.out.println(a);
// equals compares content, not memory address
System.out.println("a == b ? " + (a == b)); // false (different objects)
System.out.println("a.equals(b) ? " + a.equals(b)); // true (same content)
// hashCode must match for equal objects (useful in hash collections)
System.out.println("hash(a) = " + a.hashCode());
System.out.println("hash(b) = " + b.hashCode());
// Example with HashSet: contains works because equals and hashCode agree
java.util.Set<Person> set = new java.util.HashSet<>();
set.add(a);
System.out.println("set contains b ? " + set.contains(b)); // true
}
}
계약 확인
빠른 확인: equals를 재정의한다면 무엇을 함께 해야 하며, 그 이유는 무엇인가요?
복습
복습: this는 필드 접근을 명확하게 하고, toString은 디버깅을 돕고, equals는 내용을 비교하며, hashCode는 컬렉션의 일관성을 유지합니다.
자주 묻는 질문
“this 및 toString/equals/hashCode” 강의는 무료인가요?
네 — “this 및 toString/equals/hashCode” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 3개의 강의가 포함되어 있습니다.
“this 및 toString/equals/hashCode”에서 뭘 배우나요?
현재 객체를 가리키는 this를 사용하고, 유용한 toString을 작성하며, equals와 hashCode를 올바르게 구현합니다. 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Java Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 1번째 강의입니다.
“this 및 toString/equals/hashCode” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- this 및 toString/equals/hashCode
- 객체 조합
- 도메인 모델링(UML→코드)