인코딩의 Decoding

반응형

Java에서 ArrayList나 HashMap등을 선언할때 자료형 이름 뒤에 <String> , <String,String> 등을 선언하는데 어떤 의미로 선언하는 것일까?

-->선언되는 자료형에 들어갈 객체 타입을 정해주는 제네릭스(Generics)이다. 예를 들어 ArrayList<String> listObjec= new ArrayList<String>에는 Stirng 자료형만 들어갈 수 있다.

 

예시)

ArrayList<String> listObjec = new ArrayList<String> // String 자료형만 들어갈 수 있다.

listObject.add("str1"); // ok
listObject.add(123);	// x 이렇게 하려면 <Integer>로 선언

+

제네릭스가 필요한 이유

 

1. 자료형 선언만 보면 어떤 자료형을 넣는 용도인지 알 수 있다.

2. 객체에서 자료를 꺼낼때 명시적 형변환이 필요없다

예시)

//제네릭스 사용안한 경우
ArrayList aList = new ArrayList(); //제네릭스 없음
aList.add('str2'); //가능 , String 자료형 추가
get을 이용하여 자료 이용할때
String strVar = (String)aList.get(0) //명시적 형변환 필요

//제네릭스 사용
ArrayList<String> strList = new ArrayList<String>(); //제네릭스 존재
strList.add('str3')	// 가능
String strVar2 = strList.get(0) // (String)없이 가능

+

3. 제네릭스를 이용하지 않으면 명시적형변환 할때 오류를 발생시킬 수 있다.

ArrayList bList = new ArrayList();
bList.add(321); //int형 자료를 넣음
//bList의 첫번째 요소가 String인줄 알고 추출하려는 경우
//bList의 첫번째 요소는 int형
String strVar3 = (String)bList.get(0); //int형이므로 오류
반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band