카테고리 없음

자바 제네릭 Generics 개념 / 타입

lily_y 2023. 10. 3. 20:18


우리는 <>안에 그 동안 타입명을 기재했다.

제네릭은 꺾쇠 괄호 <> 이다.

제네릭은 객체에 타입을 지정해주는 것이다. 

 

 

 

 

제네릭은 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스를 컴파일 할 때, 타입을 체크해주는 기능을 갖는다

=> 객체들의 타입 안정성과 형변환의 번거로움이 줄어드는 기대를 할 수 있음

 

제네릭은 클래스를 설계할 떄 구체적인 타입을 명시하지 않고, 타입 파라미터로 대체했다가 실제 클래스가 사용될 때 구체적인 타입을 지정함으로써 타입변환을 최소화시킴

 

 

 

제네릭을 사용하는 이유

  • 컴파일 단계에서 잘못된 타입 사용될 수 있는 문제 제거가 가능함
  • 실행 시 타입 에러가 나는 것을 방지
  • 컴파일 시에 미리 타입을 강하게 체크해서 에러 사전에 방지함
  • 타입변환 제거가 가능하다

 

제네릭을 사용하지 않은 경우

  • 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로 초기화하지 말자!