Object 클래스
- 상속받지않으면 자동으로
Object
클래스 상속(모든 클래스의 부모)
toString 메소드
System.out
을 이용한 출력 디버깅- 재정의안해도 호출은가능하지만 유용하지않음
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
equals 메소드
- 두객체 내부 상태 비교할때 사용
Object
클래스 의equals
는 주소검사(같은 객체를 가리키는지검사)
@Override
public boolean equals(Object obj) {
if (this == obj) return true; // 자기 자신과 비교
if (obj == null || getClass() != obj.getClass()) return false; // null 또는 다른 클래스는 비교할 수 없음
Person person = (Person) obj; // 강제 형변환
return age == person.age && name.equals(person.name); // name과 age 값 비교
}
- Objects.equals(a, b)
- 두 인자가 모두 null이면 true
- 두 인자 중 하나만 null이면 false
- 두 인자 모두 null이 아니면 a.equals(b) 호출
instanceof VS. getClass()
instanceof
는 객체가 특정 클래스의 인스턴스인지, 또는 특정 인터페이스를 구현한 객체인지를 확인하는 연산자getClass()
는 정확한 클래스를 확인할 때 사용(상속 관계를 고려X)
if (obj.getClass() == ClassName.class) {
// obj의 클래스가 정확히 ClassName일 때 실행
}
hashCode
- 해싱 기술을 이용하는 자료구조에서 활용
- 해시 함수를 이용하여 데이터를 저장할 위치를 결정함
x.equals(y)
가true
이면x.hashCode() == y.hashCode()
역시true
이어야 함
public int hashCode() {
return Objects.hash(a, b, c);
}
public int hashCode() {
return Objects.hash(a, b, Arrays.hashCode(c));//c는 배열
}
clone
Object
에 정의되어 있는clone
메소드를 재정의하여 객체를 복제- 생성자 호출 없이 새 객체를 생성
Object
의clone
메소드는 얕은 복사public
접근권한- 만약 부모가 구현하고 있으면
Cloneable interface
추가 불필요(이미 부모한테 상속받음) final
멤버 변수는 일반적인 방법으로 깊은 복사가 가능하지 않음
public class A implements Cloneable {
private int n; // 기본 타입 필드
private B b; // 참조 타입 필드 (B 객체)
// A 클래스의 clone 메소드 오버라이드
public A clone() {
A cloned = null;
try {
cloned = (A) super.clone(); // 얕은 복사 수행
cloned.b = b.clone(); // B 객체를 깊은 복사
return cloned; // 복사된 객체 반환
} catch (CloneNotSupportedException e) {
// CloneNotSupportedException 예외 처리 (예외가 발생하면 null 반환)
e.printStackTrace();
}
return cloned; // 예외 발생 시 null 반환
}
}
public A clone() throws CloneNotSupportedException {
A cloned = (A) super.clone(); // 얕은 복사: 부모 클래스의 clone() 호출
cloned.b = b.clone(); // b 필드를 깊은 복사
return cloned; // 복사된 객체 반환
}
복사 생성자(copy constructor)
- 멤버 변수가 많으면 코드가 길어짐
// 복사 생성자
public MyClass(MyClass other) {
this.value = other.value; // 얕은 복사: 기본 타입
this.data = new SomeType(other.data); // 깊은 복사: 참조 타입
}
Class 클래스
getName
: 클래스이름 반환getSuperclass()
: 클래스의 슈퍼클래스반환
'Language > JAVA' 카테고리의 다른 글
[Java] 범용프로그래밍 (0) | 2024.12.03 |
---|---|
[Java]쓰레드, 레코드 (0) | 2024.12.03 |
[Java] 내부 클래스, 중첩클래스 (0) | 2024.12.03 |