가자미의 개발이야기
자바 Object 클래스 java.lang.Object 본문
a. Object 클래스
모든 클래스의 최고 조상
Object클래스의 멤버들은 모든 클래스에서 바로 사용가능
b. Object 클래스 메서드
메소드 명 | 설명 |
protected Object clone() | 객체 자신의 복사본을 반환 |
public boolean equals(Object obj) | 자신과 obj가 같은 객체인지 참거짓 |
protected void finalize() | 객체가 소멸될 때 가비지 콜렉터에 의해 자동적으로 호출(사용빈도 낮음) |
public Class getClass() | 객체의 정보를 담고 있는 Class 인스턴스 반환 |
public int hashCode() | 객체 자신의 해시코드 반환 |
public String toString() | 객체 자신의 정보를 문자열로 반환 |
public void notify() | 객체 자신을 사용하려고 기다리는 쓰레드를 하나만 깨움 |
public void notifyAll() | 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨움 |
public void wait() public void wait(long timeout) public void wait(long timeout, int nanos) |
다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히, 또는 지정된 시간(timeout, nanos) 동안 기다리게 함 |
1. finalize 메소드
Object 클래스에 정의되어 있는 finalize메소드는 인스턴스(힙) 소멸 시 자동 호출(자식에 오버라이딩 가능)
근데 힙이 가비지 콜렉터에 가득 차지 않으면 finalize메소드가 실행되지 않는다.(가비지콜렉션이 비워지지 않으므로)
protected void finalize() throws Throwable
오버라이딩 경우 메소드 내에 super.finalize();를 호출하고 다음에 내가 원하는 명령을 내리는게 안전하다.
2. equals 메소드
equals는 같은 참조값을 갖냐를 찾는다.(보통 ==를 통해 찾지만 오버라이딩을 해야 할 경우 equals메소드를 사용)
오버라이딩으로 같다 다르다의 기준을 다시 만들 수 있다!
실제로 String 클래스의 경우 내용을 비교하도록 equals 메소드가 오버라이딩 되어 있다.
3. clone 메소드
호출되면 인스턴스의 복사가 이뤄진다.
하지만 clone을 통해 복사를 하려면 해당 클래스를 Cloneable 인터페이스를 구현해야한다.
이때 Cloneable은 추상 메소드가 없는 마커 메소드이다.
protected Object clone() throws CloneNotSupportedException
이때 throw new RuntimeException(new MemoryException("메모리가 부족.."));(접근지시자는 오버라이딩으로 넓힐 순 있지만 좁힐 수는 없다. Object 클래스의 패키지와 해당 클래스의 패키지가 서로 다르기 때문에 바꿔줘야 된다.)
반환형도 해당 클래스와 동일하게 만들 수 있다.
4.Shallow Copy vs Deep Copy
얕은 복사는 그냥 인스턴스를 복사해서 복사된 인스턴스도 복사한 클래스 인스턴스가 참조하는 변수를 그대로 참조
(변수들은 복사하지 않음)
깊은 복사는 인스턴스 뿐만 아니라 변수까지 새로 복사해서 완전히 새로운 인스턴스를 만드는 것
(오버라이딩으로 클론 메소드를 변수까지 클론하도록해서 참조시키면 된다.)
'Java > 자바 기본 문법' 카테고리의 다른 글
자바 Arrays 클래스 (0) | 2021.01.20 |
---|---|
자바 래퍼클래스, Math 클래스, Number 클래스 (0) | 2021.01.20 |
자바 가상머신 (0) | 2021.01.11 |
자바의 예외처리 try catch, throw (0) | 2021.01.11 |
인터페이스에 쓰이는 문법과 추상 클래스 (0) | 2021.01.08 |