Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[아이템 13] clone 재정의는 주의해서 진행하라 #12

Open
punsoo opened this issue Apr 14, 2021 · 3 comments
Open

[아이템 13] clone 재정의는 주의해서 진행하라 #12

punsoo opened this issue Apr 14, 2021 · 3 comments

Comments

@punsoo
Copy link
Member

punsoo commented Apr 14, 2021

p77 에 보면

그래서 Cloneable을 구현하는 것만으로는 외부 객체에서 clone 메서드를 호출할 수 없다. 리플렉션을 사용하면 가능하지만, 100% 성공하는 것도 아니다. 해당 객체가 접근이 허용된 clone 메서드를 제공한다는 보장이 없기 때문이다.

라고 되어있습니다.

접근 허용된 메서드를 제공한다는 보장이 있어야 reflection이 성공한다는 뉘앙스로 들리는데
원래 리플렉션이라는 것이 private 같이 접근이 안되는 필드나 메서드에 접근하는 거 아니었던가요?

@ghojeong
Copy link
Member

원래 리플렉션이라는 것이 private 같이 접근이 안되는 필드나 메서드에 접근하는 거 아니었던가요?

리플렉션으로 private 멤버나 메서드에 접근할 수도 있지만,
원래 리플렉션은 그러라고 만든게 아닙니다.

실제로 자바 11부터는 private 을 리플렉션으로 접근하려 하면 빨간색 warning 을 띄우거나,
프로그램이 제대로 동작하지 못하도록 터트립니다.

computer

@punsoo
Copy link
Member Author

punsoo commented May 9, 2021

p. 81을 보면

배열의 clone은 런타임 타입과 컴파일타임 타입 모두가 원본 배열과 똑같은 배열을 반환한다.

여기서 말하는 런타임 타입과 컴파일 타임 타입은 무엇인가요??

@ghojeong
Copy link
Member

ghojeong commented May 9, 2021

여기서 말하는 런타임 타입과 컴파일 타임 타입은 무엇인가요??

궁금하시다면, 아이템 28 "배열보다는 리스트를 사용하라" 를 읽어보시면 도움이 되실 것 같습니다.
배열은 런타임 타입과 컴파일타임 타입 모두가 동일하지만, 리스트는 아니지요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants