제네릭

Lee·2023년 3월 29일
0

면접 스터디

목록 보기
6/18

정의

클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다.

public class void example() {
	List<Integer> numbers = new ArrayList<>();
}

필요성

1. 타입 안전성 제공

public static void main(String[] args) {
	// 제네릭을 사용하지 않는 경우
    List numbers = Array.asList("1", "2", "3");
    int num = numbers.get(0);  // 런타임 시에 오류가 발생해 미리 발견할 수 없다.
    
    // 제네릭을 사용하는 경우
    List<Integer> numbers = Array.asList("1", "2", "3");  // 컴파일 에러가 발생하여 미리 오류를 발견할 수 있다.
    int num = numbers.get(0);
}
  • 제네릭을 사용하지 않는 경우 Integer list에 String을 넣어도 컴파일 에러가 발생하지 않는다.
  • 이후 런타임에 ClassCastException이 발생하게 된다.
  • 제네릭을 사용한다면 compile 시 타입을 체크하고 미리 발견해 타입 안전성을 제공한다.

2. 타입체크 및 형변환 생략 가능

public static void main(String[] args) {
	// 제네릭을 사용하지 않는 경우
    List numbers = Array.asList(1, 2, 3);
    int num = (int) numbers.get(0);  // numbers list의 요소들이 Object 타입으로 들어가므로 int로 형변환을 해야 한다.
    
    // 제네릭을 사용하는 경우
    List<Integer> numbers = Array.asList(1, 2, 3);
    int num = numbers.get(0);  // numbers list의 요소들이 integer만 들어갈 수 있다는 것을 보증하므로 형변환의 필요가 없다.
}
  • 제네릭을 사용하지 않을 경우 List의 요소들이 Object 타입으로 들어가게 되어 형변환을 해 주어야 한다.
  • 제네릭을 사용하면 list의 요소들이 정의된 타입으로 들어가기 때문에 형변환이 필요가 없다.
profile
발전하고 싶은 백엔드 개발자

0개의 댓글

관련 채용 정보