Notice
Recent Posts
Recent Comments
Link
hyeongwoo's blog
[Java] 제네릭 본문
제네릭(Generic)
제네릭은 하나의 값에 여러 데이터 타입을 가질수 있게 만드는 방법이다. 제네릭은 클래스나 메소드에서 사용할 내부 데이 타입을 컴파일시의 미리 지정한다.
제네릭을 사용하면 타입을 유연하게 처리할 수 있으며 컴파일단계에서 타입체크를하여 잘못된 타입을 사전에 방지 할 수 있다. 외부에서 직접 타입을 지정해주기 때문에 코드를 관리하기도 편하다.
ArrayList<String> arr1=new ArrayList<String>();
ArrayList<Integer> arr2=new ArrayList<Integer>();
ArrayList<Double> arr3=new ArrayList<Double>();
자바에서 제공하는 ArrayList 클래스가 여러개의 타입을 갖는 예시이다. 직접 코드를 작성시에 타입을 지정해 줄 수있다.
아래는 제네릭 클래스 예시 코드이다.
public class Box<T> {
private T[] ob;
private int size;
public Box(T[] ob,int size) {
super();
this.ob = ob;
this.size=size;
}
public T[] getOb() {
return ob;
}
public void setOb(T[] ob) {
this.ob = ob;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
//제네릭 메소드
public static <T> Box<T> makeBox(T[] o,int size){
Box<T> box =new Box<T>(o,size);
box.setOb(o);
return box;
}
}
제네릭 타입 매개변수
- 위의 클래스 Box<T> 에서 <>안의 T를 타입 매개변수라고 한다. (T가 아닌 다른 문자여도 상관없다.)
- T는 어떠한 클래스타입도 받아드릴 준비가 되었다는 의미이다.
아래는 타입매개변수에 String,Integer,Double 형 자료형타입을 넣어서 Box객체들을 생성하였다. 단 타입매개변수의 타입은 참조 타입만 들어갈수 있다.
Box<String> box1 =new Box<String>();
Box<Integer> box2 =new Box<Integer>();
Box<Double> box3 =new Box<Double>();
타입 매개변수의 이름 규칙
- 한 문자로 이름을 짓는다
- 대문자로 이름을 짓는다.
타입 | 설명 |
<T> | Type |
<K> | Key |
<N> | Number |
<E> | Element |
<V> | Value |
<>의 문자는 아무문자나 들어가도 되고 심지어는 한 글자이상의 문자가 들어가도 된다. 하지만 위의 규칙을 지키는것이 관례이다.
제네릭 클래스의 타입인자 제한
- 제네릭 타입을 특정 타입으로 제한 시킬수있다.
class Box<T extends Number>{}
제네릭타입을 Number를 상속받은 클래스만 올수 있도록 제한한다.
제네릭 타입 제한이 중요한 이유
public class Box<T extends Number>{
private T num;
public Box(T a){
this.num=a;
}
public int getNum(){
return this.num.intValue();//숫자형만 허용이 가능
}
}
위의 코드 처럼 특정 타입의 메소드가 사용될 시 타입을 제한해 주어야한다.
'JAVA' 카테고리의 다른 글
[Java] 접근제한자 (0) | 2024.02.13 |
---|---|
[Java] 컬렉션 (0) | 2024.02.12 |
[Java] final (0) | 2024.02.10 |
[Java] IO_(입출력스트림) (0) | 2024.02.02 |
[Java] None_Static영역과 Static영역 (0) | 2024.02.02 |