자바에서는 모든 클래스의 부모클래스가 있습니다.
보통 클래스를 상속받는 경우 implments
를, 확장받는 경우는 extends
를 사용합니다.
클래스에서 아무런 상속을 받지 않는다면 최상위 부모클래스인 Object를 확장합니다.
Object 클래스를 상속받는 이유
Object 클래스에 있는 메서드를 통해 클래스의 기본적인 행동을 정의할 수 있습니다.
Object가 제공하는 메소드는 크게 두가지로 나뉩니다.
[객체를 처리하기 위한 메서드]
- clone : 객체의 복사본을 만들어 반환
- equals : 현재 객체와 매개변수로 넘겨받은 객체가 같은 지 확인
- finalize : 현재 객체가 더이상 쓸모 없어졌을 때 GC(가비지 컬렉터)에 의해 호출됨
- getClass : 현재 객체의 클래스를 반환
- hashCode : 객체에 대한 해시코드 값을 리턴
- toString : 객체를 문자열로 표횬한느 값을 리턴
[쓰레드를 위한 메서드]
- notify : 이 객체의 모니터에 대기하고 있는 단일 쓰레드를 깨움
- notifyAll : 이 객체의 모니터에 대기하고 있는 모든 쓰레드를 깨움
- wait : 다른 쓰레드가 현재 객체에 대한 notify 혹은 notifyAll 메서드를 호출할 때까지 현재 쓰레드 대기
toString()
toString()은 해당 클래스가 어떤 객체인지 쉽게 나타낼 수 있는 메서드 입니다.
해당 메서드의 경우 자동으로 호출 되는 경우는 다음과 같습니다.
- System.out.println() 메서드에 매개변수로 들어가는 경우
- 객체에 + 연산을 하는 경우
Object에 구현되어 있는 toString()의 형태는 다음과 같습니다.
Object가 기본으로 제공하는 toString()을 그대로 사용할 경우
class의 package.클래스이름@해시코드 값 이 출력됩니다.
보통 toString()의 경우 DTO와 같은 곳에서 값들을 편리하게 출력하기 위해 사용됩니다.
따라서 toString() 메서드를 오버라이딩 하여 재정의 하면 됩니다.
@Override
public String toString() {
return "This is class for ... ";
}
eqauls()
자바의 비교는 == 과 equals가 있습니다.
== 과 equals의 비교에 대해서는 다음 글에서 담아두었습니다.
https://tommykim.tistory.com/15
toString()과 마찬가지로 equals() 역시 메서드를 오버라이딩 하여 재정의 하면 됩니다.
hashCode()
hashCode()는 기본적으로 객체의 메모리 주소를 16진수로 리턴합니다.
hashCode()의 기본 규칙은 다음과 같습니다.
- 어플리케이션이 실행되는 동안 어떤 객체에 대해서 hashCode() 호출 시 동일한 int 를 리턴해야 한다.
- 어플리케이션이 실행될 때 마다 같은 값을 가질 필요는 없다.
- 두개의 객체에 대해 equals() 메서드의 결과가 true일 경우 두 객채의 hashCode()는 같아야 한다.
hashCode()의 경우 각종 제약들이 존재하므로 보통은 개발툴에서 자동으로 생성해 주는 기능을 사용합니다.
'Java' 카테고리의 다른 글
[Java] final 키워드 그리고 effectively final (0) | 2023.06.13 |
---|---|
[Java] Exception의 종류 및 처리 방법 (0) | 2023.06.12 |
[모던 자바 인 액션] 동작 파라미터화 (2) | 2023.05.10 |
오버로딩과 오버라이딩에 대해 (0) | 2023.05.01 |
Java Parameter Passing Mechanism (0) | 2023.04.26 |