[JAVA] Object 클래스

2024. 9. 2. 19:11·Back-End/Java

[작성일: 2023. 02. 02]

 

 

Object 클래스

  • 모든 클래스의 최고 조상
  • 오직 11개의 메서드만을 가지고 있음.
  • notify(), wati() 등은 스레드와 관련된 메서드.
  • protected는 오버라이딩 해서 public으로 변경해야 사용할 수 있음.

 

object 클래스의 메서드 설명
protected Object clone() 객체 자신의 복사본을 반환
public boolean equals(Object obj) 객체 자신과 객체 obj가 같은 객체인지 알려줌.(같으면 true)
protected void finalize() 객체가 소멸될 때 가비지 컬렉터에 의해 자동적으로 호출 됨.
이때 수행되어야 하는 코드가 있을 때 오버라이딩 함. (거의 사용x)
pulbic Class getClass() 객체 자신의 클래스 정보(설계도 정보)를 담고 있는 Class 인스턴스 반환
public int hashCod() 객체 자신의 해시코드를 반환
public String toString() 객체 자신의 정보를 문자열로 반환
public void notify() 객체 자신을 사용하려고 기다리는 쓰레드 하나를 깨움
public void notibyAll() 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨움
public void wait()
public void wait(long timeout)
public void wait(long timeout, int nanos)
다른 쓰레드가 notify()나 notifyAll()을 호출할 때까지 현재 쓰레드를 무한히 또는 지정된 시간(timeout, nanos) 동안 기다리게 함.
imeout은 천 분의 1초, nanos는 10⁹분의 1초

 

 

 

 

 

equals(Object obj)

  • 객체 자신(this)과 주어진 객체(obj)를 비교해서 같으면 true, 다르면 false 반환
  • Object 클래스의 equals()는 객체의 주소를 비교(참조변수 값 비교)
class Ex9_1 {
  public static void main(String[] args) {
    Value v1 = new Value(10);
    Value v2 = new Value(10);
    
    if(v1.equlas(v2))
      System.out.println("v1과 v2는 같습니다."); 
    else
      System.out.println("v1과 v2는 다릅니다."); 
   } // main
}

class Value {
  int value;
  
  Value(int value) {
    this.value = value;
  }
  
  // Object의 equals()를 오버라이딩해서 주소가 아닌 value를 비교하게 함.
  public boolean equals(Object obj) {
    if(!(obj instanceof Value)) return false;
    
    Value v = (Value)obj; // obj를 value로 형변환 해줘야 함.
    return this.value == v.value;
  }
}

 

 

 

equals(Object obj)의 오버라이딩

  • 인스턴스 변수(iv)의 값을 비교하도록 equals()를 오버라이딩 해야 함. (cv는 객체마다 공통이라서)
class Person {
  long id;
  
  public boolean equals(Object obj) {
    if(obj instanceof Person)
      return id == ((Person)obj).id; 
      // obj가 Object 타입이므로 id값을 참조하기 위해서 Person 타입으로 형변환 해야 함.
    else
      return false; 
      // 타입이 Person이 아니면 값을 비교할 필요 없음.
  }
  
  Person(long id) {
    this.id = id;
  }
}

 

 

 

 

 

hashCode()

  • 객체의 해시코드(hash code)를 반환하는 메서드
  • Object 클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환
  • 객체의 주소를 가지고 만들기 때문에 객체마다 다른 값을 가지고 있음.
  • equals()를 오버라이딩 하면, hashCode()도 오버라이딩 해야 함. ➡️ equals()의 결과가 true인 두 객체의 해시코드는 같아야 하기 때문
  • System.iedntityHashCode(Object obj)는 Object클래스의 hashCode()와 동일함.
public class Object {
  ...
  public native int hashCode(); // 내용 없음
  // native 메서드 : OS의 메서드(C언어)
  
  
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1.equals(str2)); // true
System.out.println(str1.hashCode());  // 96354
System.out.println(str2.hashCode());  // 96354


// 객체마다 다른 해시코드 반환
System.out.println(System.iendtyHashCode(str1)); // 3526198
System.out.println(System.iendtyHashCode(str2)); // 7699183

 

 

 

 

 

toString(), toString()의 오버라이딩

  • toString(): 객체를 문자열(String)로 변환하기 위한 메서드
public String toString() { // Object 클래스의 toString()을 오버라이딩
  return getClass().getName() + "@" + Integer.toHexString(hashCode());
  // 객체주소 값(해시코드)을 설계도객체.클래스이름+@(위치)+16진수 문자열로 바꿔서 출력
}

 

 

 

 

 

 

 

 

 

 


🐣 해당 게시글은 자바의 정석(남궁성 님) 영상으로 함께 공부하며 요약/정리한 글입니다.
🐣 입문 개발자가 작성한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지 (새창열림)
'Back-End/Java' 카테고리의 다른 글
  • [JAVA] StringBuffer
  • [JAVA] java.lang패키지의 유용한 클래스
  • [JAVA] 내부 클래스
  • [JAVA] 예외처리
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    자바스크립트
    데이터베이스
    HTTP
    김영한
    MVC
    다형성
    Spring Security
    생성자
    Swift
    자바
    알고리즘
    DB
    sql
    html
    Java
    성능최적화
    javascript
    JPA
    변수
    객체
    spring
    백준
    Security
    스프링
    의존성주입
    Database
    jsp
    최주호
    프로그래머스
    게시판만들기
  • hELLO· Designed By정상우.v4.10.0
뚜비
[JAVA] Object 클래스
상단으로

티스토리툴바