[Java] toString() 정리

step 0.         개념정리 

 

모든 클래스의 가장 최상위 클래스 : Object 클래스가 있습니다

 

자바에서 제공하는 모든 클래스들은 계층 구조로 형성 되있고

그 계층구조 최상위에는 Object 클래스가 있습니다.

 

모든 클래스들의 생성할때 적혀있지는 않지만

Object 클래스가 기본적으로 상속 구조가 되어있습니다 그래서

Object클래스에서 사용할 수 있는 메서드들을 사용할 수 있습니다.

 

즉 자바 라이브러리나 저희가 직접 만드는 클래스에는

Object 클래스를 부모클래스로 자동 상속 받아 사용하고 있다는 뜻 입니다.

 

 

toString() 메서드?

 

 -> object(객체)가 가지고 있는 정보나 값들을 문자열로 만들어서 return 해주는 메서드 입니다.

 

toString을 이용해 출력해보면 결과값에 어떠한 주소가  담기는데 

이 결과는 Object의 toString 결과 값이라는 뜻입니다

 

 

사실 이게 무슨 뜻인지 정확하게는 이해를 하지 못했습니다만,

java.lang 패키지의 Obeject 클래스의 toString 메서드를 보닌까

   public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

toString 메서드는 클래스이름@16진수로표시된 해시코드 문자열을 반환해준다고 이해를 하였습니다. 

간단한게 말하면 위에 po 인스턴스의 주소값을 16진수로 반환한다고 이해를 하였습니다.

 


 

toString 메서드를 항상 재정의를 해줘야한다고 어디서 주어 들은적이 있습니다.

하지만 왜 재정의를 해야하는지 몰라서 책을 찾아보았습니다.

 

1) toString이 잘 구현된 클래스는 사용이 편하고 , 디버깅이 쉽다. 

    객체를 출력하기만 하면 , 객체가 가지고 있는 모든 정보를 확인 할 수 있기 때문 입니다. 

 

2) toString은 객체가 가진 주요 정보를 모든 반환하는 것이 좋다.

 

아래 예제를 보며 리뷰를 해보겠습니다.

class Car {
	static String name;
	static int position;
	
	Car (String name ,  int position) {
		this.name=name;
		this.position=position;
	}
}

@Override
public String toString() {
	return String.format(name, position);
}

이렇게 재정의된 toString 메소드는 직접 호출하지 않더라도 문자열 출력시,

문자열 결합 연산자 등을 사용할 때 자동으로 호출됩니다.

 

단, 정적 유틸리티 클래스의 경우 toString 을 제공할 필요가 없다.

* 또한 대부분의 Enum 타입은 이미자바가 완벽한 toString 을 제공하므로 재정의할 필요 없다.

 

 

toString은 언제 사용해야 하나?

 - > 인스턴스에 대한 정보를 쉽게 출력할 수 있고, 메서드를 재정의하여 원하는 형태로 출력할 수 있는 장점이 

      존재합니다.

https://stackoverflow.com/questions/4762406/tostring-for-debugging-or-for-humans

 

toString(): for debugging or for humans?

class Address { private enum Component { NUMBER, STREET, STATE, COUNTRY } private Map<Component, String> componentToValue = ...; } I'd like my class to contain two m...

stackoverflow.com

위 스택오버플로우에서 자료를 참고하였는데 toString()메서드는 디버깅에 적합하다는 의견이 많았습니다.

 

 

공부를 꾸준히 해보다가, 더 추가할 내용이 있으면 추가해 보겠습니다.

틀린 내용이 있으면 지적 부탁드립니다. 이상입니다

 

 

 

 

ref : https://hudi.blog/java-correct-purpose-of-tostring/

728x90