java

Object 클래스

컴공 윤서혜 학습일기 2019. 4. 22. 15:36

자바에서는 클래스를 정의할 때 명시적으로 부모 클래스를 선언하지 않으면 Object클래스가 부모 클래스가 된다. Object클래스는 java.lang 패키지에 들어 있으며 자바 클래스 계층 구조에서 맨 위에 위치하는 클래스이다.

 

  • public boolean equals(Object obj) : obj가 이 객체와 같은지를 나타낸다.
  • public String toString() : 객체의 문자열 표현을 반환한다.
  • public Object clone() : 객체 자신의 복사본을 생성하여 반환한다.
  • public int hashCode() : 객체에 대한 해쉬코드를 반환한다.
  • protected void finalize() : 가비지 콜랙터에 의하여 호출된다.
  • public final Class getClass() : 객체의 실행 클래스 정보를 반환한다.

 

getClass() 메소드

getClass()는 객체가 어떤 클래스로 생성되었는지에 대한 정보를 반환한다. 즉 리플렉션(reflection)이라는 기법을 구현한 것이다. 리플렉션은 객체 자신에 대하여 질문을 던질수 있는 기법이다. 경우에 따라서 객체가 자신에 대하여 질문을 던져야 하는 경우도 있다. 특히 안드로이드 프로그래밍에서는 종종 사용된다.

class Car{  }
public class CarTest{
  public static void main(String[] args){
     Car obj = new Car();
     System.out.println("obj is of type "+ obj.getClass().getName());
     System.out.println("obj의 해쉬코드 = "+obj.hashCode());
     }
  }
실행결과

obj is of type Car

obj의 해쉬코드 = 5592464

 

toString() 메소드

Object 클래스의 toString() 메소드는 객체의 정보를 요약하여 문자열로 반환하는 함수이다. 우리가 println()을 사용하여 객체를 출력하면 객체의 toString() 메소드가 자동으로 호출된다. 따라서 toString() 메소드는 반드시 재정의하여야 할 필요가 있다. 아래 코드에서 원을 나타내는 클래스에 toString()을 재정의하여서 사용해 보았다.

class Circle{
   int radius;
   public Circle(int radius){
   this.radius = radius;
   }
   public String toString(){
     return "Circle(r="+radius+")";
     }
     
  }
  public class CircleTest{
    public static void main(String[] args){
      Circle obj1 = new Circle(10);
      CIrcle obj2 = new Circle(20);
      System.out.println(obj1);
      System.out.println(obj2);
      }
 }
실행결과

Circle(r=10)

Circle(r=20)

 

equals() 메소드

우리가 자바 프로그램을 작성하다보면 객체가 동일한 값을 가지고 있는지 비교할 때가 종종 있다. 예를 들어서 객체가 가지고 있는 내용이 일치하는지 비교하기 위하여 == 연산자를 사용하면 잘못된 결과를 얻게 된다.  String 클래스에서 equals() 메소드를 재정의하였기 때문에 올바르게 비교하는 것이다. 만약 equals() 메소드가 재정의되지 않았다면 equals()도 ==를 사용한다. 우리가 작성한 객체가 동일한 정보를 가지고 있는가를 검사하기 위해서는, equals() 메소드를 재정의하여야 한다. 예를 들어서 2개의 Circle 객체가 동일한 반지름을 가진 원인지를 검사하기 위해서는 다음과 같이 equals()를 재정의하여야 한다.

class Circle{
  int radius;
  public Circle(int radius){
  this.radius = radius;
  }
  public boolean equals(Circle c1){
     if(radius == c1.radius) return true;
     else return false;
     }
     
}
public class CircleTest{
   public static void main(String[] args){
       Circle obj1 = new Circle(10);
       Circle obj2 = new Circle(10);
       if(obj1.equals(obj2)){
       System.out.println("2개의 원은 같습니다.");
       }
       
       else{
       System.out.println("2개의 원은 같지 않습니다.");
       }
  }
실행결과
2개의 원은 같습니다.

 

 

finalize() 메소드

Object 클래스는 finalize()라는 콜백(callback) 메소드를 정의한다. 이것이 객체가 소멸되기 직전에 호출된다. Object 클래스의 finalize()에서는 아무것도 하지 않지만 서브 클래스에서 재정의하여 자원을 반납하는 등의 정리 과정을 실행할 수 있다.

'java' 카테고리의 다른 글

오버로딩 정리해주세요  (0) 2019.04.23
Wrapper 클래스  (0) 2019.04.22
자바 패키지란?  (0) 2019.04.22
자바 오버라이딩  (0) 2019.04.11
(자바)상속 cf.호출  (2) 2019.04.11