Class를 알아봅시다! #6 😉
오늘은 클래스에서 제네릭(Generics) 클래스 사용법을 알아봅시다!
[ 자바 클래스 링크 ]
1. [JAVA] 클래스의 모든 것 #1 - 클래스의 개념과 용도
2. [JAVA] 클래스의 모든 것 #2 - 클래스의 static
3. [JAVA] 클래스의 모든 것 #3 - 클래스의 this
4.[JAVA] 클래스의 모든 것 #4 - 생성자 (Constructor)
Generic이란?
Generic을 직역하면 '일반적인' 이라는 뜻입니다.
그럼 GenericClass는 일반적인 클래스라고 볼 수 있겠죠?
즉, 데이터의 형식에 의존하지 않고 여러 데이터 타입들을 가질 수 있도록 만든 클래스입니다.
예제를 보면서 살펴봅시다. 사과, 바나나, 오렌지클래스를 과일박스 클래스에 넣고싶은데 어떻게 해야할지 알아보면서 제너릭 클래스를 이해해봅시다.
public class Apple {
}
public class Banana {
}
public class Orange {
}
사과, 바나나, 오렌지 클래스를 만들어줍니다.
사과, 바나나, 오렌지를 담거나 뺄 수 있는 FruitBox 클래스를 만들려고합니다.
먼저 사과를 담거나 뺄 수 있는 클래스를 만들어봅시다.
public class FruitBox {
//필드
private Apple item;
//메소드
public void push(Apple item) {
this.item = item;
}
//과일을 빼내는 메소드
public Apple pull() {
return item;
}
}
사과를 push하고 pull 할 수 있는 메소드입니다. 필드에 사과를 만들어주었습니다.
FruitBox box = new FruitBox();
box.push(new Apple());
main에서 이렇게 과일상자를 제어 할 수 있습니다.
그런데 바나나와 오렌지를 담을려면 어떻게 해야할까요?
클래스안에서 Apple 대신에 바나나와 오렌지를 필드로 만들어서 클래스를 3개를 만들 수 있지만 그렇게 구현하면 비효율적이게 됩니다.
그래서 제너릭클래스를 사용합니다. 이제 제너릭클래스 형태로 바꿔봅시다!
package test.mypac;
public class FruitBox<T> {
//필드
private T item;
//메소드
public void push(T item) {
this.item = item;
}
//과일을 빼내는 메소드
public T pull() {
return item;
}
}
이렇게 FruitBox에 <T>를 만들어주고 T에 따라 여러가지의 과일들을 제어할 수 있게 만들어줍니다.
<>안에 자신이 원하는 과일, 즉 타입이 들어가면서 그 타입을 제어하도록 구현되있습니다.
main클래스를 구현해봅시다.
FruitBox<Apple> box1 = new FruitBox<Apple>();
box1.push(new Apple());
//Orange 객체를 담을 FruitBox 객체를 생성해서 참조값을 box2라는 지역변수에 담아 보세요.
FruitBox<Orange> box2 = new FruitBox<Orange>();
//box2에 Orange 객체를 담아보세요.
box2.push(new Orange());
//Generic 클래스로 지정한 type 객체가 리턴된다.
Apple item1 = box1.pull();
Orange item2 = box2.pull();
클래스 타입이 FruitBox<T> 이므로 T에 원하는 과일을 넣어 원하는 클래스 타입을 만들어줍니다.
예제는 FruitBox에 Apple, Orange 을 담았습니다.
사과를 넘겨준 box1을 보면 pull과 push에 사과를 인자로 주고 받는 모습을 볼 수 있습니다.
이렇게 제너릭 타입을 무엇으로 지정했냐에 따라 보내는 타입과 받는 타입이 바뀝니다.
제너릭 클래스 객체를 생성할 때는 <> 안의 타입은 생략이 가능합니다. 변수로 선언할때만 type을 적어주시면됩니다.
이렇게 제너릭 클래스를 사용하면 비슷한 기능을 지원하는 경우에는 코드의 재사용성을 높혀 효율적이게 코딩할 수 있습니다.
'Languages > JAVA' 카테고리의 다른 글
[JAVA] ArrayList 의 개념, 사용법, 예제 (0) | 2021.11.08 |
---|---|
[JAVA] 이클립스에서 import 하는 방법들, 단축키 (0) | 2021.11.05 |
[JAVA] 자바 자료형 알아보기 #5 - 래퍼 클래스(Wrapper class) (0) | 2021.11.03 |
[JAVA] 클래스의 모든 것 #4 - 생성자 (Constructor) (0) | 2021.11.03 |
[JAVA] 클래스의 모든 것 #3 - 클래스의 this (0) | 2021.11.03 |