Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 롬복
- 게시판댓글
- openaddressing
- git
- Ajax
- JDBC
- 타임존
- ResponseBody
- 크리스탈레포트누끼
- fcmwebpush
- 추상클래스
- 서버기본
- 크리스탈레포트이미지
- 오라클오류
- @RunWith
- jdbc연결안됨
- 크리스탈레포트그림
- lombok
- 스토리지기본
- EC@
- 크리스탈리포트이미지
- 자료구조
- 타임존설정
- import안될때
- 서블릿용어
- RequestBody
- 이미지누끼
- 크리스탈리포트이미지삽입
- api문서만들기
- IT기본지식
Archives
- Today
- Total
엠마의 개발공부일지
지네릭스(제네릭, Generics) 한장 정리 본문
728x90
*지네릭스란?
: 다양한 타입의 객체를 다루는 메서드나 컬렉션 클래스에, 컴파일 시의 타입체크를 해주는 기능
: 클래스 or 인터페이스에 어떤타입의 변수를 넣고싶은가? 를 먼저 생각해봐야한다.
: 타입을 파라미터로 가지는 클래스 or 인터페이스, 컴파일시 구체적인 타입이 결정됨.
public class 클래스명<T> {....}
public class 인터페이스명<T> {....}
*지네릭스의 필요성
장점 : 타입안정성 제공, 타입체크와 형변환 생략이 가능하므로 코드가 간결해진다
Car 클래스 | Main클래스 |
- car클래스의 멤버변수 object는 타입이 Object형(최상위 클래스, 그래서 모든타입을 다 저장가능) - 그래서 main클래스에 String타입도 object타입도 모두 담을 수 있지만, 꺼낼때 형변환을 해줘야한다. (한 클래스에서 사용할 타입을 지네릭스로 지정해두는게 효율적이다, 무턱대고 object사용은 곤란함) |
*지네릭스 사용이점
사용X | 사용O |
ArrayList에는 다양한 타입이 담길 수 있음 그래서 list에 보통 최상위 타입인 object타입으로 담김 list에 저장된 값을 가져오려면 object -> String(원하는 타입)으로 형변환을 해야함. |
저장할 타입을 String으로 정함. 다른타입을 저장시 에러발생 값을 꺼낼때 형변환하지 않아도 됨. |
*지네릭스 사용방법
1. 클래스 선언할때 (<T>사용) | 2. 인스턴스 생성시(T에 원하는 타입) | 3. 컴파일시 타입파라미터가 구체적인 클래스로 변경됨 |
*멀티타입 파라미터
클래스생성 | 인스턴스생성 |
Product클래스에는 두가지타입의 변수를 담을 수 있다 | 2가지 변수에 각각 값을 지정하고 가져올때, 그 타입에 맞게 지정하고 가져와야한다. |
*지네릭스 메서드
- 선언
- 리턴타입앞에 선언 / 리턴타입 & 매개변수에 사용
- ex) public <T> Car<T> carMethod(T t) {.....}
- 호출
- Car <integer> car = carMethod(100);
- 매개값을 보고 구체적 타입을 추정함 (매개변수에 int타입을 넣어서, 리턴타입이 integer일것이라고 추정)
728x90
'Stack > Java' 카테고리의 다른 글
@RequiredArgConstructor 사용하기 (+인텔리제이 롬복(lombok)라이브러리 추가하기) (0) | 2020.12.11 |
---|---|
isEqualTo vs isSameTo 비교(깨알 instanceof연산자내용 포함) (0) | 2020.12.09 |
JUnit test를 해야하는이유 (일반 Java test코드랑 비교하기) (0) | 2020.12.03 |
InputStream 사용법 (0) | 2020.10.29 |
인터페이스정리 및 추상클래스와 비교 (0) | 2020.10.29 |
Comments