본문 바로가기
Java

Object 클래스

by 개발자공부 2024. 4. 29.

Object 클래스

  Object 클래스는 모든 클래스의 최상위 클래스이다. 모든 클래스는 Object에서 상속받고, Object 클래스의 메서드 중 일부는 재정의해서 사용할 수 있다. 자바에서는 단일 상속만을 지원한다고 하였는데 Object 클래스를 제외한 단 하나의 상속만 받을 수 있다.

 

☞ Object 클래스는 java.lang 패키지 안에 존재한다.

☞ import java.lang.*; 프로그래밍시 import 하지 않아도 자동으로 된다.

☞ 많이 사용하는 기본 클래스들이 속한 패키지이며 String, lnteger, System... 등이 존재한다.

 

+) toString(), equals(), hashcode() 같은 메서드들이 존재한다. clone()은 조사할 때 사용하는데, 얕은 복사는 주소값만 복사하고 깊은 복사는 객체 자체를 복사한다.

 

Object 클래스의 메서드 활용

  Object 클래스의 메서드 중 일부는 재정의해서 사용할 수 있다. 재정의 할 수 없는 메서드는 final로 선언되어 있다.

 

■ toString()메서드

☞ 객체의 정보를 Stirng으로 바꾸어서 사용할 때 쓰인다.

☞ String이나 integer 클래스는 이미 재정의 되어 있다.

package useful;

import java.lang.*;

/**
 * Object 클래스는 모든 클래스의 최상위 클래스이다. 
 * import java.lang.*; 프로그래밍시 import 하지 않아도 자동으로 가지고 온다.
 * 자바는 단일 상속만 지원합니다. 단, Object 클래스를 제외하고!
 */
public final class Book extends Object {
	// field
	private String title;
	private String author;

	// Constructor
	public Book(String title, String author) {
		this.title = title;
		this.author = author;
	}

	// Object -> toString();
	@Override
	public String toString() {
		return "[" + title + "," + author + "]";
	}

	// 테스트 코드
	public static void main(String[] args) {
		Book book = new Book("데미안", "헤르만 헤세");
		System.out.println(book); // 원래 주소값이 나와야 하지만 toString을 이용해서 데이터가 나온다.
		
		System.out.println("----------------");
		
		String str1 = new String("안녕");
		System.out.println(str1);
	}
}

 

■ equals()메서드

  기본적인 동작은 두 인스턴스의 주소 값을 비교하여 true/false를 반환한다. 필요하다면 재정의하여 두 인스턴스가 논리적으로 동일함의 여부를 구현한다.

 

  예를 들어 '사피엔스' 책이 두 권있다고 가정해보자. 물리적으로 책은 2권이 존재하지만 논리적으로 같은 것이라고 정의할 수 있다. 즉 인스턴스가 다르더라도 논리적으로 동일한 경우 true를 반환하도록 재정의 할 수 있다.

package useful;

public class EBook {

	private int bookTypeId;
	private String title;
	private String author;

	public EBook(int bookTypeId, String title, String author) {
		this.bookTypeId = bookTypeId;
		this.title = title;
		this.author = author;
	}

	// Object 클래스에 있는 메서드를 재정의
	@Override
	public String toString() {
		return super.toString();
	}

	@Override
	public boolean equals(Object obj) {

		if (obj instanceof EBook) {
			// 1. EBook 클래스의 인스턴스가 맞다면
			EBook tbook = (EBook) obj;
			// 2. EBook 의 제목과 저자의 이름이 같다면 true를 반환 시켜라.
			if (this.title.equals(tbook.title)) {
				return true;
			} else {
				return false;
			}
		}
		return false;
	}

	// 코드 테스트
	public static void main(String[] args) {
		EBook book1 = new EBook(1, "홍길동전", "허균");
		EBook book2 = new EBook(1, "홍길동전", "허균");
		System.out.println("--------------------------------------------------");

		// 주소값 비교
		boolean result1 = book1 == book2;
		System.out.println("result : " + result1);

		// 제목 비교
		boolean result2 = book1.equals(book2);
		System.out.println("result2 : " + result2);
	}

}

'Java' 카테고리의 다른 글

Exception(예외처리)  (0) 2024.04.29
String, StringBuffer 클래스  (0) 2024.04.29
Interface (인터페이스)  (0) 2024.04.26
Abstract class (추상 클래스)  (0) 2024.04.26
Polymorphism(다형성) & Upcasting+Downcasting  (0) 2024.04.26