본문 바로가기
✨ Java/상속(Inheritance)

자바(JAVA) - toString( )과 Object클래스

by 환풍 2023. 2. 13.
728x90

toString( ) 과 Object 클래스에 대해서 공부하며 추가적으로 몇가지 알아보았다.


Object 클래스는 모든 클래스의 최상위 클래스로 모든 클래스는 Object 클래스를 상속받는다.

따라서, 당연히 toString( ) 메소드 또한 Object의 상속을 받아 사용된다.

 

ToStringTest.class

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
public class ToStringTest {
    private String name;
    private int age;
    private String address;
    private String tell;
    private String email;
 
    public void showInfo(){
        System.out.println("이름 : " + name);
        System.out.println("나이 : " + age);
        System.out.println("주소 : " + address);
        System.out.println("연락처 : " + tell);
        System.out.println("이메일 : " + email);
    }
 
    // @ <- 이거를 anotation 어노테이션 이라고 한다. 
    // 어노테이션은 개발자의 실수를 미연에 방지해주는 기능이다.
    // 오버라이딩 문법이 맞는지 검사한다.
    @Override
    public String toString() {
        return "ToStringTest{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                ", tell='" + tell + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}
 
cs

 

 

toString( ) 메소드 생성하는 방법

위 그림과 같이 클래스 변수들을 생성한 후 toString을 생성시키면 자동으로 변수들이 체크되며 만들 수 있다.

값으로 출력될 때 String과 int 각각 빈 공간이면 null과 0을 출력한다.

 

ObjectTest2.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ObjectTest2 {
    public static void main(String[] args) {
 
        ToStringTest t1 = new ToStringTest();
 
        String result1 = t1.toString();
        System.out.println(result1);
 
        System.out.println(t1.toString());
        // 객체명을 출력하면 자동으로 객체명 뒤에 
        // .toString() 이 붙어서 실행된다.
        System.out.println(t1);
    }
}
 
cs

ObjectTest2 클래스로 t1 객체를 생성해 3번의 출력을 해주었다.위 출력문은 모두 같게 나오게 되었고, 조금은(?) 보기 불편한 형태로 나왔다.

toString( ) 메소드를 그럼 왜쓸까?

장점

  1. 사용하기 편리하다.
  2. 디버깅이 쉽다
  3. 객체를 출력하기만 해도 객체가 가지고 있는 모든 정보를 확인할 수 있다.
  4. 개발자가 직접 호출하지 않아도, 로깅을 하거나 에러메시지를 출력할 때 유용하게 사용 가능하다.

Object 클래스에 대해서 더 깊이 알아보자.

위의 첫 문장에서 Object클래스는 모든 클래스의 부모라고 말하였다.

 

Object1.class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Object1 {
 
    private String name;
    private int age;
 
    public void aaa(){
        System.out.println("메소드 실행");
 
    }
 
    @Override
    public String toString() {
        return "이름 : " + name + ",  나이 : " + age;
    }
}
cs

 

ObjectTest1.class

1
2
3
4
5
6
7
8
9
10
public class ObjectTest1 {
    public static void main(String[] args) {
 
        Object1 o1 = new Object1();
        o1.aaa();
 
        String result1 = o1.toString();
        System.out.println(result1);   
    }
}
cs

Obejct1 클래스에서 상속받은 aaa( )메소드를 출력한다.

o1.toString( ) 메소드는 이렇게 말하고 있다.

" 클래스 니가 만들었잖아? 그러니까 클래스에 대한 정보를 출력하는 메소드로 내가 toString( ) 메소드를 만들었어. toString( ) 메소드는 내가 제공해줄테니까 니가 알아서 toString( ) 메소드를 오버라이딩해서 정보를 문자열로 원하는대로 표현해봐 ^^ "


따라서 마지막 출력문은 object1 클래스가 가지고 있는 toString( ) 값인 공간이 출력하게된다.

반응형

댓글