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(10, 20); 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 |