- equals : 객체가 가진 있는 값을 비교할 때 사용
- toString : 객체가 가진 값을 문자열로 리턴하는 메소드
- hashCode : 객체의 해시코드 값 반환
public class Student {
String name;
String number;
int birthYear;
}
학생이란 클래스를 생성시켜 값을 넣어준다.
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "123";
s1.birthYear = 2000;
Student s2 = new Student();
s2.name = "홍길동";
s2.number = "123";
s2.birthYear = 2000;
}
현 상태에서
if(s1.equals(s2))
{
System.out.println("s1 = s2");
}
else {
System.out.println("s1 != s2");
}
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s1.toString());
같은 값을 할당한 클래스여서 s1=s2 라고 생각할 것이다. 하지만 s1 != s2이다.
왜일까?
아무것도 설정을 해놓지 않는다면 object 자체적으로 할당한 고유의 값이 들어가기 때문이다.
고유값이 아닌 값을 오버라이딩 하기 위해

Source 를 클릭하면
Generate hashCode() and equals()와
Generate toString()
이 보일 것이다.
이것을 통하여 hashCode, equals, toString 메소드를 사용자 정의 할 수 있다.
- hashCode(), equals()

어떤 속성을 사용해서 해시코드 값을 구할 것인지 선택할 수 있게 한다.
위와 같이 세 멤버변수의 값이 전부 똑같을 경우, 같은 hashcode를 갖게 된다.
그러나, 같은 사람임에도 이름을 쓰는 방법은 여러가지 있을 수 있다.
"홍길동"과 "홍 길동" 이 그 예이다.
성을 붙여쓰든, 떼어쓰든 두 사람은 동일 인물일 것이다.
그러나 학번은 학생 한명만이 갖는 고유의 번호이다.
따라서 두 클래스의 number만을 비교하여 같은 hashcode를 부여해줄 수 있다.
Student s1 = new Student();
s1.name = "홍길동";
s1.number = "123";
s1.birthYear = 2000;
Student s2 = new Student();
s2.name = "홍 길동";
s2.number = "123";
s2.birthYear = 2000;
if(s1.equals(s2))
{
System.out.println("s1 = s2");
}
else {
System.out.println("s1 != s2");
}
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());

다음과 같이 설정한다면, 이름이 띄어쓰기 때문에 문자열이 달라졌다 하더라도

똑같은 고유의 해시코드가 사용되며 두 클래스 같다고 나오게 된다.
- toString()
System.out.println(s1.toString());
아무런 override 없이 tostring을 사용할 경우 보통 "Study.Student@be51" < 와 같이 프로젝트명 + 클래스명+ 고유번호 가 출력이 된다.
이 또한 설정창에서 override 하여 클래스 멤버변수를 출력하게 만들어 줄 수 있다.

다음과 같이 표기하고 싶은 멤버 변수를 클릭하여 Generate 해보자.
Student [name=홍길동, number=123, birthYear=2000]
코드 실행 시 위의 값이 출력될 것이다.
'자바 공부 > [자바] 기본 공부' 카테고리의 다른 글
| [자바 공부 004일차] Date, Calendar (0) | 2024.11.11 |
|---|---|
| [자바 공부 4일차] 컬렉션 프레임워크 ( Generic, Set, List, Map) (0) | 2024.11.11 |
| [자바 공부 3일차] 인터페이스 (0) | 2024.11.08 |
| [자바 공부 3일차] super와 생성자 (0) | 2024.11.08 |
| [자바 공부 3일차] 상속과 추상클래스 (0) | 2024.11.08 |