본문 바로가기
프로그래밍 놀이터/디자인 패턴, 리펙토링

[Design Pattern/Java] toString 메소드는 항상 오버라이드 하자.

by 돼지왕 왕돼지 2012. 3. 12.
반응형


안녕하세요 돼지왕 왕돼지입니다.

오늘은 "toString 메소드는 항상 오버라이드 하자" 를 주제로 이야기 해보겠습니다.

이 글은 "Effective Java" 를 정리한 내용입니다.

 
 


- java.lang.Object 클래스는 toString 메소드를 구현하고 있다.
  그러나 그 메소드에서 반환하는 문자열은 클래스 사용자가 원하는 형태가 아니다.
 ( 보통 클래스명@hashCode 형태 )


- toString() 은 println, printf, 문자열 접합 연산자 +, assert, debugger 출력 등에 쓰일 경우 자동 호출된다.




toString 도 보편적 계약이 있어?

- 응. "간결해야 하고, 사람이 읽기 쉬운 형태의 정보를 표현해야 한다"  라는 계약이 있어.

- 추가적으로, "모든 서브 클래스들은 이 메소드를 오버라이드 할 것을 권한다." 라고 표기되어 있지.
  잘 구현하면 엄청 편하게 사용되기 때문이지.




toString 메소드는 그럼 어떻게 오버라이드 해?

- 가능하다면 toString 메소드에서는 객체의 모든 중요한 정보를 반환해야 해.

- 값 (Value) 들을 가진 클래스라면 API 문서를 규정하는 것이 좋은데,
API 문서의 표현 형식 규정을 잘못하면, 차기 버전에서 정보를 추가한다던가 또는 형식을 개선하는데
유연성이 없어지지. 그래서 표현 형식 규정 여부와는 무관하게 그 의도를 명쾌하게 문서화하는 것이 좋아.

- 추가적으로, toString 메소드의 반환 값에 포함되는 모든 정보는 프로그램적으로 접근하는 방법이 존재해야해.
 





도움이 되셨다면 손가락 꾸욱~

반응형

댓글