자바 오브젝트 클래스
- 자바 오브젝트 클래스는 java.lang에 포함된 라이브러리입니다.
- 클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않으면 자동으로 Object 클래스를 상속하게 됩니다.
- 따라서 자바의 모든 클래스는 Object의 자식이나 자손 클래스입니다.
- 때문에 Object 클래스의 메서드는 모든 클래스에서 활용 가능합니다.
오브젝트 클래스의 주요 메서드
- boolean equals(Object obj): 클래스 인스턴스의 주소를 비교하여 참, 거짓의 결과를 반환합니다.
- int hashCode(): 인스턴스의 해시코드를 반환합니다.
- String toString(): 인스턴스를 문자열 정보로 반환합니다.
equals(Object obj) 메서드
- equals() 메서드는 두 클래스 인스턴스의 주소를 비교하여 boolean 값을 반환합니다.
- equals() 메서드는 매개 변수를 Object 타입으로 받기 때문에 모든 클래스가 매개 변수로 대입될 수 있습니다.
- equals() 메서드는 비교 연산자(==)와 동일한 결과를 반환합니다.
- 객체간 비교 시 주소값만 비교하기 때문에 내용이 같은지를 비교할 때 == 연산자로는 부정확한 결과가 나올 수 있습니다.
- 이 경우 equals() 메서드를 활용하여 비교하는 것이 좋습니다.
- 일반적으로 비교의 목적에 따라 오버라이딩하여 사용하며, 다른 라이브러리에도 오버라이딩되어 사용되고 있습니다.
equals(Object obj) 메서드 사용 예시
public class Student {
public String name;
public Student(String name) {
this.name = name;
}
// equals 메서드 오버라이딩
@Override
public boolean equals(Object obj) {
if(obj instanceof Student std) {
if(name.equals(std.name)) {
return true;
}
}
return false;
}
}
public class EqualsExample {
public static void main(String[] args) {
Student std1 = new Student();
Student std2 = new Student();
Student std3 = new Student();
if(std1.equals(std2)) {
System.out.println("std1과 std2는 동일합니다");
}
}
}
hashCode() 메서드
- 해시코드(hashcode)란 객체를 식별할 수 있는 고유한 번호를 뜻합니다.
- hashCode() 메서드는 생성된 인스턴스의 메모리 주소를 이용하여 해시코드를 생성하기 때문에 각 인스턴스마다 다른 값을 반환합니다.
- hashCode() 메서드는 equals() 메서드와 함께 객체가 동등한지를 비교할 때 사용됩니다.
- hashCode(): 특정 조건에 의해 같은 고유 번호를 반환하는지 확인
- equals(): 내부적으로 같은 데이터를 가지는지 확인
- 두 메서드에서 모두 true를 반환해야 같은 객체로 확인
- hashCode() 메서드는 일반적으로 인스턴스간에 데이터를 식별할 수 있는 고유 데이터(식별자)를 기준으로 재정의하여 원하는 값을 반환하도록 오버라이딩하여 활용합니다.
(생성된 인스턴스가 다르더라도 내부 값이 같다면 같은 인스턴스로 분류하기 위해 활용)
hashCode() 메서드 사용 예시
public class Student {
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
// hashCode() 메서드 오버라이딩
@Override
public int hashCode() {
int hashcode = id + name.hashCode();
return hashCode;
}
// equals() 메서드 오버라이딩
@Override
public boolean equals(Object obj) {
if(obj instanceof Student std) {
if(id == std.getId() && name.equals(std.getName()))) {
return true;
}
}
return false;
}
}
public class HashCodeExample {
public static void main(String[] args) {
Student std1 = new Student(1, "홍길동");
Student std2 = new Student(1, "홍길동");
if(std1.hashCode() == std2.hashCode()) {
if(std1.equals(std2)) {
System.out.println("같은 객체입니다.");
}
else {
System.out.println("데이터가 다르므로 같은 객체가 아닙니다.");
}
}
else {
System.out.println("해시코드가 다르므로 같은 객체가 아닙니다.");
}
}
}
toString() 메서드
- toString() 메서드는 생성된 인스턴스의 문자 정보를 반환합니다.
- 기본적으로 toString() 메서드를 사용하면 '클래스이름@16진수해시코드'로 구성된 문자열을 반환합니다.
- toString() 메서드 역시 다른 Object 클래스의 메서드와 같이 원하는 형식의 문자열을 반환하도록 오버라이딩하여 활용합니다.
toString() 메서드 사용 예시
public class Student {
private String grade;
private String classNumber;
private String name;
public Student(String grade, String classNumber, String name) {
this.grade = grade;
this.classNumber = classNumber;
this.name = name;
}
// toString() 메서드 오버라이딩
@Override
public String toString() {
return grade + "학년 " + classNumber + "반 " + name;
}
}
public class EqualsExample {
public static void main(String[] args) {
Student std1 = new Student("1", "2", "홍길동");
// std1의 정보를 변수에 담아 출력
String std1Info = std1.toSring();
System.out.println(std1Info);
}
}
'Programing Language > Java' 카테고리의 다른 글
[Java] 자바 문자열 관련 클래스(Java String Related Classes) (0) | 2022.07.22 |
---|---|
[Java] 자바 시스템 관련 클래스(Java System Class) (0) | 2022.07.20 |
[Java] 자바 표준 라이브러리(Java Standard Library) (0) | 2022.07.18 |
[Java] 자바 프로그램 모듈 관계 조정(Coordinating Module Relationships) (0) | 2022.07.18 |
[Java] 자바의 라이브러리와 모듈(Java Library & Module) (0) | 2022.07.18 |