java.lang.Object.toString 메소드
java 번역
버전: Java 1.8, Java 13
원문
다음 주석과 코드는 Java 1.8 의 Object 클래스에서 가져온 것이며, Java 13 의 Object 클래스를 확인해 보니 변경된 점이 없었다.
/**
* Returns a string representation of the object. In general, the
* {@code toString} method returns a string that
* "textually represents" this object. The result should
* be a concise but informative representation that is easy for a
* person to read.
* It is recommended that all subclasses override this method.
* <p>
* The {@code toString} method for class {@code Object}
* returns a string consisting of the name of the class of which the
* object is an instance, the at-sign character `{@code @}', and
* the unsigned hexadecimal representation of the hash code of the
* object. In other words, this method returns a string equal to the
* value of:
* <blockquote>
* <pre>
* getClass().getName() + '@' + Integer.toHexString(hashCode())
* </pre></blockquote>
*
* @return a string representation of the object.
*/
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
번역
객체의 String 표현형을 리턴합니다.
일반적으로, toString 메소드는 this 객체를 "텍스트로 표현"한 문자열을 리턴합니다. 결과는 간결하면서도 충분한 정보를 담고 있어야 하며, 사람이 읽기 쉬운 형태여야 합니다.
Object의 모든 서브클래스에 대해 이 메소드의 오버라이드를 권장합니다.
Object 클래스의 toString 메소드는 인스턴스 객체의 클래스 이름, '@'기호, 그리고 16진수로 표현된 객체의 해시 코드로 구성된 문자열을 리턴합니다. 즉, 이 메소드는 다음과 같은 문자열을 리턴합니다.
getClass().getName() + '@' + Integer.toHexString(hashCode())
- @return 객체를 문자열로 표현한 값
Effective Java - toString 메소드 재정의에 대한 조언들
Effective Java에서는 다음과 같은 규칙을 제안하고 있다.
- 규칙 10. toString은 항상 재정의하라 (2판)
- 아이템 12. toString을 항상 재정의하라 (3판)
그 외에도 세 가지의 실천적인 조언을 찾아볼 수 있었다.
- 가능하다면 toString 메소드는 객체 내의 중요 정보를 전부 담아 반환해야 한다.
- toString이 반환하는 문자열의 형식을 명시하건 그렇지 않건 간에, 어떤 의도인지는 문서에 분명하게 남겨야 한다.
- toString이 반환하는 문자열에 포함되는 정보들은 전부 프로그래밍을 통해서 가져올 수 있도록 하라.
- toString 반환값을 파싱해서 쓰는 일이 없도록 한다. toString 구현이 바뀌면 그런 코드는 다 못 쓰게 된다.
Project Lombok의 toString 메소드 자동 구현
Lombok의 @ToString
를 사용하면 equals
와 hashCode
메소드를 자동으로 만들어준다.
다음은 롬복 홈페이지에서 복사해 온 코드이다.
import lombok.ToString;
@ToString
public class ToStringExample {
private static final int STATIC_VAR = 10;
private String name;
private Shape shape = new Square(5, 10);
private String[] tags;
@ToString.Exclude private int id;
public String getName() {
return this.name;
}
@ToString(callSuper=true, includeFieldNames=true)
public static class Square extends Shape {
private final int width, height;
public Square(int width, int height) {
this.width = width;
this.height = height;
}
}
}
위와 같이 @ToString
어노테이션을 사용하면 다음과 같은 toString 메소드가 자동생성된다.
@Override public String toString() {
return
"Square(super=" + super.toString() +
", width=" + this.width +
", height=" + this.height +
")";
}
@Override public String toString() {
return
"ToStringExample(" + this.getName() +
", " + this.shape +
", " + Arrays.deepToString(this.tags) +
")";
}
Links
- @ToString - Lombok
참고문헌
- 이펙티브 자바 (2판) / 조슈아 블로크 저 / 이병준 역 / 인사이트(insight) / 초판 2쇄 2015년 07월 21일
- 이펙티브 자바 (3판) / 조슈아 블로크 저/개앞맵시 역 / 인사이트(insight) / 초판 2쇄 2018년 11월 21일