본문 바로가기
Back/JAVA

오브젝트 클래스 (Object Class)

by 시월해 2021. 3. 16.

* Object 클래스


 1. java의 모든 클래스의 조상 클래스이다.
    ==> java의 가장 최상위 조상 클래스
 2. 사용자가 정의한 클래스에 자동으로 상속됨.
    ==> 단, extends 키워드를 사용하지 않은 클래스만 상속이 됨.


     
 * [Object 클래스의 주요 메서드]


  - toString() :

    1) 객체 자신의 정보를 문자열로 반환.
    2) 인스턴스에 대한 정보를 문자열로 제공할 목적으로 사용됨.toString() 메서드 재정의
    3) Object 클래스에서 상속 받은 메서드를 유용한 정보가 반환이 되도록 재정의.
    4) 해당 클래스의 멤버 변수가 정보를 가지고 있는데 가지고 있는 데이터가 올바른 값이 담겼는지 혹은 틀리게 담겨져 있는지 확인하고 싶은 경우에 toString() 메서드를 재정의하여 값을 확인할 수 있음.

    5) 사용자가 임의로 output() 메서드를 사용하는 것보다 toString()을 사용하는 게 안전하고 좋음.


  - getClass() : - 객체 자신의 클래스 정보를 담고 있는 Class 인스턴스를 반환함.


  - hashCode() : - 객체 자신의 해쉬코드를 반환함.


  - equals()   : - 객체 자신과 또 다른 객체가 같은 객체인지 알려주는 메서드(boolean)


  - clone()    : - 객체 자신의 복사본을 반환함.


예제1) Object 주요 메서드

 

public class Ex01 { // extends Object 생략

	public static void main(String[] args) {
		
		Ex01 ex01 = new Ex01();
		Ex01 ex02 = new Ex01();
		
		System.out.println("toString() >>> " + ex01.toString());
		System.out.println("getClass() >>> " + ex01.getClass());
		System.out.println("hashCode() >>> " + ex01.hashCode());
		
		if(ex01 == ex02) {
			System.out.println("같다.");
		} else {
			System.out.println("다르다");
		}
	}

}

new로 ex01과 ex02를 생성했기 때문에 주소값이 다르다.


예제2) toString() 메서드 재정의

class Student { // extends Object 가 생략
	
	String name;
	int hakbun;
	
	public Student() { } // 기본 생성자.
	
	public Student(String name, int hakbun) {
		this.name = name;
		this.hakbun = hakbun;
	}
	
	// 학생 정보 확인 메서드
	// void getStudentInfo() {
	// 	System.out.println("학생 이름 : " + name);
	// 	System.out.println("학생 학번 : " + hakbun);
	// }
	
	@Override
		public String toString() {
			return "학생 이름 : "+name+", 학생 학번 : "+hakbun;
		}
	
}

public class Ex02 {

	public static void main(String[] args) {
		
		Student student = new Student("홍길동", 2021031601);
		//student.getStudentInfo(); // 학생 정보 확인 메서드 호출

		// 생성자를 이용해 멤버변수에 넣어놓은 데이터가 올바르게 들어가 있는지 확인하기 위한 메서드
		System.out.println(student.toString());
	}

}

결과


예제3) Object 자료형으로 변수 선언하기

public class Ex03 {

	public static void main(String[] args) {
		
		// String 배열 객체 생성
		String[] str = new String[4];
		str[0] = "홍길동";
		str[1] = "서울시 마포구";
		str[2] = "hong";
		//str[3] = 150; // error 발생 ==> 자료형 불일치
		str[3] = "1234";
		
		for(String k : str) {
			System.out.println("str 배열 요소 >>> " + k);
		}
		System.out.println();
		
		// Object 배열 객체 생성
		Object[] obj = new Object[4];
		obj[0] = "이순신";  // 문자열(String) 자료형
		obj[1] = 130;     // 정수(int) 자료형
		obj[2] = true;    // boolean 자료형
		obj[3] = 3.14;    // 실수(double) 자료형
		
		for(Object k : obj) {
			System.out.println("obj 배열 요소 >>> " + k);
		}
		System.out.println();

	}

}

object 변수는 무슨 형태의 자료든 담을 수 있는 변수다. 하지만 사용하면 프로그램의 성능이 떨어진다는 단점이 있다.