티스토리 뷰
자바의 Object 클래스란 ? 자바 API의 모든 클래스와 사용자가 정의한 모든 클래스의 최상위 클래스이다.
즉, 모든 자바 클래스들은 Object 클래스를 상속받는다.
ex ) class A extends B
A클래스는 B클래스를 상속받았으며, Object 클래스도 묵시적으로 상속받았다고 볼 수 있다.
* Object 클래스의 주요메소드
메소드 |
용도 |
boolean equals(object obj) |
두 개의 객체가 같은지 비교한다. 반환형은 boolean (true, false) |
String toString() |
현재 객체의 문자열을 반환한다. (오버라이딩을 사용하여 현재 객체의 초기화된 멤버변수를 알 수 있다.) |
Object clone() |
객체를 복사한다. |
Class getClass() |
객체의 클래스형을 반환한다.
|
void finalize() |
가비지 컬렉션 (GC) 직전에 객체의 리소스를 정리할 때 호출한다. |
int hashCode() |
객체의 해쉬코드값을 반환한다. |
Object 클래스에 해당하는 메소드는 더 많습니다.
이 외의 자세한 정보는 API를 확인 하시면 됩니다. Java Object API
이론을 배웠으면 실습을 통해 공부하겠습니다.
Object 클래스를 상속받은 toString(), equals() 메소드를 사용하는 메인 클래스 입니다.
public class ExampleObject{ public static void main(String[] args) { // 1) toString // 2) equals A a1 = new A(10); A a2 = new A(10); // a1을 대입할 경우 아래 if 문에서 true String str = a1.toString(); System.out.println(a1); System.out.println(str); // A == B -> A와 B가 같은가? -> A의 값과 B의 값이 같은가? if (a1 == a2) { System.out.println("a1과 a2가 같다."); } else if (a1.equals(a2)) { System.out.println("equals"); } else { System.out.println("a1과 a2가 다르다."); } Person p1 = new Person("A", 25, "0313"); Person p2 = new Person("A", 25, "0313"); // 동등 연산자 (==) 사용 if (p1 == p2) { System.out.println("같은 사람"); } else { System.out.println("다른 사람"); } // Object 클래스의 equals 사용 // p1을 기준으로 p2를 비교하겠다. // p2.equals(p1) => p2를 기준으로 p1을 비교 // Object 클래스에서는 기본적으로 equals 메소드를 동등 연산자와 동일하게 사용한다. // -> 메모리 주소값 비교 // Overring을 사용하여 메소드 재정의를 통해 멤버변수 값을 비교하여 같은 사람이 된다. if (p1.equals(p2)) { System.out.println("같은 사람"); } else { System.out.println("다른 사람"); } } }
Object 클래스로부터 상속받은 toString() 메소드를 오버라이딩한 A 클래스
public class A { // object클래스를 상속받고 있다. private int num; // public A(){ // System.out.println("A() 생성"); // } public A(int num) { this.num = num; } @Override public String toString() { String str = super.toString(); return "A [num=" + num + "]"+str; } }
A클래스를 상속받은 B클래스
public class B extends A { private int num2; // public B(){ // System.out.println("B() 생성"); // } // 부모클래스의 생성자에 매개변수가 있으면 // 자식클래스에서 부모클래스의 매개변수까지 // 받아내어 명시적으로 부모클래스의 인스턴스를 // 만들어 내야한다. public B(int num1, int num2) { // super()위에 어떠한 코드가 들어가게 되면 자식클래스 생성자가 먼저 생성되어야 하므로 Error발생! // super 키워드 위에 코드가 존재한다는 이야기는 // 부모클래스가 만들어지지도 않았는데 자식 클래스에서 // 무엇인가를 진행한다는 이야기이다. 따라서 suer키워드 위쪽 코드에는 // 어떠한 코드도 들어갈 수 없다. // 부모클래스의 생성자에 매개변수가 없다면 super키워드를 사용하지 않아도 된다. // System.out.println("Hello"); super(num1); // 부모클래스의 생성자 호출 } public void goo() { // A a= super(10); // B 클래스입장에서 기반으로 하는 클래스를 만드는 것. // A a1 = new A(10); // 새로운 객체를 만드는 것 } }
Object 클래스를 상속받아 toString() , equals() 메소드를 오버라이딩한 Person 클래스
public class Person { private String name; private int age; private String birthday; public Person(String name, int age, String birthday) { this.name = name; this.age = age; this.birthday = birthday; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", birthday=" + birthday + "]"; } @Override public boolean equals(Object obj) { Person temp = (Person) obj; boolean equals_condition = (this.age == temp.age) && (this.name.equals(temp.name)) && (this.birthday == temp.birthday); return equals_condition; } }
'프로그래밍 > Java' 카테고리의 다른 글
자바 ! 예외처리 ( Exception , try ~ catch ~ finally) (0) | 2017.05.08 |
---|---|
자바 ! 다형성 ( Polymorphism , Upcasting , Downcasting ) (0) | 2017.05.05 |
자바 ! 인터페이스 (interface) (0) | 2017.04.30 |
자바 ! 오버라이딩, 추상클래스 (overriding, abstract) (1) | 2017.04.26 |
자바 ! 생성자 오버로딩과 this 키워드 (0) | 2017.04.25 |