본문 바로가기
개발/자바

[JAVA] 자바에서의 제네릭(generic)이란?

by 루 프란체 2022. 4. 13.

제네릭(generic)이란?

이것도 이전 글과 마찬가지로 머나먼 옛날에 작성했던 글이다. 고로 틀릴 수도 있다. 근데 대충 한 번 슥 훑어보니 그다지 틀린 듯한 느낌은 들지 않아서 그냥 올린다.

 


 

먼저 결론부터 말하자면 제네릭을 쓰게 되면 그 안에 무엇이 들어있는지 쉽게 확인이 가능하다.

 

그러니까 쉽게 예를 들어 우리가 집안에서 물건을 정리할때 박스에 넣어서 보관한다고 치면 택(Tag)이나 포스트잇으로 내용물을 써서 붙여두지 않으면 일일이 박스를 열어봐야 '아~ 이게 들어있구나.' 하고 알게 되지만, 무엇이 들어있는지 써두거나 붙여두면 박스를 열어보지 않고도 무엇이 들어있는지 알 수 있는 것과 같은 이치이다.

 

제네릭으로 올 수 있는 건 뭐… 리턴형과 마찬가지로 뭐든지 올 수 있다. 그리고 그 외에도 E, T, ? 등의 다양한 예약어가 있는데 뭔지 까먹었다. 아, 중요한 거 하나. 원시변수형은 올 수 없다. 참조변수형인 Integer 이런 식으로 변형해서 써야 사용이 가능하다. 

 

<> 안에 들어가는 내용이 해당 박스안에 무엇이 들어있는지 적어두는 거라고 보면 되는데 예를 들자면 List<String> list = new ArrayList<String>(); 이 있다면, 이 list 안에 들어있는 것들은 전부 String(문자열) 이다. 라는 의미가 되므로 직관성을 좋게 한다는 장점이 있다.

 

또한 위와 같은 List<String> list = new ArrayList<String>(); 의 자료형에 list.add(Integer.parseInt("33333")); 이런식으로 숫자형을 넣으려 하면 에러가 발생함으로써 데이터의 결점을 방지할 수 있는 장점도 있다. 즉, 무결성이다.

 

List<String> list = new ArrayList<String>();
list.add("루 프란체");
list.add(123456); // 에러

 

이 제네릭은 하나만 사용할 수 있는게 아니라, 다음과 같은 방식으로도 사용이 가능하다.

 

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("루 프란체", 1);
map.put("세계최강", "잇츠미"); // 에러

 

자료구조 중 Map 형은  키값, 데이터값의 형태로 자료를 저장할 수 있는데 위처럼 제네릭을 지정해두면 마찬가지로 데이터의 결점도 막을 수 있다. 위의 <String, Integer> 의 경우에는 키값을 String 형으로 자료를 Integer 형으로 넣겠다고 선언했으므로 세번째 줄은 에러가 난다.

댓글