티스토리 뷰

Java

Generics란?

deerfrd 2017. 2. 8. 09:15

제네릭스란?

ArrayList<String> arrList = new ArrayList<String>();


우리가 객체를 생성할 때,

ArrayList arrList = new ArrayList(); 

위와 같이 생성했었다. 그렇다면 제네릭스로 선언하는건 또 뭘까?



물론 기존 방식대로 객체를 사용해도 당장은 문제가 없다. 하지만 형 변환에서 문제가 생긴다.


제네릭스를 사용하지 않는다면,

ArrayList arrList = new ArrayList(); //제네릭스를 생략하면 arrList는 Object형 객체로 생성 됨


arrList.add("Hi");

arrList.add("World");


String hi = (String)arrList.get(0);

String world = (String)arrList.get(1);


이런식으로 해당 값을 불러올 때 형변환을 반드시 해줘야 한다.

왜냐면 new로 객체를 생성할 때, 명시적으로 형을 안주었기 때문에 디폴트(?)인 Object형이 되어버렸기 때문이다.


그렇다면 위의 내용을 제네릭스로 표현해보자.

ArrayList<String> arrList = new ArrayList<String>(); //이렇게 선언하면 이 arrList라는 ArrayList에는 String형 자료만 담을 수 있다는 의미가 된다.


arrList.add("Hi");

arrList.add("World");


String hi = arrList.get(0);

String world = arrList.get(1);

이렇게 되면 arrList의 값을 꺼내올 때에도 String형으로 형 변환을 해주지 않아도 된다.




이런 Generics는 HashMap에서도 사용된다. (key, value의 형을 지정해줌)

HashMap<String, String> hMap = new HashMap<String, String>(); 

지금 예시에서는 키, 값 모두 String 형이라고 명시 했지만, 어떤 자료형이든지 들어갈 수 있다.


단, Generics에서 int형을 명시하고 싶을때는 Integer로 넣어줘야한다. 

원래 Generics에는 원시적타입(primitive type -> 예시:int)을 넣어줄 수 없는데 스택 오버플로우를 찾아보니 자바에서의 제네릭스는 컴파일관련해서 원시적 타입을 쓸 수 없다고 한다.

'Java' 카테고리의 다른 글

HashMap 에서 최대값(Max) 뽑기  (0) 2018.01.31
(cafe24 카페24 호스팅) Access denied ~~ 에러 뜰 때  (2) 2017.04.20
System 클래스의 스트림 멤버들  (0) 2017.02.06
Hello World!  (0) 2017.02.06
추상클래스 vs 인터페이스  (0) 2017.02.06
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함