Reference/Effective-Java

    [Effective-Java] Chapter5 #30. 이왕이면 제네릭 메서드로 만들라

    ✒️ 핵심 정리 제네릭 타입과 마찬가지로, 클라이언트에서 입력 매개변수와 반환값을 명시적으로 형변환해야 하는 메서드보다 제네릭 메서드가 더 안전하며 사용하기도 쉽다. 타입과 마찬가지로 메서드도 형변환 없이 사용할 수 있는 편이 좋다. 그럴려면 제네릭 메서드가 되어야 한다. [Java] 제네릭 메소드(Generic Method)란? 제너릭 메소드 제네릭 메소드는 메소드의 선언 부에 적은 제네릭으로 리턴 타입, 파라미터의 타입이 정해지는 메소드이다. 제너릭에 대한 예시를 보면서 이해해보자. public class Student { static T nam devlog-wjdrbs96.tistory.com 내가 참고하려고 복붙 📌 제네릭 메서드 작성법 클래스와 마찬가지로, 메서드도 제네릭으로 만들 수 있다. 대..

    [Effective-Java] Chapter5 #29. 이왕이면 제네릭 타입으로 만들라

    ✒️ 핵심 정리 클라이언트에서 직접 형변환해야 하는 타입보다 제네릭 타입이 더 안전하고 쓰기 편하다. 그러니 새로운 타입을 설계할 때는 형변환 없이도 사용할 수 있도록 하라. 그렇게 하려면 제네릭 타입으로 만들어야 하는 경우가 많다. 제네릭 타입을 사용하는 것은 클라이언트에는 아무 영향을 주지 않으면서, 새로운 사용자들을 편하게 해주는 방법이다. (Item 26) 제네릭 타입을 새로 만드는 일은 조금 더 어렵다. 그래도 배워두면 그만한 값어치는 충분히 한다. 📌 As-is Item 7에서 다룬 단순한 스택 코드를 다시 살펴보자. public class MyStack { private Object[] elements; private int size = 0; private static final int DE..

    [Effective-Java] Chapter5 #28. 배열보다는 리스트를 사용하라

    ✒️ 핵심 정리 배열과 제네릭에는 매우 다른 타입 규칙이 적용된다. 배열은 공변이고 실체화 되는 반면, 제네릭은 불공변이고 타입 정보가 소거된다. 그 결과 배열은 런타임에는 type-safe 하지만 컴파일 타임에는 그렇지 않다. 제네릭은 반대다. 둘을 섞어 쓰긴 쉽지 않다. 컴파일 오류나 경고를 만나면 가장 먼저 배열을 리스트로 대체해보라. 📌 배열과 제네릭 타입의 두 가지 차이점 1️⃣ 배열은 공변(covariant)이다. 배열은 공변, 즉 Sub가 Super의 하위 타입이라면 Sub[]은 Super[]의 하위 타입이 된다. 반면, 제네릭은 불공변이다. 서로 다른 타입 Type1, Type2가 있을 때, List은 List의 하위/상위 타입 모두 아니다. 위 개념만 봤을 때 제네릭에 문제가 있을 수 있..

    [Effective-Java] Chapter5 #27. 비검사 경고를 제거하라

    ✒️ 핵심 정리 비검사 경고는 중요하니 무시하지 말자. 모든 비검사 경고는 런타임에 ClassCastException을 일으킬 수 있는 잠재적 가능성을 뜻하니 최선을 다해 제거하라. 경고를 없앨 방법을 찾지 못하겠다면, 그 코드가 타입 안전함을 증명하고 가능한 한 범위를 좁혀 @SuppressWarnings("unchecked") 어노테이션으로 경고를 숨겨라. 그런 다음 경고를 숨기기로 한 근거를 주석으로 남겨라. 더보기 읽어보면 좋을 만한 내용 비검사 매개변수화 가변인수 타입 경고가 나타날 수 있는 이유 제네릭 가변 인수가 heap pollution의 가능성이 있는 이유 자바가 제네릭 배열을 지원하지 않는 이유 제네릭을 사용하기 시작하면 수많은 컴파일러 경고를 보게 될 것이다. 비검사 형변환 경고, 비..