프로그래밍 코드의 이름들은 대부분 직역하면 뭔지 알기 쉽습니다.
Generic(제네릭)
직역하면 일반적인이라는 뜻이죠,
일반적인라는건 뭘까요.
스키장 같은데 가면 뭘 입을까요?
"일반적으로" 사람들 모두 따뜻한 옷을 입고 고글을 끼고 안전장비를 착용합니다.
이렇듯 공통적인걸 모아놓은걸 일반적이라고 합니다.
그럼 프로그래밍에서 뭘 일반적으로 만들려고 generic을 사용할까요?
바로 데이터 타입입니다.
제네릭을 찾아보고있으시면 데이터 타입이 뭔지 알고 계시죠?
자바에서는 이런 데이터 타입에 특히 민감한데,
객체의 다형성을 위해서 이런 Generic을 고안해낸거 아닐까 싶습니다.(뇌피셜)
아무튼 제네릭은 객체나 메소드의 데이터타입을 코드 작성 단계에서 미리 특정하기 위해서 사용합니다.
이전 포스트에서 알아봤듯이 다형성이 주는 이점을 제네릭도 똑같이 가지고있습니다.
즉, 코드를 여러번 쓸 필요 없어진다는 거죠.
미리 한번 보여드리겠습니다.
//Main.java
public class Main {
public static void main(String[] args) {
//AnimalList 선언 <>이부분에 데이터 타입을 적음
AnimalList<LandAnimal> landAnimal = new AnimalList<>(); // new 뒤 데이터 타입 Java SE 7부터 생략가능함.
//List에 여러 타입의 객체 넣기 (다형성)
landAnimal.add(new LandAnimal());
landAnimal.add(new Cat());
landAnimal.add(new Dog());
// landAnimal.add(new Sparrow()); // LandAnimal을 상속받지 않았기 때문에 오류가 발생함.
//하나씩 출력
for (int i = 0; i < landAnimal.size() ; i++) {
landAnimal.get(i).crying();
}
}
}
//상위 클래스인 LandAnimal 정의
public class LandAnimal {
public void crying() { System.out.println("육지동물");
}
}
import java.util.ArrayList;
//AnimalList 정의
public class AnimalList<T> {
//ArrayList선언
ArrayList<T> al = new ArrayList<T>();
//add함수
void add(T animal) { al.add(animal); }
//T 제너릭 타입 반환
T get(int index) { return al.get(index); }
//배열 내 animal 삭제
boolean remove(T animal) { return al.remove(animal); }
//배열 크기
int size() { return al.size(); }
}
//LandAnimal 상속 및 Cat클래스 정의
public class Cat extends LandAnimal{
@Override
public void crying() {
System.out.println("야옹야옹");
}
}
//LandAnimal 상속 및 Dog클래스 정의
public class Dog extends LandAnimal{
@Override
public void crying() {
System.out.println("멍 멍");
}
}
//육지동물이 아닌 Sparrow 클래스 정의
public class Sparrow {
public void crying() {
System.out.println("짹짹");
}
}
보시면 <>안에 데이터타입을 적용하는걸 보실 수 있습니다.
이때 T라는 데이터타입을 정의하죠 이게 바로 Generic타입 입니다.
Generic은 여러가지 종류가 있는데
표를 한번 보시죠
전 이 정도만 알고있을까 합니다.
사실 Collection 공부하다가 제너릭 뭘까 하다가 적어봅니다.
그런데 더 적었다간 배보다 배꼽이 커질 것 같습니다.
참고로 <>안에 적는 타입은 Wrapper로 기존 타입을 객체화 해서 적어야합니다.
자세하게 알고싶으시다면 https://dev-coco.tistory.com/9 이쪽으로 들어가십시요.
추가 정보가 필요하거나 자세하게 알고 싶으신 분들은 아래 참고 자료에 들어가서 보세요.
보다 디테일하게 정리되어있습니다.
참고
https://st-lab.tistory.com/153
https://www.tcpschool.com/java/java_generic_concept
'Java' 카테고리의 다른 글
[Java] 컬렉션(Collection) 정리 #1 List (2) | 2024.01.11 |
---|---|
[Java]클래스 정리 및 OOP 4가지 특징 (2) | 2024.01.04 |
[Java] 자바 배열 선언 (0) | 2024.01.01 |