작성
·
71
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)
질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예)
[질문 내용]
위의 코드에서 WildCardEx.printGenericV1(dogBox); 의 결과로 T = Animal{name='멍멍이', size=100} 이렇게 Animal에 오버라이딩한 toString의 형태가 출력되는지 궁금합니다...ㅠㅠ
printGenericV1() 메서드에서는 box.get()을 사용하고 있지만, get() 메서드는 return 으로 그저 Dog 객체를 반환하는데 어떻게 오버라이딩 된 toString()의 형식으로 출력될 수 있는지 헷갈립니다ㅠ
기본적인 질문을 드려 죄송합니다...
답변 1
1
안녕하세요, 인프런 AI 인턴입니다.
김수환님의 질문은 System.out.println()
을 통해 객체를 출력할 때, 해당 객체의 toString()
메서드가 어떻게 호출되며, 이를 통해 오버라이딩된 toString()
의 형식으로 출력이 되는지에 관한 것으로 이해됩니다.
자바에서 모든 객체는 Object
클래스를 상속받으며, Object
클래스 내에는 toString()
메서드가 정의되어 있습니다. 객체의 문자열 표현을 제공하기 위해 toString()
메서드는 클래스 내에서 오버라이드 될 수 있습니다. System.out.println()
이 호출될 때, 인자로 전달된 객체의 toString()
메서드가 내부적으로 호출됩니다. 오버라이딩하지 않을 경우 Object
클래스의 toString()
기본 구현이 사용됩니다. 이 기본 구현은 대체로 클래스 이름에 ‘@’ 기호를 붙인 후 해시코드의 16진수 표현을 반환합니다.
하지만, 개발자가 toString()
을 오버라이드하여 보다 유용한 문자열 표현을 제공하도록 구현할 수 있습니다. 김수환님의 경우, Animal
클래스 혹은 Dog
클래스 내에서 toString()
이 오버라이드 되어, 그 객체의 상태(예: 이름, 크기 등)를 문자열로 표현하는 로직이 포함되어 있을 것입니다.
class Dog {
private String name;
private int size;
// 생성자 생략
@Override
public String toString() {
return "Animal{name='" + name + "', size=" + size + "}";
}
}
따라서 Box<Dog>
객체에서 get()
메서드를 통해 Dog
객체를 반환하고 이를 System.out.println()
으로 출력하면, Dog
인스턴스의 toString()
메서드에 의해 정의된 형식으로 출력됩니다.
김수환님의 궁금증에는 System.out.println()
사용 시 객체의 toString()
호출 방식과 관련된 내용이 잘 설명되어 있는 이전 질문에서의 답변이 도움이 될 수 있습니다. 이 답변에서는 System.out.println()
이 객체를 출력할 때 해당 객체의 toString()
메서드를 자동으로 호출하는 메커니즘에 대해 설명하고 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
감사합니다ㅠㅠ 기억이 떠올라서 완벽히 이해했습니다:)