일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 카우치코딩 #couchcoding #6주포트폴리오 #6주협업프로젝트v
- #스파르타코딩클럽후기 #내일배움캠프후기
- address
- taskkill
- 서버사이드렌더링
- 카우치코딩 #couchcoding #6주포트폴리오 #6주협업프로젝트
- gitbash
- 코딩온라인
- 마크다운
- Anaconda
- 출처: 자바의 신 8장
- PID
- 클라이언트사이드렌더링
- github markdown
- 자바파이썬
- Morphological analysis #Corpus
- terminate
- SSR
- 파이콘
- expression statement is not assignment or call html
- Kakao
- github
- khaiii
- Technical Writing
- 필사
- 파이썬
- 모바일웹스킨
- 비동기
- Machine Learning
- 플젝후체크
- Today
- Total
개발 일기
제네릭, 타입변수 본문
제네릭
-컴파일 시 타입을 체크해주는 기능 (ClassCastException 형변환 에러 방지)
-객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줌 (코드도 간결해짐)
왼쪽 예제를 보면, get(0)이 object 타입이기에 형변환을 해야한다.
반면 오른쪽예제에서는 tvLIst가 <Tv> 형이기 때문에 형변환이 불필요하다.
ArrayList<E> 지네릭 클래스. 클래스 안에 object 타입이 있는 것들은 일반 클래스에서 Generic class 로 바뀌었다.
이전에는 다른 타입을 저장하면 체크를 못해줬는데, 제네릭스의 등장이후 이를 컴파일 에러로 잡을 수 있게 되었다. \
클래서 옆에 <E> 가 들어가면, 지네릭 클래스다
<Integer>라고 지정해줬기 때문에, (Integer)형변환을 생략할 수 있다.
public class GenericTest {
public static void main(String[] args) {
// ArrayList<Integer> list = new ArrayList<E>(); // JDK 1.5 이전 지네릭스 도입 이전.
// ArrayList<Object> list = new ArrayList<Object>(); //jdk 1.5 이후
ArrayList<Integer> list = new ArrayList<Integer>(); //jdk 1.5 이후
list.add(10); //list.add(new Integer(10));
list.add(20);
list.add(30);
Integer i = list.get(2); //형변환 생략 가능
System.out.println(list);
}
}
Generics 는 타입 체크를 강화한다.
여러 타입을 넣고 싶다면, ArrayList<Object>라고 넣어준다. 단 Object Class 는 형변환이 필요하다.
public class GenericTest {
public static void main(String[] args) {
// ArrayList<Integer> list = new ArrayList<E>(); // JDK 1.5 이전 지네릭스 도입 이전.
ArrayList<Object> list = new ArrayList<Object>(); //jdk 1.5 이후
list.add(10); //list.add(new Integer(10));
list.add(20);
list.add("30");
String i = (String)list.get(2); //Object -> spring convert 가 안되기 때문에, String 형변환 추가.
System.out.println(list);
}
}
타입변수란?
제네릭 클래스 작성시 기존의 Object 타입 대신 타입변수(E) 선언해서 사용 (JDK 1.5이후로 바뀌었다)
JDK 1.5 이후로 Object를 포함한 클래스들은 Generic 클래스로 바뀌었다.
<T> 타입 혹은 <E> element 로 선언한다.
실제로 응용할 때는, <T> 혹은 <E> 대신 실제 타입을 지정한다.
글 맨 처음에 나온 예제처럼, 타입변수대신 실제 타입이 지정되면 형변환을 생략할 수 있다.
제네릭 메서드
public <자료형 매개변수> 반환형 메서드 이름 (자료형 매개변수) { }
*반환형 앞에 사용하는 <자료형 매개변수> 는 여러개일 수 있으며, 이는 메서드 내에서만 유효하다.
출처: 자바의 정석 ch12-1 , 자바 프로그래밍 입문
'Java&Spring > Java' 카테고리의 다른 글
BJ2741_ For 문 익히기 (0) | 2021.12.17 |
---|---|
[프로젝트] 에러 해결 - 일반 회원 가입/ 카카오 회원 username 의 고유값 처리 (0) | 2021.12.16 |
인터페이스란? (0) | 2021.12.12 |
추상클래스란? (0) | 2021.12.12 |
classpath:/static/ 경로 설정 (0) | 2021.11.27 |