비실이의 개발 성장기

java 제네릭(Generic) 이란?? 본문

백엔드/Java

java 제네릭(Generic) 이란??

DubbingLee 2016. 12. 8. 21:09

최근 개발 스터디를 하던 중,


제네릭을 사용한 경우가 있었습니다.


그러나, 제네릭을 모르는 친구가 알려달라 물어보면 


"그냥 <> 안에 제한하고 싶은 타입을 써"


라고 답했을 것 입니다.




이번에 제네릭을 공부하고 확실하게 이해하려 합니다.






Q. 제네릭이 무엇인가?


A. 제네릭은 클래스에서 사용할 타입을 클래스 외부에서 설정하는 것 이라고 합니다.


제네릭 선언은  클래스<사용할 타입>  으로 합니다.


코드를 통해 알아보겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class CustomStack<T> {
    
    List<T> customStack = new ArrayList<>();
    
    public void pop( T inputItem ) {
        customStack.add( inputItem );
    }
    
}
 
public class GenericEx_1 {
    
    public static void main(String[] args) {
        CustomStack<String> stringStack = new CustomStack();
        
        CustomStack<Integer> integerStack = new CustomStack();
    
        stringStack.pop( "홍길동" );
        
    }
    
}
cs




CustomStack 클래스는 <T> 로 제네릭이 설정되어 있습니다.


CustomStack 내부에 있는 List 타입의 customStack 객체도 <T> 로 


제네릭 설정이 되어있습니다.


 


GenericEx_1 클래스에는 두 개의 객체 stringStack 과 integerStack 이 있습니다.


 두 객체의 타입은 CustomStack 이구요.


CustomStack 클래스를 사용하려면 제네릭이 설정되어 있으니


사용하는 쪽에서도 제네릭 타입을 명시 해줘야 합니다.


저는 타입을 <String> <Integer> 으로 설정 해줬습니다.



즉, stringStack 객체는 타입이 String 인 데이터만


integerStack 객체는 타입이 int 인 데이터만 사용할 수 있습니다.




정말 그런지 확인 해보겠습니다.



23라인 stringStack.pop( "홍길동" ); 을 입력하고 컴파일하니


에러가 발생하지 않았습니다.




그러면 String이 아닌 int 타입을 넣어보겠습니다.




컴파일 해보니 


"CustomStack 클래스와 메서드 pop()은 int 타입의 인자를 사용할 수 없다."


라고 에러가 발생했습니다.




이 처럼, 제네릭을 사용하면 클래스 내부에서 사용하는 데이터의 타입을 지정할 수 있고,


타입을 잘못 사용하여 발생하는 에러를 최소화 할 수 있습니다.




이는 마치, 회원가입 기능에서 '이름 입력' 란에는 반드시


한글이나 영문만 들어가야 하는데, 사용자가 숫자를 넣게되면


에러가 발생하게 됩니다.


이를 막기 위해 개발자는 숫자가 입력되지 못하도록 예외처리를 합니다.




제네릭의 사용도 위 경우와 비슷하다고 생각합니다.






Q.그럼 제네릭에는 어떠한 타입을 설정할 수 있을까요?


A. 제네릭의 타입으로는 참조형 데이터 타입만 설정 가능합니다.



즉, int나 char, float, double과 같은 기본형 데이터 타입은 설정할 수 없습니다.


하지만, 위 예제에서 Integer로 설정한 것을 봤습니다.



Integer와 같은 형태를 퍼클래스 (wrapper class) 라고 부릅니다.


래퍼클래스는 기본형 데이터 타입 (primitive type) 을 참조형 데이터 타입으로 바꿔주는 클래스 입니다.


이미지 참고 : http://studymake.tistory.com/420





# 잘못된 점이 있으면 댓글로 남겨주세요~



0 Comments
댓글쓰기 폼