티스토리 뷰

IT/Java

Java Generics

underbell 2014. 11. 26. 10:08

출처: http://docs.oracle.com/javase/tutorial/java/generics/types.html

http://codecat.tistory.com/183

 

 

Generics이란?

generics은 class와 interface를 type화 시킬 수 있다.  generics를 사용하면 다음과 같은 이점이 있다.

  • 컴파일 시에 type 체크를 할 수 있다.

컴파일 시에 generic 코드를 체크 함으로써 에러를 미리 방지 할 수 있다.

  • cast를 생략할 수 있다.

List list = new ArrayList();

list.add("hello");

String s = (String) list.get(0);

를 generics을 사용한다면,

 

List<String> list = new ArrayList<String>();

list.add("hello");

String s = list.get(0);

  • generic algorithm을 사용 할 수 있다.

다른 type들로 이루어진 collections에 대한 generic algorithm을 사용할 수 있다.

 

일반적인 Generics  사용법

 

generic class는 다음과 같은 형태이다.

class name<T1, T2, T3, .... Tn> { ... }

 

예제를 통해 보자.

  1. public class Box {  
  2.     private Object object;  
  3.   
  4.     public void set(Object object) { this.object = object; }  
  5.     public Object get() { return object; }  
  6. }  

 

generic을 써서 위의 코드를 다시 작성하면,

  1. /** 
  2.  * Generic version of the Box class. 
  3.  * @param <T> the type of the value being boxed 
  4.  */  
  5. public class Box<T> {  
  6.     // T stands for "Type"  
  7.     private T t;  
  8.   
  9.     public void set(T t) { this.t = t; }  
  10.     public T get() { return t; }  
  11. }  

 

 

보는 바와 같이 Object 대신 type T를 사용할 수 있다.  왜 T냐면.. 보통 다음과 같은 conventions를 따르기 때문이다.

 E

 Element

 K Key

 N

 Number
 T Type
 V Value

 S, U, V

 2nd, 3rd, 4th types

 

 

Generic Type 사용법

 

geneirc Box class를 참조시에 다음과 같이 한다.

Box<Integer> integerBox;

 

위의 경우 Type argument이다. 여기서 Type paramemter 랑 Type argument의 차이점을 보자.

 

Type Parameter and Type Argument Terminology: Many developers use the terms "type parameter" and "type argument" interchangeably, but these terms are not the same. When coding, one provides type arguments in order to create a parameterized type. Therefore, the T in Foo<T> is a type parameter and the String in Foo<String> f is a type argument. This lesson observes this definition when using these terms

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/12   »
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
글 보관함