Day 56

ChangWoo·2023년 5월 31일
0

자바의 정석

목록 보기
53/71
post-thumbnail

ch 12-1 지네릭스란?

지네릭스(Generics)란?

  • 컴파일시 타입을 체크해주는 기능(compile-time-type-check) - JDK1.5
  • 객체의 타입 안정성을 높이고, 형변환의 번거로움을 줄여줌
// Tv객체만 저장할 수 있는 ArrayList를 생성
ArrayList<Tv> tvList = new ArrayList<Tv>(); // ArrayList는 Object배열을 가지므로 모든 종류의 객체가 저장가능하다.
tvList.add(new Tv());	// OK.
tvList.add(new Audio)); // 컴파일 에러. Tv 외에 다른 타입은 저장 불가

  • 지네릭스의 장점
  • 1.타입 안정성을 제공한다.
  • 2.타입체크와 형변환을 생략할 수 있으므로 코드가 간결해 진다.

예외의 상속계층도

  • Exception = Runtime error(실행 중 발생하는 에러)
  • RuntimeException = 프로그래머 실수로 발생에러
  • ClassCastException = 형변환에러
  • NullPointerException = 참조변수가 null일 때 메서드 호출시 에러
  • IndexOutOfBoundException = 배열 범위 벗어나는 것
  • 지네릭스란, RuntimeException을 Compiletime에러로 수정하는 것이다. (프로그램 실행 중 예외가 발생해 종료되지 않도록 사전에 방지)
    < Ex >
String str = null  // 이렇게 하지 않고,
String str = "" ; // 빈문자열로 표시한다. (NullPointerException)
str.length()를 실행 시 str은 null .length()는 메서드호출이므로 NullPointerException 발생
그러나, 빈문자열일 경우, 결과값이 0이므로 NullPointerException이 발생하지 않는다.
Object[] objArr = null // 이렇게 하지 않고,
Object[] objArr = new Object // 길이가 0인 배열 (= Object[] objArr={};)

ch 12-2,3 타입변수

타입변수

  • 클래스를 작성할 때, Object타입 대신 타입 변수(E)를 선언해서 사용.
  • ArrayList< 변수이름 > : 타입변수
  • 변수이름은 E 이외에도 사용 가능하다.

타입 변수에 대입하기

  • 객체를 생성시, 타입 변수(E) 대신 실제 타입(Tv)을 지정(대입)
// 타입 변수 E 대신에 실제 타입 Tv를 대입
ArrayList<Tv> tvList = new ArrayList<Tv>();


  • Tv가 E에 대입된다.
  • 타입 변수 대신 실제 타입이 지정되면, 형변환 생략가능
  • 예전에는 타입이 Object라서 형변환이 필요했지만, 현재는 바꼈으므로 형변환 생략가능(Tv로 타입이 일치하므로)
profile
한 걸음 한 걸음 나아가는 개발자

0개의 댓글