Java

[Java] Object란 무엇인가요?

Tommy__Kim 2023. 6. 2. 19:27

자바에서는 모든 클래스의 부모클래스가 있습니다.

보통 클래스를 상속받는 경우 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

 

==와 equals()는 어떠한 차이점을 가질까?

그동안 Spring을 사용해 개발하면서 == 과 equals()의 큰 차이점을 모르는 채로 equals() 만 사용을 해왔습니다. 이 부분에 대해 정확히 개념을 잡아보려고 합니다. String 변수 생성 String 변수를 생성하

tommykim.tistory.com

toString()과 마찬가지로 equals() 역시 메서드를 오버라이딩 하여 재정의 하면 됩니다. 

hashCode()

hashCode()는 기본적으로 객체의 메모리 주소를 16진수로 리턴합니다.

hashCode()의 기본 규칙은 다음과 같습니다. 

  • 어플리케이션이 실행되는 동안 어떤 객체에 대해서 hashCode() 호출 시 동일한 int 를 리턴해야 한다.
    • 어플리케이션이 실행될 때 마다 같은 값을 가질 필요는 없다.
  • 두개의 객체에 대해 equals() 메서드의 결과가 true일 경우 두 객채의 hashCode()는 같아야 한다.

hashCode()의 경우 각종 제약들이 존재하므로 보통은 개발툴에서 자동으로 생성해 주는 기능을 사용합니다.