자바 - Generic

빵제이·2023년 7월 27일
0

자바

목록 보기
28/37

[ Generic ] : 포괄적인, 일반적인.

  • 데이터 형식에 의존하지 않고,
    하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법

  • <> 괄호 안에 들어가는 타입을 지정해준다.

  • 객체<타입> 객체명 = new 객체<타입>(); 이렇게 쓰지 않는가? 즉, 아래와 같이 여러 생성방식이 있다.

  • 사용 이유 : 만약에 우리가 어떤 자료구조를 만들어 배포하려고 한다. 그런데 String 타입도 지원하고싶고 Integer타입도 지원하고 싶고 많은 타입을 지원하고 싶다. 그러면 String에 대한 클래스, Integer에 대한 클래스 등 하나하나 타입에 따라 만들 것인가? 그건 너무 비효율적이다. 이러한 문제를 해결하기 위해 우리는 제네릭이라는 것을 사용한다.

  • 이렇듯 제네릭(Generic)은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로 특정(Specific) 타입을 미리 지정해주는 것이 아닌 필요에 의해 지정할 수 있도록 하는 일반(Generic) 타입이라는 것이다.

(정확히 말하자면 지정된다는 것 보다는 타입의 경계를 지정하고, 컴파일 때 해당 타입으로 캐스팅하여 매개변수화 된 유형을 삭제하는 것이다.

[ 장점 ]

  • 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있다.

  • 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 즉, 관리하기가 편하다.

  • 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다.

↑ 글 펌) https://st-lab.tistory.com/153


[ 메인 메소드 ]

public static void main(String[] args) {
   
	// String(문자열)을 저장하는 박스.
   Box<String> box1 = new Box<String>();
   box1.setItem("Hello world");
   System.out.println(box1.getItem());
   
   // int(정수)를 저장하는 box2
   // 오직 "참조타입"만 Generic 처리에서 사용할 수 있다.
   // int의 참조타입인 Integer를 사용한다.
   Box<Integer> box2 = new Box<Integer>();
   box2.setItem(10);
   System.out.println(box2.getItem());
   // Wrapper Class (기본형의 참조타입)
   // Boolean, Byte, Character, Integer, Long, Double
  
   // Person을 저장하는 box3
   Box<Person> box3 = new Box<Person>();
   box3.setItem(new Person("홍길동"));
   System.out.println(box3.getItem());
   
 }

[ Box 클래스 ]

  • generic 사용 : Box< String 타입의 이름 입력 >
public class Box<T> {
  
  private T item;

  public T getItem() {
    return item;
  }
  public void setItem(T item) {
    this.item = item;
  }

}
profile
개인 아카이브

0개의 댓글