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()메서드는 디버깅에 적합하다는 의견이 많았습니다.
공부를 꾸준히 해보다가, 더 추가할 내용이 있으면 추가해 보겠습니다.
틀린 내용이 있으면 지적 부탁드립니다. 이상입니다