본문 바로가기
java

몰래 온 손님 toString()

by ernest45 2023. 5. 16.

그러나 효과는 미미했다..!

 

 

 

 

 

 

한참 메서드를 공부하려고 유튜브로 강의를 보는데,

강사님이 분명 다른 클래스의 메서드들을 만들 때 toString() 메서드를 만들지 않고 

 

toString() 호출

 

 

이런 식으로 메서드를 호출하는 것이다..

 

그냥 보여만 주려고 아무 클래스나 만들었슴니다..

 

 

 

너무 궁금해서 댓글도 확인해 봤지만, 그냥  "자바에서 정했으니까" 라고 되게 두리뭉실하게 답변해 주셔서

또 궁금한 거 절대 못 참는 나는 파헤치기 시작했다.

 

 

그리고 그냥  "규칙이니까 외워" 라는 말이 세상에서 한 열두 번째 정도로 싫다.. 

(첫 번째로 말하려다가 생각해 보니 내가 세상에서 싫어하는 말들이 많아서 대충 만만한 숫자 잡아주기..)

 

 

 

지금 상황이 메서드나 클래스에 대해서는 그래도 어느 정도 알고 있다고 생각해서 더 혼란스러웠다.

 

 

 

그래서 찾아보니,

 

 

 

 

 

toString은 최상위 클래스인 Object  클래스를 상속받고, 컴파일러가 자동적으로 쓱~  하고 extend 해주기 때문에

굳이 정의하지 않고도 쓸 수 있다.

 

 

 

 

 

이제 이런 설명을 보고 나니까 어떻게 동작 하는지, 또 toString()이 정확하게 어떤 동작을 하는 지

 더 자세하게 알고 싶어졌다.

 

 

 

  • tostring()은 사람이 보다 쉽게 읽을 수 있게 객체를 String 형태로  바꿔주는 메서드이다.

 

 

 

그래서 실제로 내가 toString()을 사용하여 직접 출력해 봤더니,

 

 

 

 

 

읽기 쉽기는커녕 왠 요상한 녀석이 튀어나왔다...

 

 

 

 

 

바로 ChatGPT 형님에게 문의해본 결과,

 

G.O.A.T GPT!

 

내가 따로 구현하지 않아서 Object 클래스의 기본 toString이 호출됐고,  그로 인해 그 객체의 클래스 이름과

@ + 해시코드가 문자열로 반환된 것이다.

 

 

 

따라서,

 

 

내가 원하는 결과 값을 얻으려면 오버라이딩된 toString() 메서드를 내가 직접 재정의해서 내가 원하는 사람의 이름과

나이를 출력해야 한다.

 

 

 

 

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

 

 

 

그 결과

 

 

 

 

 

아주 만족스럽게 내가 정의한 대로 코드가 작동하는 걸 볼 수 있다.

그리고 재정의를 깔끔하게 해 줬더니 진짜로 보다 보기 쉽게 정리되었다.  😉😉😉

 

 

 

 

(몰랐으면 이렇게 일일이 출력할 때마다 복붙 했을 듯..)

 

아직은 c+d로 가능하겠지만 나중에 코드가 많아진다면 ? 끔찍하다

 

 

 

 

그런데 왜

 

 

 "굳이  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