제네릭(Generic)

김주영·2022년 11월 5일
0

자바 <면접>

목록 보기
3/9
post-thumbnail

썸넬 Image ref :
https://medium.com/rico-ramos/java-generics-5da1455d5a31

🌱 제네릭(Generic)


제네릭은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미합니다. 즉, 특정 타입을 미리 지정하는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것입니다.

🌿 장점

  1. 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있음(타입 안정성 확보)
    -> 즉, 컴파일 타임에 타입에 대한 안정성을 보장받을 수 있음
  2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없어 관리가 편리
  3. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아짐

🌿 목적

JDK 5~6에서 제네릭이 추가되면서 기존 코드를 수용하기 위해 제네릭을 지원하기 전의 코드와 지원한 후의 코드의 호환성 유지를 목적으로 개발되었습니다. 따라서, '컴파일 타임'에만 타입을 검사하고, '런타임'에는 해당 타입 정보를 소거 또는 체크하지 않는 것입니다.

🌿 타입

<>내 글자는 통상적인 예시일 뿐, 반드시 일치할 필요는 없습니다.

ref
https://st-lab.tistory.com/153
https://st-lab.tistory.com/174#%ED%81%B4%EB%9E%98%EC%8A%A4

🌱 Effective Java Rule


🌿 무점검 경고(unchecked warning) 제거

제네릭으로 프로그램하다 보면 많은 컴파일러 경고 메시지를 보게 됩니다.

  • 무점검 형변환 경고(unchecked cast warning)
  • 무점검 메소드 호출 경고(unchecked method invocation warning)
  • 무점검 제네릭 배열 생성 경고(unchecked generic array creation warning)
  • 무점검 변환 경고(unchecked conversion warning)

코드의 형 안정성(타입 안정성) 보장을 위해 모든 무점검 경고는, 가능하다면 없애야 합니다. 제거할 수 없는 경고 메시지는 형 안정성이 확실할 때만 @SuppressWarnings("unchecked") 어노테이션을 사용해 억제해야 합니다.

🌿 @SuppressWarnings

SuppressWarnings 어노테이션은 개별 지역 변수 선언부터 클래스 전체에까지, 어떤 크기의 단위에도 적용할 수 있지만 가능한 작은 범위에 적용해야 합니다. 그 이유는 중요한 경고 메시지까지 억제하게 될 수 있기 때문입니다.

@SuppressWarnings("unchecked") 어노테이션을 사용할 때마다, 형 안정성을 위반하지 않는 이유를 반드시 주석으로 붙여줘야 합니다.

🌿 요약

  • 무점검 경고(unchecked warning)는 중요하다
  • 모든 무점검 경고는 프로그램 실행 도중에 ClassCastException이 발생할 가능성을 나타낸다
  • 무점검 경고 메시지는 최선을 다해 제거하라
  • 경고를 제거할 수 없으나 형 안정성을 보장한다는 사실을 입증할 수 있다면, @SuppressWarnings("unchecked") 어노테이션을 사용하되, 적용 범위는 최소화해야 한다
  • 경고 메시지를 억제한 경우, 그 이유를 반드시 주석에 써야 한다

ref : https://itstory.tk/entry/%EC%9D%B4%ED%8E%99%ED%8B%B0%EB%B8%8C-%EC%9E%90%EB%B0%94-%EA%B7%9C%EC%B9%9924-%EB%AC%B4%EC%A0%90%EA%B2%80-%EA%B2%BD%EA%B3%A0unchecked-warning%EB%A5%BC-%EC%A0%9C%EA%B1%B0%ED%95%98%EB%9D%BC

0개의 댓글