
한참 메서드를 공부하려고 유튜브로 강의를 보는데,
강사님이 분명 다른 클래스의 메서드들을 만들 때 toString() 메서드를 만들지 않고

이런 식으로 메서드를 호출하는 것이다..
그냥 보여만 주려고 아무 클래스나 만들었슴니다..
너무 궁금해서 댓글도 확인해 봤지만, 그냥 "자바에서 정했으니까" 라고 되게 두리뭉실하게 답변해 주셔서
또 궁금한 거 절대 못 참는 나는 파헤치기 시작했다.
그리고 그냥 "규칙이니까 외워" 라는 말이 세상에서 한 열두 번째 정도로 싫다..
(첫 번째로 말하려다가 생각해 보니 내가 세상에서 싫어하는 말들이 많아서 대충 만만한 숫자 잡아주기..)
지금 상황이 메서드나 클래스에 대해서는 그래도 어느 정도 알고 있다고 생각해서 더 혼란스러웠다.
그래서 찾아보니,
toString은 최상위 클래스인 Object 클래스를 상속받고, 컴파일러가 자동적으로 쓱~ 하고 extend 해주기 때문에
굳이 정의하지 않고도 쓸 수 있다.
이제 이런 설명을 보고 나니까 어떻게 동작 하는지, 또 toString()이 정확하게 어떤 동작을 하는 지
더 자세하게 알고 싶어졌다.
- tostring()은 사람이 보다 쉽게 읽을 수 있게 객체를 String 형태로 바꿔주는 메서드이다.
그래서 실제로 내가 toString()을 사용하여 직접 출력해 봤더니,

읽기 쉽기는커녕 왠 요상한 녀석이 튀어나왔다...
바로 ChatGPT 형님에게 문의해본 결과,

내가 따로 구현하지 않아서 Object 클래스의 기본 toString이 호출됐고, 그로 인해 그 객체의 클래스 이름과
@ + 해시코드가 문자열로 반환된 것이다.
따라서,
내가 원하는 결과 값을 얻으려면 오버라이딩된 toString() 메서드를 내가 직접 재정의해서 내가 원하는 사람의 이름과
나이를 출력해야 한다.

이런 식으로 재정의 해줬고,
그 결과

아주 만족스럽게 내가 정의한 대로 코드가 작동하는 걸 볼 수 있다.
그리고 재정의를 깔끔하게 해 줬더니 진짜로 보다 보기 쉽게 정리되었다. 😉😉😉
(몰랐으면 이렇게 일일이 출력할 때마다 복붙 했을 듯..)

그런데 왜
"굳이 Object 클래스에서 자동으로 컴파일 해준 걸 쓰면 되지 왜 불편하게 다시 재정의해서 쓰지 ?"
다른 글들을 찾아보면 심지어 toString() 메서드를 재정의 하는 걸 권장까지 한다.
(심지어 객체 정보들을 모조리 넣어서..)
하.. 그 이유는
- toString을 잘 구현하면 사용하기에 훨씬 용이하다. (근데 자바가 해준 게 더 깔끔함)
- 디버깅이 훨씬 쉽다.
잘만 구현해 놓는다면, 진짜로 사용이 쉬울 거 같기도 하고 그 객체를 내가 출력만 해봤을 때
객체에 담긴 모든 정보들을 보다 쉽게 파악할 수 있을 거 같다.
또한 직접적으로 호출하지 않아도 에러를 정의하거나 할 때도 쓸 수 있다고 한다.
아직 디버깅은 대충 흐름 따라 강물 따라하는 정도이니까 잘 모르겠지만 어째뜬 쉽대..
'java' 카테고리의 다른 글
| String이란? (0) | 2023.10.31 |
|---|---|
| 하라는 indexof() 공부는 안하고 물리에 빠진 건에 대하여. (0) | 2023.05.19 |
| 내맘대로 디버깅(Debug) (0) | 2023.05.17 |
| 동일 Package에서 같은 이름의 Class 정의 (1) | 2023.05.15 |
| 객체와 클래스 (0) | 2023.05.09 |