제네릭

Sunny·2022년 11월 9일
0

🌱 제네릭을 사용하는 이유

제네릭 타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할 수 있다.

제네릭은 클래스와 인터페이스, 그리고 메소드를 정의할 때 타입(type)을 파라미터(parameter)로 사용할 수 있도록 한다. 타입 파라미터는 코드 작성 시 구체적인 타입으로 대체되어 다양한 코드를 생성하도록 해준다.


🌱 제네릭의 이점

  1. 컴파일 시 강한 타입 체크를 할 수 있다.

    자바 컴파일러는 코드에서 잘못 사용된 타입 때문에 발생하는 문제점을 제거하기 위해 제네릭 코드에 대해 강한 타입 체크를 한다.

  2. 타입 변환(casting)을 제거한다.

    비제네릭 코드는 불필요한 타입 변환을 하기 때문에 프로그램 성능에 악영향을 미친다. 다음은 비제네릭 코드의 예이다. List에 문자열 요소를 저장했지만, 요소를 찾아올때는 반드시 String으로 타입 변환을 해야한다.

	List list = new ArrayList();
	list.add("hello");
	String str = (String) list.get(0); // 타입 변환을 해야 함

       위의 코드를 제네릭 코드로 바꿔보자. List에 저장하는 요소를 String 타입으로        국한하기 때문에 요소를 찾아올 때 타입 변환을 할 필요가 없어 프로그램        성능이 향상된다.

	List<String> list = new ArrayList<String>();
	list.add("hello");
	String str = list.get(0); // 타입 변환을 하지 않는다.

🌱 제네릭의 사용 방법

  1. 제네릭 타입 (class, interface)

    제네릭 타입은 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다. 제네릭 타입은 클래스 또는 인터페이스 이름 뒤에 "<>" 부호가 붙고, 사이에 타입 파라미터가 위치한다.

	public class 클래스명<T> {...}
	public interface 인터페이스명<T> {...}

  1. 멀티 타입 파라미터

    제네릭 타입은 2개 이상의 멀티 타입 파라미터를 사용할 수 있는데, 이 경우 각 타입 파라미터를 콤마로 구분한다. 다음 예제는 Product<T,M> 제네릭 타입을 정의하고 ProductExample 클래스에서 Product<Tv, String> 객체를 생성한다. 그리고 Getter와 Setter을 호출하는 방법을 보여준다.

    // 제네릭 클래스
    public class Product<T, M> {

        private T kind;
        private M model;

        public T getKind() { return this.kind; }
        public M getModel() { return this.model; }

        public void setKind(T kind) { this.kind = kind; }
        public void setModel(M model) { this.model = model; }
    }

    // 제네릭 객체 생성
    public class ProductEx {

        public static void main(String[] args) {
            Product<Tv, String> product1 = new Product<Tv, String>();
            product1.setKind(new Tv());
            product1.setModel("스마트Tv");
            Tv tv = product1.getKind();
            String tvModel = product1.getModel();

        }

    }


  1. Map, Set, List에서 사용하는 제네릭

    제네릭은 Map, Set, List 등 다양하게 사용 가능하다.
    다음은 예시이다.

	Map<String, Integer> map = new HashMap<String, Integer>();
   
   	map.put("one",1);
    int one = map.get("one");

🌱 제네릭에서 자주 사용하는 타입 매개변수

보편적으로 자주 사용하는 타입 매개변수의 이름과 의미는 다음과 같다.

  • E : Element
  • K : Key
  • N : Number
  • T : Type
  • V : Value
profile
개발에 재미를 붙여보기 :)

0개의 댓글