toString 메소드는 여러모로 편리하다.
특별히 쓸데가 없다고 하더라도 디버깅용으로만 써도 충분히 유용하다.
어떤 객체의 내용을 보기 위해서는 각각의 맴버변수를 따로따로 출력해야한다. 하지만 toString 메소드를 모버라이드 해놓으면 여러 과정을 안거치고 한번에 객체의 내용을 들여다볼수 있다.
게다가 String 이 필요한 부분에서 객체를 그냥 넣어버리면 toString을 알아서 호출해서 String으로 변환해버리는 경우도 많다.
-String 에서 '+' 연산이라던지 System.out.prinln에서 라던지 에서 알아서 그냥 출력해준다.
이것을 오버라이딩 하지 않은 상태에서 toString을 호출하면 Object 에 있는 toString이 호출되면서 클레스명@해시코드(16진수)의 형태로 출력된다. 16진수 형태의 해시코드는 물론 hashCode() 메소드를 호출한 결과이다.

학교 후배인 정모양은 왜 분명이 같은 내용인데 출력을 하면 값이 다르냐고 물어본적이 있다.
프린트 하란다고 원하는데로 출력되면 얼마나 좋겠나여..보고있나?정씨?
@Override
public String toString() {
	// TODO Auto-generated method stub
	return super.toString();
}

이런 형태로 오버라이딩을 하게되는데 return 에 출력하게 될 내용을 쓰면된다.

보통은 그냥 + 연산자를 이용해서 String 연결해서 리턴하는데 StringBuilder 를 사용하기도 하고 String.format 를 사용한다.

개인적으로는 format을 주로 사용한다.
String.format 은 C/C++ 에서 쓰는 sprintf 와 거의 똑같다. 대신 char 배열을 인자로 넣으줄 필요가 없다는거
String.format("%d, %d", 10,20);
저렇게 하면 "10, 20" 이라는 내용을 가진 String 객체가 만들어진다.

배열을 출력해야 할때에는
Arrays.toString(배열);
을 하게되면 배열의 내용을 순서대로 toString 을 호출해서 줄줄이 뽑아준다.


StringBuilder 를 사용하게되는 이유는 '+' 쓰면되잔아? 귀찬게 왜 그딴짓을 함?
이유는 느려서 입니다. + 를 할때마다 아예 새로 객체를 만들어서 복사 하면서 연산을 하기때문에 몇번 정도는 괜찬지만 for문 같은거 써서 수백개를 이어붙이게되면 미친듯이 느립니다.
그러니까 StringBuilder를 사용합시다.

Posted by 동적할당
: