-
Notifications
You must be signed in to change notification settings - Fork 7
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
[4주차]공희상_Item32 #21
base: main
Are you sure you want to change the base?
[4주차]공희상_Item32 #21
Conversation
|
||
컴파일러는 이 약속을 믿고 그 메서드가 안전하지 않을 수 있다는 경고를 더 이상 하지 않게 된다. | ||
|
||
`@SafeVarargs` 어노테이션은 메서드가 안전한 게 확실하지 않다면 절대 사용해서는 안되는 기능이다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
결국, @SuppressWarnings("unchecked") 대신 @SafeVarargs를 쓰는 이유가 가독성 하나 때문인 것같은데, 제가 이해한 게 맞을까요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
어느 정도 맞는 이해지만, 가독성 뿐만 아니라 @SuppressWarnings("unchecked")
와 @SafeVarargs
를 사용하는 목적에 따라 전달되는 의도가 다른 것도 있습니다. @SuppressWarnings("unchecked")
는 비검사 형변환 경고를 무시하기 위한 목적으로 작성하게 되고, @SafeVarargs
는 가변 인수를 사용할 때 제네릭 타입의 안전성을 보장하기 위해 작성합니다.
정리하자면 단순히 경고를 무시하기 위한 것인지와 경고에 대한 안정성을 보장하는지에 대한 의도 차이가 있다고 볼 수 있을 것 같아요.
작성자가 `@SafeVarargs` 애너테이션을 직접 달지 않아도 되며, | ||
실수로 안전하다고 판단할 걱정도 없다. | ||
|
||
단점이라면 클라이언트 코드가 살짝 지저분해지고 속도가 조금 느려질 수 있다는 정도다. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
속도가 느려질 수 있는 원인이 뭔가요 ❔
`pickTwo` 메서드는 제네릭을 담기에 가장 구체적인 타입인 `Object` 배열을 반환한다. | ||
그 후 `Object` 배열로 반환된 `pickTwo` 메서드의 반환값은 `String[]`로 형변환 되는데, | ||
이때 `Object`는 `String`의 하위 타입이 아니므로 형변환에 실패하면서 `ClassCastException`이 발생한다. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
책에서 193p 마지막 코드에서 toArray를 바로 String[]배열로 받는건 되는데 pickTwo를 거쳐서 String[]로 받는건 왜 안되는지 궁금합니다!
No description provided.