인프런 커뮤니티 질문&답변

김수환님의 프로필 이미지
김수환

작성한 질문수

김영한의 실전 자바 - 중급 2편

와일드카드1

어떻게 오버라이딩된 toString()의 형식으로 출력되는지 헷갈립니다ㅠㅠ

작성

·

71

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예)

[질문 내용]

1.JPG


위의 코드에서 WildCardEx.printGenericV1(dogBox); 의 결과로 T = Animal{name='멍멍이', size=100} 이렇게 Animal에 오버라이딩한 toString의 형태가 출력되는지 궁금합니다...ㅠㅠ

 

1.JPG

 

1.JPG

 

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() 메서드를 자동으로 호출하는 메커니즘에 대해 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.

현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김수환님의 프로필 이미지
김수환
질문자

감사합니다ㅠㅠ 기억이 떠올라서 완벽히 이해했습니다:)

김수환님의 프로필 이미지
김수환

작성한 질문수

질문하기