Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

공hannah부

제네릭(Generic) 본문

공부/JAVA

제네릭(Generic)

Hannah0226 2023. 5. 21. 19:36

제네릭 프로그래밍

기본

  • 일반적인 코드를 작성하고 이 코드를 다양한 타입의 객체에 대하여 재사용하는 프로그래밍 기법이다.
  • 타입을 파라미터로 가지는 클래스와 인터페이스로 정의한다.
    • 선언 시 클래스 또는 인터페이스 이름 뒤에 <T>
  • 타입 파라미터
    • 일반적으로 대문자 알파벳 하나로 표현한다.

제네릭을 사용하는 이유

  • 컴파일 시 강한 타입 체크 가능
    • 클래스의 구조와 연결관계가 복잡해지면서 타입 오류들이 발생할 수 있다. 이때 런타임-타입 에러가 나는 것을 방지한다.
  • 타입명시 및 타입 변환 제거 가능
    • list에 일관된 타입의 정보를 저장하도록 명시한다.

제네릭 타입 사용 예시

  • 클래스 선언시 타입 파라미터 사용
  • 컴파일 시 타입 파라미터가 구체적인 타입으로 변경
public clss Box<T>{
	private T t;
    public T get(){
    	return t;
    }
    public  void set(T t){
    	this.t=t;
    }
}
//String 타입
Box<String> box=new Box<String>();
box.set("Hello");
String str=box.get();

//Integer 타입
Box<Integer> box=new Box<Integer>();
box.set(6);
int value=box.get();

멀티 타입 파라미터

제네릭 타입은 두 개 이상의 타입 파라미터도 사용 가능하다

  • 각 타입 파라미터는 콤마로 구분한다
  • Ex) class<K,V,...>{...}

제네릭 메소드

매개변수 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드이다.

  • 선언 방법: 리턴 타입 앞어"<>" 기호를 추가하고 타입 파라미터를 기술한다.
    • Ex) public<T> Box<T> boxing(T t){...}
  • 호출 방법
    • 명시적으로 구체적 타입 지정 : Box<Integer> box = <Integer>boxing(100);
    • 매개값을 보고 구체적 타입을 추정: Box<Integer> box = boxing(100);

ArrayList

  • ArrayList <T> arr = new ArrayList<T>();
  • 이론적으로 길이 제한은 없지만 heap사이즈는 넘을 수 없다.
  • 추가: list.add();
  • 삭제: list.remove();