본문 바로가기
STUDY/JAVA

Object클래스

by NOTEEE 2018. 1. 22.

Object 클래스 

 - 모든클래스의 최상위 클래스.

 - 모든 클래스는 Object를 암시적으로 상속받고 있다.

 - 모든 클래스가 공통으로 포함하도 있어야하는 기능을 제공한다.


Object 클래스의 메소드

 - equals

 - toString

 - clone

 - finalize 등등.


class TEST {}
cs

위의 클래스는 아래의 클래스와 동일하다.

class TEST extends Object{}
cs

암시적으로 Object 클래스를 상속받고 있다.



toString()


toString() 메소드는 현재 객체의 문자열을 반환하는 메소드이다.

class Calculator{
    int left, right;
      
    public void setOprands(int left, int right){
        this.left = left;
        this.right = right;
    }
    public void sum(){
        System.out.println(this.left+this.right);
    }
      
    public void avg(){
        System.out.println((this.left+this.right)/2);
    }
    // Object 클래스의 toString을 오버라이딩 하고 있다. 
    public String toString(){
        return super.toString() + "left : " + this.left + ", right : "+ this.right;
        // return "left : " + this.left + ", right : "+ this.right;
    }
}
  
public class CalculatorDemo {
      
    public static void main(String[] args) {
          
        Calculator c1 = new Calculator();
        c1.setOprands(1020);
        System.out.println(c1);
        System.out.println(c1.toString());
    }
  
}
cs

- 오버라이딩을 함으로써 Object클래스의 toString을 호출하는게 아니라 Calcuator 클래스의 toString을 호출한다.

super.toString()을 씀으로서 Object 클래스의 toString을 호출한다.



equals()


equals()는 객체와 객체를 비교할 때 사용한다.


 - 객체간의 동일성을 비교하고 싶을 땐 ==를 사용하지말고 equals를 사용.

 - equals를 직접 구현해야 한다면 hashCode도 함께 구현.

class Student{
    String name;
    Student(String name){
        this.name = name;
    }
    public boolean equals(Object obj) {
        // 형변환
        Student _obj = (Student)obj;
        return name == _obj.name;
    }
}
 
class ObjectDemo {
 
    public static void main(String[] args) {
        Student s1 = new Student("egoing");
        Student s2 = new Student("egoing");
        System.out.println(s1 == s2);
        System.out.println(s1.equals(s2));
 
    }
 
}
cs



finalize()


 - finalize는 객체가 소멸될 때 호출되기로 약속된 메소드.

 - 가비지컬렉션가 수행될 때 호출되는 메소드

 - 가비지컬랙션 ? 

- 램을 효율적으로 사용하기 위해서 사용하지 않는 데이터를 램에서 제거할 수 있는 방법을 제공.

- 제한적으로 제공.(자동으로 해주기 때문)



clone()

- 어떤 객체가 있을 때 그 객체와 똑같은 객체를 복제해주는 기능.


예제를 보자

class Student implements Cloneable{
    String name;
    Student(String name){
        this.name = name;
    }
    protected Object clone() throws CloneNotSupportedException{
        return super.clone();
    }
}
 
class ObjectDemo {
 
    public static void main(String[] args) {
        Student s1 = new Student("egoing");
        try {
            Student s2 = (Student)s1.clone();
            System.out.println(s1.name);
            System.out.println(s2.name);
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
 
}
cs

 - Cloneable 인터페이스?

- 비어있는 인터페이스이다.

- 그럼에도 사용하는 이유는 클래스 Student가 복제 가능하다는 것을 표시하기 위한 것.

- Cloneable 인터페이스를 사용하지않고 clone를 호출하면 CloneNotSupportedException가 발생한다.

'STUDY > JAVA' 카테고리의 다른 글

람다표현식1  (0) 2018.01.22
InnerClass(내부클래스)  (0) 2018.01.22
예외처리 - 나만의 예외처리 만들기  (0) 2018.01.22
예외처리4  (0) 2018.01.22
예외처리3 예제  (0) 2018.01.22