자바 제네릭 Generics 개념 / 타입
우리는 <>안에 그 동안 타입명을 기재했다.
제네릭은 꺾쇠 괄호 <> 이다.
제네릭은 객체에 타입을 지정해주는 것이다.
제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스를 컴파일 할 때, 타입을 체크해주는 기능을 갖는다
=> 객체들의 타입 안정성과 형변환의 번거로움이 줄어드는 기대를 할 수 있음
제네릭은 클래스를 설계할 떄 구체적인 타입을 명시하지 않고, 타입 파라미터로 대체했다가 실제 클래스가 사용될 때 구체적인 타입을 지정함으로써 타입변환을 최소화시킴
제네릭을 사용하는 이유
- 컴파일 단계에서 잘못된 타입 사용될 수 있는 문제 제거가 가능함
- 실행 시 타입 에러가 나는 것을 방지
- 컴파일 시에 미리 타입을 강하게 체크해서 에러 사전에 방지함
- 타입변환 제거가 가능하다
제네릭을 사용하지 않은 경우
- object 타입을 사용해서 빈번한 타입변환을 발생한다.
- 이로인해 프로그램의 성능이 저하될 수 있다
제네릭 타입
선언 시에 클래스 또는 인터페이스 이름 뒤에 “<>” 부호를 붙임
“<>” 사이에는 **타입 파라미터가 위치
*타입 파라미터 : 대문자 알파벳 한 문자로 표현하며 구체적인 타입을 지정해야함
public class 클래스명<T> { .. ‘ } public interface 인터페이스명<T> { ... }
wrapper클래스와 기본데이터 타입 8개에서만 매치되는 클래스 사용이 가능한 방법
제네릭이 있으면 변환 안해도 되는 이점
Wrapper 클래스 : 기본데이터 타입과 매치되는 클래스
byte / short/ int / long/ char/ float/ double/ boolean
Byte / Short / Integer / Long / Character / Float / Double / Boolean
Integer i = int값; ==⇒ 오토박싱 : 인트값 넣어도 자동으로
int i = new Integer(10); ==⇒ 언박싱
**ArrayList<>는 Object 배열을 가지고 있어서 모든 종류 객체를 저장할 수 있다.
❓❗ 실행 중(런타임) 발생하는 에러 중에서 어떻게 하면 이를 컴파일 단계에서 발견할 수 있도록 끌어올 수 있을까? 를 해결하는 것이 지네릭스이다.
ClassCastException(형변환에러)를 지네릭스로 컴파일 단계에서 에러를 발견하도록 해결할 수 있다.
e.x_
위의 사진처럼, 빈 문자열을 만들고자 할 때 null로 초기화 하면 길이를 출력할 때 0 이 아닌 에러가 발생할 것이다.
배열도 마찬가지이다!
따라서 빈 문자열, 빈 배열 등을 선언할 때 null로 초기화하지 말자!
제네릭 타입
선언 시에 클래스 또는 인터페이스 이름 뒤에 “<>” 부호를 붙임
“<>” 사이에는 **타입 파라미터가 위치
*타입 파라미터 : 대문자 알파벳 한 문자로 표현하며 구체적인 타입을 지정해야함
public class 클래스명<T> { .. ‘ } public interface 인터페이스명<T> { ... }
wrapper클래스와 기본데이터 타입 8개에서만 매치되는 클래스 사용이 가능한 방법
제네릭이 있으면 변환 안해도 되는 이점
Wrapper 클래스 : 기본데이터 타입과 매치되는 클래스
byte / short/ int / long/ char/ float/ double/ boolean
Byte / Short / Integer / Long / Character / Float / Double / Boolean
Integer i = int값; ==⇒ 오토박싱 : 인트값 넣어도 자동으로
int i = new Integer(10); ==⇒ 언박싱
**ArrayList<>는 Object 배열을 가지고 있어서 모든 종류 객체를 저장할 수 있다.
❓❗ 실행 중(런타임) 발생하는 에러 중에서 어떻게 하면 이를 컴파일 단계에서 발견할 수 있도록 끌어올 수 있을까? 를 해결하는 것이 지네릭스이다.
ClassCastException(형변환에러)를 지네릭스로 컴파일 단계에서 에러를 발견하도록 해결할 수 있다.
e.x_
위의 사진처럼, 빈 문자열을 만들고자 할 때 null로 초기화 하면 길이를 출력할 때 0 이 아닌 에러가 발생할 것이다.
배열도 마찬가지이다!
따라서 빈 문자열, 빈 배열 등을 선언할 때 null로 초기화하지 말자!
제네릭 타입
선언 시에 클래스 또는 인터페이스 이름 뒤에 “<>” 부호를 붙임
“<>” 사이에는 **타입 파라미터가 위치
*타입 파라미터 : 대문자 알파벳 한 문자로 표현하며 구체적인 타입을 지정해야함
public class 클래스명<T> { .. ‘ } public interface 인터페이스명<T> { ... }
wrapper클래스와 기본데이터 타입 8개에서만 매치되는 클래스 사용이 가능한 방법
제네릭이 있으면 변환 안해도 되는 이점
Wrapper 클래스 : 기본데이터 타입과 매치되는 클래스
byte / short/ int / long/ char/ float/ double/ boolean
Byte / Short / Integer / Long / Character / Float / Double / Boolean
Integer i = int값; ==⇒ 오토박싱 : 인트값 넣어도 자동으로
int i = new Integer(10); ==⇒ 언박싱
**ArrayList<>는 Object 배열을 가지고 있어서 모든 종류 객체를 저장할 수 있다.
❓❗ 실행 중(런타임) 발생하는 에러 중에서 어떻게 하면 이를 컴파일 단계에서 발견할 수 있도록 끌어올 수 있을까? 를 해결하는 것이 지네릭스이다.
ClassCastException(형변환에러)를 지네릭스로 컴파일 단계에서 에러를 발견하도록 해결할 수 있다.
e.x_
위의 사진처럼, 빈 문자열을 만들고자 할 때 null로 초기화 하면 길이를 출력할 때 0 이 아닌 에러가 발생할 것이다.
배열도 마찬가지이다!
따라서 빈 문자열, 빈 배열 등을 선언할 때 null로 초기화하지 말자!