1.1 Object 클래스의 메서드
: 최상위 클래스이므로 모든 클래스는 Object 클래스의 자식이므로 항상 사용이 가능
: 11개의 메서드만 가지고 있음
1.2 equals(Object obj)
: 객체 자신과 주어진 객체(obj)를 비교하며, 같으면 true, 다르면 false
: Object 클래스에 정의된 equals는 참조변수 값(객체의 주소)을 비교
public boolean equals(Object obj){
return this == obj;
}
: equals를 그대로 가져다 쓰라는 것이 아닌 의미에 맞게 오버라이딩하여 사용하라는 것
// 복소수
class Complex{
int real;
int imaginary;
public Complex(int real, int imaginary){
this.real = real;
this.imaginary = imaginary;
}
@Override // 주소값이 아닌 안의 값(real, imaginary)를 비교하여 동일하다면 true, 다르다면 false를 반환하도록 오버라이딩을 진행
public boolean equals(Object obj) {
if(obj instanceof Complex == false) return false; // 일단 Complex가 될 수 없는 경우 false를 반환
// 다운 캐스팅이 가능하다면 다운 캐스팅 진행
Complex c = (Complex) obj;
return real==c.real && imaginary==c.imaginary;
}
}
public class EqualsTest2 {
public static void main(String[] args) {
Complex c1 = new Complex(3, 5);
Complex c2 = new Complex(3, 5);
Complex c3 = new Complex(5, 3);
System.out.println(c1.equals(c2)); // true
System.out.println(c1.equals(c3)); // false
}
}
1.3 hashCode()
: 객체의 해시코드를 반환하는 해시함수
: 동일한 실행에서 한 객체에 대해 hashCode()를 반복해서 호출했을 때 얻어지는 해시 코드는 동일해야 함
: 일반적으로 해시 코드가 같은 인스턴스들이 존재하는 것은 가능하지만 Object 클래스에 정의된 hashCode()는 객체의 주소값으로 해시코드를 생성하기에 두 인스턴스의 해시코드 반환값은 같을 수 없음
: equals()를 오버라이딩했다면, hashCode()도 적절히 오버라이딩해야 함
>> 동일한 데이터가 들어가지 않기 때문에 내부에서 같은 데이터의 입력인지 확인이 필요. 따라서 HashCode()와 equals() 함수로 판단해야 하기 때문에 이 둘의 오버라이딩이 필요 (equals나 hashCode 중 하나라도 오버라이딩하여 판단하지 않을 경우 동일한 값이 중복으로 출력됨)
*해시코드(hashCode) : 데이터를 저장하고 검색하는 방법 중 하나인 해싱(hashing)을 구현한 컬렉션 클래스(HashMap, HashSet)에서 객체를 저장하고 읽어올 때 사용하는 키
1.4 toString()
: 객체의 정보를 문자열로 제공할 목적으로 정의된 메서드
public String toString(){ // Object 클래스의 toString()
return getClass().getName() + "@"
+Integer.toHexString(hashCode());
}
목적에 맞게 적절하게 오버라이딩하여 사용해야 함
class Person{
String name;
int age;
Person (String name, int age){
this.name = name;
this.age = age;
}
@Override
public String toString(){
return "이름 : " + name + ", 나이 : " + age;
}
/* public String info(){
return "이름 : " + name + ", 나이 : " + age;
}*/
}
public class ToStringTest1 {
public static void main(String[] args) {
Person p1 = new Person("hong", 30);
String str = "!!!"+p1;
System.out.println(p1);
// println 자체가 문자열로 출력하는 것. 그렇기에 P만 있어도 p.toString을 의미하게 됨
// info()를 사용할 필요없이 toString()이 호출됨
}
}
1.5 clone()
: 객체 자신을 복제해서 새로운 객체를 생성하는 메서드
: Object 클래스에 정의된 clone() 메서드는 멤버변수의 값만을 복제
: 멤버변수가 배열인 경우, 그 내용도 복제하도록 오버라이딩 되어야 하며, Cloneable 인터페이스를 구현한 클래스의 인스턴스만 복제 가능
깃허브 링크 : https://github.com/Khjin06k/kostaJava/tree/main/src/day12
'Kosta 교육' 카테고리의 다른 글
[Day14~15 - JAVA] chap11. 컬렉션프레임워크 (1) | 2023.08.30 |
---|---|
[Day13 - JAVA] chap9. lang 패키지_2 (0) | 2023.08.29 |
[Day8 - JAVA] chap6. 객체지향언어1_2 (0) | 2023.08.28 |
[Day12] chap8. 예외처리 (0) | 2023.08.28 |
[Day7 - JAVA] chap6. 객체지향언어1_1 (0) | 2023.08.28 |