일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- resilience4j
- dynamic query
- SQL
- 오라클 디비
- K6
- 리눅스
- 티스토리
- jsp
- 운영체제
- hyperledger
- spring
- 자바
- 학점
- 초대장
- auto configure
- gradle
- MongoDB
- 유사코드
- 파이썬
- 자바 프로젝트
- c#
- oracle
- 백준 알고리즘
- JVM
- 파이썬 소스
- 문법 정리
- smart cast
- 오라클
- 알고리즘
- 프로젝트
- Today
- Total
모종닷컴
자바8 - 제네릭 본문
1. 제네릭이란 무엇이고, 왜 사용하는 걸까??
- 컬렉션, 람다식, 스트림 등 등 잘못된 타입이 들어오는 것을 방지
- API 도큐먼트에 자주 보인다.
- *실행 시 타입 에러가 나는 것보다 컴파일 시에 미리 타입을 강하게 체크해서 에러를 사전에 방지
- 컬렉션에서 elements를 가져올 때 항상 타입 변환을 해야하는데, 제네릭으로 타입을 한정 짓게 되면 타입 변환을 할 필요가 없이 고정적이기 때문에 프로그램의 성능이 향상된다.
2. Object로 쓰면 되지 않나요?
Object를 쓰게 되면 위에서 언급했던 것과 같이 타입을 반환을 할 때 Object로 반환하기 때문에 이에 다시 타입을 강제 변환시켜야 한다. 때문에 타입 변환이 빈번해지면 전체 프로그램 성능에 좋지 못한 결과를 가져올 수 있다. 특히 자주 쓰이는 것이라면..
3. 제네릭 메소드
제네릭 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드입니다. 리턴 타입과 매개 타입으로 타입 파라미터를 사용하면 됩니다.
public <타입 파라미터> [리턴 타입] [메소드명(매개 변수...)] {
...
}
기존 메소드에서 타입 파라미터가 추가되었습니다.
4. 제한된 타입 파라미터
제네릭을 사용하되 그 타입 파라미터에 지정되는 구체적인 타입을 제한할 수 있습니다.
< T extends 최상위타입> 이런식으로 선언하여 상위 타입 혹은 하위, 또는 구현 클래스만 지정할 수 있게 할 수 있습니다.
단, 이렇게 제한을 하고 난 후 {} 중괄호 안에서 타입 파라미터 변수로 사용 가능한 것은 상위 타입의 필드, 메소드로 제한됩니다.
5. 와일드카드 타입<?>
<?> : 제한 없음.
<? extends 상위타입> : 상위 클래스 제한
<? super 하위 타입> : 하위 클래스 제한
추가.
제네릭은 전체적으로 타입 변환을 사라지게 하고, 오류를 줄임으로 프로그램의 성능을 향상시킨다. 하지만 제네릭을 사용할 때 인지하고 있어야 하는 점이 있다.
"자바의 제네릭 자료형은 객체를 생성할 수 없다"
이는 제네릭스의 "자료형 지우기"라는 특성에서 발생한다. 자료형 지우기란 컴파일러가 컴파일시 자료형에 대한 정보를 모두 검사하여 이에 문제가 없을시 제네릭에 관한 정보가 전혀 없는 바이트코드를 생성한다.
(* 제네릭을 사용하기 전의 코드와 호환성을 유지하기 위해 제네릭에 대한 정보를 삭제한다)
때문에 컴파일된 바이트코드에는 존재하지 않는 제네릭 자료형의 객체는 생성을 할 수 없게 된다.
'Programming > JAVA' 카테고리의 다른 글
캡슐화, 추상화, 인터페이스 (0) | 2018.10.10 |
---|---|
자바8 - List (0) | 2018.10.02 |
ArtifactTransferException: Failure to transfer ... (4) | 2018.08.27 |
자바 8 - 람다식 (0) | 2018.08.19 |
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter (0) | 2018.05.27 |