본문 바로가기

좋아하는 것_매직IT/26.Java

제네릭 클래스(generic class) 깔끔하게 정리하기

반응형
질문) 제네릭 프로그래밍이란?

정답!
 - 제네릭 프로그래밍(generic programming) 은 다양한 종류의 데이터를 처리할 수 있는 클래스와 메소드를 작성하는 기법을 말함.

제네릭(generic)의 특징 정리하기
 - 참고로, 제네릭은 Java 버전 1.5 부터 추가된 기능.
 - 복잡한 어플리케이션을 개발할 때 발생하는 여러가지 버그들을 많이 줄일 수 있음.
 - 보통 Object 타입의 변수를 사용하는 것보다 안전하고 사용하기 쉬운특징을 지님.
    - Object는 모든 클래스의 상위 클래스..
    - Object 를 사용하면, 데이터를 꺼낼 때마다 항상 형변환이 들어가야하는 단점...!!


질문) 어떤 종류의 객체도 저장할 수 있는 배열은 어떻게 만들까?

정답! 
- ArrayList 클래스, ArrayList<T> 
참고로, 위의 "T" 의 의미는 배열에 저장되는 타입을 나타내는 매개 변수를 의미함.
즉, 제네릭을 한마디로 말하자면....
 - 클래스를 정의할때, 클래스 안에서 사용되는 자료형을 구체적으로 명시하지 않고, "T" 와 같이 기호로 적어놓는 것!!

다시말해서, 객체를 생성할때, T자리에 구체적은 자료형을 적어주면 됨.


질문) 제네릭을 어떻게 이용할까? 

제네릭 클래스에서는 타입을 변수로 표시함.
 - 이것을 우리는 "타입매개변수" 라고 말을 하고, 타입매개변수는 객체 생성시에 프로그래머에 의해서 결정됨.

보통선언은 아래와 같이 함.

class MagicBox<T> {
	private T data;

	public void setData(T data) { this.data = data; }
	public T getData()          { return data; }
}


그리고, 타입 매개 변수의 값은 객체를 생성할 경우, 구체적으로 정해진다.

아래는 예시이다.

1. Integer 의 경우

MagicBox<Integer> mb = new MagicBox<Integer>();

mb.setData(118);
Integer data = mb.getData();


2. String 의 경우

MagicBox<String> mb = new MagicBox<String>();

mb.setData("Hello, Magic World!!");
String data = mb.getData();

제네릭에서, 다이아몬드란 무엇일까?

다이아몬드는 자바 SE 7버전부터 제네릭클래스의 생성자를 호출할때, 타입 인수를 구체적으로 주지 않아도 됨!!
즉, 컴파일러는 문맥에서 타입을 추측하게되고, 바로 그때 사용하는것이 다이아몬드 <> 라고 합니다.

예를들면 아래와 같이 사용합니다.

// 아래와 같이 생성자 호출시 구체적인 타입을 정해주지 않아도 됨.
MagicBox<Integer> mb = new MagicBox<>();


이상입니다. 

728x90
300x250