inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

이펙티브 자바 완벽 공략 2부

아이템 32. 핵심 정리

아이템 32. 핵심 정리 12:00 이 부분에서 질문이 있습니다.

515

리나

작성한 질문수 77

1

 String[] attributes = pickTwo("좋은", "빠른", "저렴한");

제가 자바 기초가 약해서 이해를 못하는걸까요? ..

 

bytecode로 확인하면

pickTwo 메소드를 반환하게 된다면 Object(추상적) 형식으로 반환 해서 String(구체적) 형식으로 변환(타입 케스트) 해서 문제(ClasscastException)가 발생된다고 해주셨는데요

 

그러니깐

  1. 구체적 -> 추상적 으로 변환 문제없음

  2. 추상적 -> 구체적 으로 변환 문제 있음

결론은 이것인데

 

        Object obj = new Object(); 
        obj = "test"; // 추상적인 Object 에 담음

        String string = (String) obj; // 구체적인 String 에 담음

해당 원인이라면 해당 소스는 에러가 발생해야 되는것이 아닌가요?....

 

자바 기초가 약해서 그런지 조금 이해가 안되는 부분이 있어서 질문 드립니다.

 

 

java

답변 1

0

사유

제가 이해한 내용으로 적는 거라서 틀릴 수도 있지만, 답변 남겨봅니다.(틀린 내용 있으면 피드백해주세요!)

먼저 질문자님이 주신 예시 코드의 경우에는

        Object obj = new Object(); 
        obj = "test"; // 추상적인 Object 에 담음

        String string = (String) obj; //

이 경우에는 "test" 객체 자체가 String 클래스이므로 캐스팅을 이용해서 String <-> Object의 이동이 자유롭습니다.

반면에 toArray(T... args)의 경우 가변 인수를 Object[]를 생성합니다.(194p 3번째 줄, 이 부분에 대한 자세한 내용은 타입 이레이저(Type Erasure)를 검색해보시면 될 꺼 같습니다.)

가변 인수를 보관하는 Object[] 객체는 위에서 "test"라는 '객체 자체'가 String이라서 String <-> Object 캐스팅이 자유로웠던 것과는 달리 Object[]가 String[]으로 다운 캐스팅될 수 없습니다.

그래서 String[] attributes = (String[]) Object[] 이 부분에서 컴파일러의 캐스팅 과정 중 에러가 발생하는 거라고 생각하시면 될 것 같습니다.

제 블로그에 더 자세하게 Type Erasure 과정과 함께 타입 에러 발생 과정을 적어두었으니 필요하시다면 참고해주세요!

이펙티브 자바 질문 글과 함께 아이템 32 살펴보기

26년2회 실기기출은 언제쯤...

0

22

2

진짜화면이랑달라서못해먹겟어요먹겟어요

0

16

1

네이버 API | '검색 - 책' API 제공 중단

0

17

1

ArticleReadService 관련 질문

0

15

1

kafka 이벤트 발행 실패 시 at-least-once를 보장하는 방법이 궁금합니다.

1

38

1

이론 공부법 요약본 버전 업데이트 문의

0

18

2

domain에 @Entity 와 Repository를 함께 둔 이유가 궁금합니다

1

29

1

해당 프로젝트를 똑같이 따라하려니 spring installer가 버전이 17부터 가능하네요.

0

14

1

Part 2 듣기전 복습하던 중, 아키텍처에 관한 질문이 있습니다.

0

32

2

테스트는 인터페이스를 대상으로 만드는것에 대해 궁금한 점이 있습니다.

0

22

1

Jib 이미지 빌드에서 docker credential 관련으로 이슈가 있다면

1

60

1

리뉴얼 시기

0

39

2

스크립트에 대해 질문 있습니다.

1

54

1

같은 사용자가 연속된 중복 호출할 경우 어떻게 되는지 궁금합니다!

2

60

1

조건 검색 질문

0

32

1

JPA 엔티티로 만들었다고 기술종속이 아닌지에 대한 질문

0

50

3

클로드코드 명령어-대화&세션관리 수업 자료

0

40

1

정처기 필기 준비할때 이 이론을 다시 외워도 될까요?

0

54

2

강의 소스 코드 관련 질문 드립니다.

0

59

1

아이템 28 타입 안전

0

440

1

아이템19 - 구체 클래스가 표준 인터페이스를 구현하지 않았는데 상속을 금지하면 사용하기에 상당히 불편해진다.

1

467

2

다음 강의 질문

0

456

1

아이템16, 조금 애매한 것 같습니다.

0

610

1

아이템31 비한정적와일드카드

1

384

0