OOP의 개념(상속-Object 클래스)
Object Class는 자바의 모든 Class들이 기본적으로 상속하는 Class 이다.
만약 extends 키워드를 이용해 클래스를 상속받지 않았다면 컴파일러는 자동으로 Object 클래스를 상속받아 클래스를 생성한 것으로 처리한다.
앞의 예제를 javap 명령으로 확인하자…
자바의 모든 클래스는 Object 클래스의 하위 클래스이므로 Object 클래스의 모든 메소드를 사용할 수 있다. Object 클래스의 메소드는 클래스의 객체를 조작하기 위한 가장 기본적인 메소드만을 제공하는데 그 중 주요 메소드만을 소개하면 다음과 같다.
public java.lang.Class getClass()
현재 객체의 원형 클래스에 대한 정보를 자바의 Class 타입으로 반환하는 메소드이다. 두개의 객체가 동일 클래스의 객체인지 비교할 때 유용하다.
public boolean equals(Object obj)
현재 객체가 다른 객체(obj)와 내용이 동일한지를 비교하는 메소드이다. 이 메소드는 객체의 내부 필드와 메소드의 구조가 완전히 동일하고 또 필드에 설정되어 있는 값도 동일한지를 비교한다.
protected java.lang.Object clone()
객체를 완전히 복사할 때 사용하는 메소드이다. =의 경우는 참조하는 위치만 전달하지만 clone의 경우는 새로운 객체를 만들어 값까지 동일하게 복사한다.
public java.lang.String toString()
객체를 문자열의 형태로 변환하는 데 사용하는 메소드이다. 보통 객체를 대표할 수 있는 값을 문자열로 반환한다.
protected void finalize()
객체가 더이상 사용되지 않을 때 쓰레기 수집기에 의해 수행되는 메소드이다. 이 메소드는 객체가 사용한 파일이나 데이터베이스를 닫을 때 주로 사용된다.
Employee 클래스에 toString() 메소드를 추가하자.
public String toString() { return "직원의 이름은 " + name + "이다."; }
/* Example3.java */
class Example3 {
public static void main(String[] args) {
Employee e1 = new Manager("피구", "33333", "개발팀");
Employee e2 = new SalesEmployee("호나우두", "22222", "서울");
Employee e3 = e2;
System.out.println("e1.getClass : " +e1.getClass());
System.out.println("e2.getClass : " +e2.getClass());
if (e1.getClass() == e2.getClass()) {
System.out.println("e1과 e2는 같은 클래스의 객체입니다...");
}
if (e3.equals(e2)) { System.out.println("e3와 e2는 같은 값을 가지고 있는 객체"); }
//재정의된 toString
System.out.println("e1.toString : " + e1.toString());
System.out.println("e2.toString : " + e2.toString());
System.out.println("e3.toString : " + e3.toString());
}
}