ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Java] toString 메소드 재정의
    프로그래밍/Java 2022. 3. 3. 02:06
    반응형

    이 글은 혼자 학습한 내용을 바탕으로 작성되었습니다.

    틀리거나 잘못된 정보가 있을 수 있습니다.

    댓글로 알려주시면 수정하도록 하겠습니다.


    1. Object 클래스의 toString 메소드

    toString 메소드는 Object 클래스에 정의되어 있는 메소드로 모든 Class는 toString 메소드를 정의되어 있습니다.

     

    toString의 Default 값은 위 이미지와 같이 '클래스 이름@16진수 해시코드'로 표시 됩니다.

     

    2. toString 메소드 사용

    toString 메소드의 경우 객체의 toString 메소드를 호출하는 경우도 사용이 되지만 프로그래머가 직접 호출하지 않는 곳에서도 많이 사용됩니다.

     

    • println이나 printf와 같이 객체를 문자열로 출력하는 경우
    • 객체를 문자열 연결자(+)를 이용하여 연결한 경우
    • 디버거가 객체를 출력하는 경우
    • 오류 메시지를 로깅하는 경우

     

    위 경우처럼 다양한 곳에서 toString 메소드를 호출하여 사용됩니다.

     

    3. toString 재정의 이유

    toString 메소드를 재정의 하여야 하는 이유는 위 Object의 toString 메소드의 경우 사람이 읽기 쉬운 형태의 정보가 반환되는 것이 아닙니다.

     

    만약 오류가 발생하여 로깅을 하는 경우 클래스 이름과 해당 클래스의 해시코드만 작성되어 있다면 프로그래머는 객체의 세부 정보를 알 수 없어 결국 로그 기록은 쓸모없는 기록이 되는 것 입니다.

     

    toString을 재정의 한 객체의 오류 발생인 경우는 객체에 대한 정보를 로그에 기록하여 프로그래머는 오류의 원인 파악에 많은 도움을 줄 수 있다.

     

    4. toString 재정의 방법

    toString 메소드는 객체가 가진 주요 정보를 모두 포함하여야 합니다. 하지만 주요 정보를 모두 포함할 수 없는 경우 요약 정보를 포함하여야 합니다.

     

    즉 최대한 객체 스스로를 완벽히 설명할 수 있는 문자열이 반환되어야 하는 것 입니다.

     

    반환 문자열에 포맷이 존재하는 경우 해당 포맷을 아주 상세하고 정확히 기술하여야 하며 포맷이 존재하지 않는 경우는 폼맷의 변경가능성에 대하여 기술하여야 합니다.

     

    반환 문자열에 포함된 정보는 추가적인 API를 통해서 정보를 얻을 수 있도록 하여야 합니다. 만약 API가 제공되지 않는 다면 프로그래머는 toString에서 반환하는 문자열에서 필요한 정보를 파싱할 수밖에 없습니다.

     

    파싱을 통해 정보를 얻는 동작은 성능에 부정적이며 만약 포맷이 변경되면 파싱을 곳을 모두 수정해야되는 대참사가 발생할 수 있습니다.

    반응형

    '프로그래밍 > Java' 카테고리의 다른 글

    [Java] Reflection Private  (0) 2022.01.11
    [Java] Reflection Invoke  (0) 2021.12.31
    [Java] Reflection(리플렉션)  (0) 2021.12.29
    [Java] 트랜잭션  (0) 2021.11.13

    댓글

Designed by Tistory.