본문 바로가기
프로그래밍 언어/JAVA(자바) 응용

37.Object 클래스의 메서드 활용

by lroot 2022. 5. 25.
728x90
반응형

equals() 메서드

- 두 인스턴스의 주소 값을 비교하여 true/false를 반환

- 재정의하여 두 인스턴스가 논리적으로 동일함의 여부를 구현함

- 인스턴스가 다르더라도 논리적으로 동일한 경우 true를 반환하도록 재정의할 수 있음

 

hashCode() 메서드

- hashCode()는 인스턴스의 저장 주소를 반환함

- 힙메모리에 인스턴스가 저장되는 방식이 hash 방식

- hash : 정보를 저장, 검색하는 자료구조

- 자료의 특정 값(키 값)에 대한 저장 위치를 반환해주는 해시 함수를 사용

 

clone() 메서드

- 객체의 원본을 복제하는데 사용하는 메서드

- 생성과정의 복잡한 과정을 반복하지 않고 복제할 수 있음

- clone() 메서드를 사용하면 객체의 정보(멤버 변수 값 등)가 동일한 또 다른 인스턴스가 생성되는 것이므로, 객체 지향 프로그램에서의 정보은닉, 객체 보호의 관점에서 위배될 수 있음

- 해당 클래스의 clone() 메서드의 사용을 허용한다는 의미로 cloneable 인터페이스를 명시해 줌

 

예제

- Student.java

public class Student implements Cloneable{

private int studentNum;
private String studentName;

public Student(int studentNum,String studentName) {
this.studentNum = studentNum;
this.studentName = studentName;
}

public String toString() {
return studentNum+","+studentName;
}

@Override
public boolean equals(Object obj) {

if(obj instanceof Student) {
Student std = (Student)obj;
if(this.studentNum == std.studentNum) {
return true;
}
else return false;
}
return false;
}

@Override
public int hashCode() {
return studentNum;
}

@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}


}

 

- EqualsTest.java

public class EqualsTest {

public static void main(String[] args) throws CloneNotSupportedException {

Student std1 = new Student(100,"lee");
Student std2 = new Student(100,"lee");

System.out.println(std1 == std2);
System.out.println(std1.equals(std2));

System.out.println(std1.hashCode());
System.out.println(std2.hashCode());

System.out.println(System.identityHashCode(std1));
System.out.println(System.identityHashCode(std2));

Student copyStudent = (Student)std1.clone();
System.out.println(copyStudent.toString());

Student copyStudent2 = (Student)std2.clone();
System.out.println(copyStudent2.toString());
}

}

 

 

댓글