Java Object 클래스

강서진·2023년 11월 15일
0

Java

목록 보기
15/35
post-custom-banner

강좌 Course 1. Part 4. ch6 요약

Object 클래스를 이용한 객체 생성

Object는 자바에서 가장 처음에 만들어진 최상위클래스로, 모든 클래스들은 Object 클래스를 상속한다. Object를 사용하면 모든 클래스 객체를 생성할 수 있다.

import java.lang.*; // 일반적으로 생략되어 있음
	public class A extends Object{ // extends Object 생략
    	public A(){
        	super(); // 기본생성자 메서드 생략되어 있음
            }
        }
    }
    
// Object 클래스로 A 객체 생성하기
public class ObjectTest {
    public static void main(String[] args) {
        Object obj = new A(); // 업캐스팅
        ((A)obj).display(); // 다운캐스팅
    }
}

Object 클래스를 활용한 다형성 적용

다형성 인수

다형성 인수로 Object를 받을 수 있다. Object 타입으로 업캐스팅되면 반드시 다운캐스팅을 하게 되어 있다.

// A 클래스
public class A {
    public void printGo(){
        System.out.println("AAA");
        }
}

// B 클래스
public class B {
    public void printGo(){
        System.out.println("BBB");
    }
}

타입별로 printGo()를 호출하려는 메서드를 만들면 코드가 반복되니, 이때 다형성 인수를 받도록 수정할 수 있다.

public static void display(Object obj){
    if (obj instanceof A){
        ((A)obj).printGo();
    } else {
        ((B)obj).printGo();
    }
}

다형성 배열

Object[] 을 생성하여 A타입, B타입을 저장할 수 있다. 이때 업캐스팅을 사용하며, A나 B의 메서드를 호출하려면 다운캐스팅을 해주어야 한다.

public class ObjectArrayTest {
    public static void main(String[] args) {
        Object[] obj = new Object[2]; // 다형성 배열
        obj[0] = new A(); // upcasting
        obj[1] = new B(); // upcasting

        // A나 B의 메서드를 호출하려면 downcasting
        for(int i=0;i<obj.length;i++){
            if (obj[i] instanceof A){
                ((A)obj[i]).printGo();
            } else {
                ((B)obj[1]).printGo();
            }
        }
    }
}

Object 클래스의 toString()

기본적으로 클래스를 생성하면 toString()이라는 메서드가 함께 생성된다. 이 toString()은 원래 Object가 가지고 있는 메서드로, 객체의 메모리 번지를 문자열로 출력해준다.
메모리번지 말고 객체의 정보를 출력하게끔 만들고 싶으면 재정의해주면 된다.
* toString()을 생략하고 그냥 객체만 프린트해도 같은 메모리 번지가 출력된다.

public class Board extends Object{
    private String title;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String toString(){
        return title;
    }
}

toString()은 재정의하여 사용하는 것이 일반적이다.
Object를 상속한 다른 API들도 toString()을 재정의해두었기 때문에, 기본 toString()을 쓰는 경우는 드물다.
만약 재정의하는 동시에 Object의 toString()을 쓰고싶다면, toString()의 오버라이드 블록 첫줄에

super.toString();

을 쓰면 상위클래스의 toString()이 호출된 다음 재정의된 내용을 실행하게 된다.
* 이때 super.toString()으로 나온 메모리 번지는 Object가 아닌 현재 메모리 객체의 번지이다.

post-custom-banner

0개의 댓글