티스토리 뷰

자바의 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;
	}
}
반응형
LIST
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함