toString() 메서드는 왜 만들어졌을까?
객체를 문자열로 리턴하기 위해 사용한다고 알고 있던 toString() 메서드에 대해 의문이 생겨 이 글을 작성하게 되었다.
toString()의 반환 결과
Java에 모든 클래스들은 최상위 클래스 Object를 상속받는다. 따라서 Object의 정의된 메서드 또한 사용이 가능하다. toString() 메서드 또한 Object에 정의된 메서드 중 하나로 반환 형식은 다음과 같다.
getClass().getName() + '@' + Integer.toHexString(hashCode())
toString() 예시 코드
class Blog {
private Strintg name;
private int count;
}
package moon;
public class moon {
public static void main(String[] args) {
Blog blog = new Blog("Moonstar", 100);
System.out.println(blog);
System.out.println(blog.toString());
}
}
//결과
//Blog.moon@**********
//Blog.moon@**********
왜 두 개의 결괏값이 같은 것일까? 이것이 내가 가진 첫 번째 의문이었다. 이것의 이유는 생각보다 간단했다. 기본적으로 PrintStream에서 출력 관련 메서드를 통해 객체를 출력하면 내부적으로 toString()를 호출하기 때문에 결과적으로 같은 값이 출력되는 것이었다.
두 번째 의문은 객체를 문자열로 리턴하기 위해 사용하는 toString() 메서드의 결괏값이 눈으로 보기에 별 의미 없어 보였다는 것이다. 이것의 의문 또한 찾아보니 별 게 아니었다. 사용자의 용도에 맞게 각각 재정의해서 사용하면 되는 것이다.
재정의해서 사용하라 !
class Blog {
private Strintg name;
private int count;
public Blog(String name, Int count) } {
this.name = name;
this.count = count;
}
@Override
public String toString() {
return "블로그의 이름은 " + name + "," + "포스팅의 개수는" + count);
}
}
package moon;
public class moon {
public static void main(String[] args) {
Blog blog = new Blog("Moonstar", 100);
System.out.println(blog);
}
}
//결과
//블로그의 이름은 Moonstar, 포스팅의 개수는 100
💥참고
위와 같이 toString()의 대한 재정의를 하였다. 하지만 여럿이서 진행하는 프로젝트의 경우 toString()의 재정의를 하면 타 개발자가 의도파악을 하기 힘들기 때문에 재정의 후 메서드의 대한 주석을 반드시 달아주는 게 좋을 것이라고 생각한다.
'Languages > Java' 카테고리의 다른 글
[Java]SecureRandom 클래스를 이용한 임시 비밀번호 생성 방법 (0) | 2023.02.03 |
---|---|
[Java]Java 8 이후의 도입된 현재의 날짜 및 시간 가져오기 (8) | 2023.02.02 |
[Java]Map의 요소를 반복하는 다양한 방법 (5) | 2023.01.26 |
[Java]상속(Inheritance)과 super, super() 완벽 이해하기 (3) | 2023.01.19 |
[Java]삼항 연산자(조건 연산자)로 불필요한 IF 문 줄이기 (6) | 2023.01.18 |