자바 제네릭 타입

강9·2023년 12월 18일
0

Java

목록 보기
69/71

💡 자바 제네릭이란?

  • 클래스, 인터페이스, 메소드 등에서 사용될 수 있는 타입 매개변수(parameter)

ex.
ArrayList제네릭 타입을 사용하여 요소의 타입지정할 수 있다.
이 때 요소의 타입은 ArrayList의 인스턴스를 생성할 때 매개변수를 통해 전달된다.

ArrayList<String> list = new ArrayList<String>();
  • 요소의 타입을 명시적으로 지정할 수 있다.
  • 타입 안정성(type safety)을 보장할 수 있다.

import ...Movie;
import java.util.ArrayList;
import java.util.List;

public class ArrayListGeneric {
    public static void main(String[] args) {
        List<Movie> list = new ArrayList<Movie>();
        list.add(new Movie("괴물", "봉준호", "2006", "한국"));
        list.add(new Movie("기생충", "봉준호", "2019", "한국"));

//        list.add("Hello"); // X
        System.out.println(list.get(0));
        System.out.println(list.get(1));

    }
}

public class Movie {
    private String title;
    private String director;
    private String year;
    private String country;
// 이하 생략...

💡 자바 제네릭 멀티 타입 파라미터란?

  • 제네릭 타입여러 개 선언하여 사용하는 것

import java.util.HashMap;
import java.util.Map;

public class PairGenericTest {
    public static void main(String[] args) {
        Pair<String, Integer> pair = new Pair<>("hello", 1);
        System.out.println(pair.getKey()); // hello
        System.out.println(pair.getValue()); // 1

//      검색을 빠르게 할 수 있는 자료구조(HashMap, Hashtable)
        Map<String, Integer> maps = new HashMap<>();
        maps.put("kor", 60);
        maps.put("eng", 80);
        maps.put("mat", 70);

        System.out.println(maps.get("kor")); // 60
        System.out.println(maps.get("eng")); // 80
        System.out.println(maps.get("mat")); // 70
    }
}

💡 자바 제네릭 제한된 타입 파라미터란?

  • 특정 타입으로 제한된 제네릭 타입 파라미터
  • 제네릭 클래스나 메서드에서 사용할 수 있는 타입을 제한할 수 있다.

public class GenericLimitTest {
    public static void main(String[] args) {
        Integer[] integers = {1,2,3,4,5};
        Double[] doubles = {1.0, 2.0, 3.0, 4.0, 5.0};

        AverageCalculator<Integer> integerAverageCalculator = new AverageCalculator<>(integers);
        double integerAverage = integerAverageCalculator.calculateAverage();
        System.out.println(integerAverage);

        AverageCalculator<Double> doubleAverageCalculator = new AverageCalculator<>(doubles);
        double doubleAverage = integerAverageCalculator.calculateAverage();
        System.out.println(integerAverage);
    }
}

public class AverageCalculator<T extends Number> {
    private T[] numbers;

    public AverageCalculator(T[] numbers) {
        this.numbers = numbers;
    }

    public double calculateAverage() {
        double sum = 0.0;
        for (T number : numbers) {
            sum+=number.doubleValue();
        }
        return sum/numbers.length;
    }
}
profile
코린이 일기

0개의 댓글