제네릭 이해하기

이월(0216tw)·2024년 5월 9일
post-thumbnail

제네릭(Generic)이란?

  • 사전적으로 일반적인 이라는 의미
  • java에서는 클래스 내부에서 사용할 데이터 타입을 외부에서 지정해 일반화 하는 것

제네릭 형태 예시 <>

우리가 사용하는 ArrayList 에 < E > 라고 작성이 된 부분이 제네릭의 형태이다.
이를 타입매개변수 라고 하는데, 말그대로 타입을 매개변수처럼 받아 쓴다는 의미다.
외부에서 받은 매개변수타입을 통해 다형성을 실현할 수 있다.
제네릭 타입이 없다면 ArrayList 를 구현할때 Integer타입 ,, String타입 ,,등등 종류별로 다 만들어야 하니까 소스코드가 엄청 커질 것이다.

(원시 타입은 타입으로 줄 수 없음 like int , boolean 등..)


직접 제네릭 클래스를 만들어보자

T라는 명칭을 이용해서 List와 같은 기능을 하는 제네릭 클래스를 만들었다.
(참고로 위의 E 나 T 같은 명칭은 자유롭게 사용해도 된다.)
하지만 관례적인 사용을 따르는 것이 좋다.

그리고 이렇게 사용을 하면 된다.
위에서는 String이라는 타입을 제네릭 타입매개변수로 주었기 때문에
컴파일하게 되면 아래와 같은 형태가 되는 것이다.


제네릭클래스는 다형성이 적용된다.

기존의 다형성 관계(상속 관계)에 있는 대상들도 처리할 수 있다.

먼저 Number 타입을 제네릭 매개변수로 주어 새로운 리스트를 만들었다.
그 안에 각각 int , double , long 형 데이터를 추가했다.
(원래 원시타입은 적용되지 않으나, wrapping 된 것으로 보임)

Number add1 = new Integer(12); 
Number add2 = new Double(23.5); 
Number add3 = new Long(509325029301235); 
이런식으로 부모 = 자식 을 통한 업캐스팅이 유효하다는 의미이다.

다운캐스팅도 가능하지만 이 경우 형변환 에러가 발생할 수 있다.
예로 num4 의 경우 Long형의 데이터를 Double로 다운 캐스팅 할 수 없으니 에러가 발생한다.

제네릭 클래스 장점

  • 컴파일 시점에 예외를 확인할 수 있어 타입 안정성이 강화된다.
  • 소스코드 중복을 줄일 수 있다.

* 제네릭의 공변성 , 제네릭 메서드 , 상속 범위 제한 등이 더 궁금하다면 아래 자료를 참고하길 바란다. (정리를 정말 잘해주셨다 👍👍👍 )

참고 자료

https://inpa.tistory.com/entry/JAVA-%E2%98%95-%EC%A0%9C%EB%84%A4%EB%A6%ADGenerics-%EA%B0%9C%EB%85%90-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%B3%B5%ED%95%98%EA%B8%B0 (inpa님의 티스토리)

https://st-lab.tistory.com/153 (Stranger's LAB 님의 티스토리)

profile
#SQLD강사 #AI개발 #AI강사 #개발자 개발도 하고 강의도 하지만 고민을 제일 많이 합니다

0개의 댓글