지네릭스란(Generics)란?
- 다양한 타입의 객체를 다루는 메서드, 컬렉션에 객체를 제한하는 기능
- 특정 메서드나 컬렉션에 들어가는 자료형을 제한하는 것이다.
지네릭스의 필요성
- String 객체만 들어가길 원하는 ArrayList가 있다고 가정 시 여러가지 문제점 있다.
public static void main(String[] args){
List strList = new ArrayList();
}
- 컴파일러가 실행(런타임) 전에 확인할 때는 문제가 없다고 했지만, 런타임 시 다음과 같이 에러 발생
public static void main(String[] args) {
List strList = new ArrayList();
strList.add(10);
String s1 = (String)strList.get(0);
System.out.println(s1);
}
3가지 문제점?
- 문자열이 아닌 정수형이 추가된다.
- 정수형 타입은 문자열로 형변환 연사자를 사용하여 형변환을 할 수 없다
- 실제 런타임 시 데이터가 들어가기에 컴파일러가 잡아내지 못한다.
지네릭스 사용
// <> 안에 자료타입 입력 시 해당 자료타입만 해당 컬렉션이 담을 수 있게 된다.
public static void main(String[] args){
List<String> strList = new ArrayList<>();
}
- 다음과 같이 지네릭스를 활용하니 지정한 타입 외에는 컴파일 시점에서 체크해 줄 수 있기에 프로그램에 신뢰성과 안정성을 확보할 수 있다.
지네릭스와 다형성

- 다음과 같이 클래스의 상속관계가 형성되어 있다고 가정해보면, 최상위 클래스인 Animal타입으로 지네릭스를 지정하면 Animal만 컬렉션에 담을 수 있을까?|
→ 정답은 상속관계에 있는 3개 클래스의 모든 객체를 저장할 수 있다.
class Animal{}
class Bird extends Animal{}
class Sparrow extends Bird{}
class Eagle extends Bird{}
public class Generic {
public static void main(String[] args) {
List<Animal> animals = new ArrayList<>();
animals.add(new Sparrow());
animals.add(new Eagle());
animals.add(new Bird());
animals.add(new Animal());
for (Animal animal : animals) {
System.out.println(animal.getClass().getName());
}
}
}
//========= 결과 ===========
Sparrow
Eagle
Bird
Animal
지네릭스 클래스

- 클래스 명 옆에 지네릭스를 붙여서 선언한 클래스를 지네릭 클래스라 한다.
- 클래스 내부적으로 지네릭스가 사용되는 클래스이다.
- 지네릭스에 들어가는 자리의 변수를 타입변수, 타입 매개변수라 한다.
- 타입변수로서 들어간 문자는 타입 문자라 한다.(=문자는 어떤 것을 넣어도 상관 X)
- <T>는 타입 변수로 객체 생성 시 해당 객체에 어느 자료형이든 저장 가능하단 뜻
- 원시타입은 일반 클래스를 의미한다.
class Box<T> {
ArrayList<T> list = new ArrayList<>();
void add (T item) { list.add(item); }
T get(int i){ return list.get(i); }
}
public class Generic {
public static void main(String[] args) {
Box<String> box = new Box<>();
}
}
------------------------------------------------------------------
class Box {
ArrayList<String> list = new ArrayList<>();
void add (String item) { list.add(item); }
String get(int i){ return list.get(i); }
}
- 실제 타입변수에는 객체가 생성 시 타입이 지정된다.
- 객체 생성 시 지정된 타입은 타입문자가 있는 부분들을 대체하여 채워진다
참고자료
지네릭스(Generics) - 지네릭 소개, 지네릭 클래스 :: 컴퓨터 공부하는 블로그 (tistory.com)
지네릭스(Generics) - 지네릭 소개, 지네릭 클래스
지네릭스란(Generics)란? 다양한 타입의 객체를 다루는 메서드, 컬렉션에 입력 가능한 객체를 제한하게 하는 기능이다. 좀 더 직관적으로 쓰자면 특정 메서드나 컬렉션에 들어가는 자료형을 제한
sgcomputer.tistory.com
'P.L > Java' 카테고리의 다른 글
컬렉션 프레임워크(List, Set, Map) (0) | 2023.05.11 |
---|---|
열거형(enums) (0) | 2023.03.26 |
유용한 배열 사용 - java.util.Arrays 클래스 (0) | 2023.02.08 |
예외처리(Exception handling) (0) | 2023.02.01 |
java.lang.Character 클래스 (0) | 2023.01.28 |