Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- MySQL
- 카카오클라우드스쿨2기
- LeNet
- Java
- 머신러닝(딥러닝)
- 데이터베이서
- 데이터베이스 개론
- 생활코딩
- tensorflow
- Python
- 머신러닝
- 생활코딩 머신러닝야학
- 파이썬
- 개발자
- CNN
- 연산자
- flatten
- 딥러닝
- 판다스
- 이것이 자바다
- 머신러닝야학
- 야학
- 생활코딩 데이터베이스
- JavaScript
- 데이터베이스
- pandas
- reshape
- Database
Archives
- Today
- Total
IT's 우
[Java] Object 클래스 본문
728x90
[Java] Object 클래스
Java의 최상위 클래스 = Object 클래스
따라서 자바의 모든 클래스는 Object 클래스의 모든 메소드를 바로 사용할 수 있다.
이러한 Object 클래스는 필드를 가지지 않으며, 총 11개의 메소드만으로 구성되어 있다.
Object Class가 갖고있는 메서드
메서드들은 기본적으로 각 API 클래스마다 자체적으로 오버라이딩을 통해 재정의되어 있다.
- toString()
- 해당 인스턴스에 대한 정보를 문자열로 반환
- 이때 반한되는 문자열은 클래스 이름과 함께 구분자로 '@'가 사용되며, 그 뒤로 16진수 해시 코드(hash code)가 추가된다.
- 16진수 해시 코드 값은 인스턴스의 주소를 가리키는 값으로, 인스턴스마다 모두 다르게 반환된다.
Car car01 = new Car(); Car car02 = new Car(); System.out.println(car01.toString()); System.out.println(car02.toString());
- 실행 결과
- Car@15db9742
- Car@6d06d69c
- hashCode()
- 해당 객체의 해시 코드 값을 반환
wait(), notify(), notifyAll()을 무한 스레드의 cpu 점유율을 줄이기 위해 사용하게 되었다.
- wait()
- 갖고 있던 고유 lock 해제, Thread를 잠들게 함
- 해당 객체의 다른 스레드가 notify()나 notifyAll() 메소드를 실행할 때까지 현재 스레드를 일시적으로 대기(wait)시킬 때 호출함.
- wait(long timeout)
- 해당 객체의 다른 스레드가 notify()나 notifyAll() 메소드를 실행하거나 전달받은 시간이 지날 때까지 현재 스레드를 일시적으로 대기(wait)시킬 때 호출함.
- void wait(long timeout, int nanos)
- 해당 객체의 다른 스레드가 notify()나 notifyAll() 메소드를 실행하거나 전달받은 시간이 지나거나 다른 스레드가 현재 스레드를 인터럽트(interrupt) 할 때까지 현재 스레드를 일시적으로 대기(wait)시킬 때 호출함.
- notify()
- 잠들던 Thread 중 임의의 하나를 깨움
- notifyAll()
- 잠들어 있던 Thread를 모두 깨움
wait, notify, notifyAll: 호출하는 스레드가 반드시 고유 락을 갖고 있어야 함.
- Synchronized 블록 내에서 실행되어야 함.
- synchronized(thread)
{
thread.wait();
} - synchronized() 내의 객체와 wait나 notify 함수를 호출하는 객체는 같아야 한다.
- 고유 락을 획득하지 않은 상태에서 위 메서드들 중 하나를 호출하면
- IllegalMonirotStateException 발생
- equals()
- 해당 인스턴스를 매개변수로 전달받는 참조 변수와 비교하여, 그 결과를 반환.
- 이때 참조 변수가 가리키는 값을 비교하므로, 서로 다른 두 객체는 언제나 false를 반환하게 된다.
Car car01 = new Car(); Car car02 = new Car(); System.out.println(car01.equals(car02)); car01 = car02; // 두 참조 변수가 같은 주소를 가리킴. System.out.println(car01.equals(car02));
- 실행 결과
- false
- true
- clone()
- 해당 인스턴스를 복제하여, 새로운 인스턴스를 생성해 반환
- 하지만 Object 클래스의 clone() 메소드는 단지 필드의 값만을 복사하므로, 필드의 값이 배열이나 인스턴스면 제대로 복제할 수 없다.
- 따라서 이러한 경우에는 해당 클래스에서 clone() 메소드를 오버라이딩하여, 복제가 제대로 이루어지도록 재정의해야 한다.
- 배열이나 인스턴스인 필드는 복제되는 것이 아닌 해당 배열이나 인스턴스를 가리키는 주소값만이 복제
- getClass()
- 해당 객체의 클래스 타입을 반환
- finalize()
- 해당 객체를 더는 아무도 참조하지 않아 가비지 컬렉터가 객체의 리소스를 정리하기 위해 호출함.
- 자동으로 실행되는 해당 메서드를 사용자가 원할 경우 직접 오버라이딩하여 사용
package Finalize;
public class check {
private int checkNum;
public check(int checkNum) {
this.checkNum =checkNum;
}
@Override
protected void finalize() throws Throwable {
System.out.println(checkNum + "에 있는 finalize()실행");
}
}
[참고자료]
728x90
반응형
'CS > Java' 카테고리의 다른 글
[java] 추상 클래스와 인터페이스 차이 (0) | 2023.07.14 |
---|---|
[java] final vs finally vs finalize (0) | 2023.06.30 |
[Java] == 와 equals 차이 (1) | 2023.06.15 |
[Java] String vs Char 차이 (1) | 2023.06.15 |
[Java]문자열 클래스 (0) | 2023.06.01 |