백엔드/Java

Java 제네릭(Generic)

짱뚱짱 2024. 10. 26. 09:00

🔷 제네릭(Generic)이란?

- 데이터의 타입을 나중에 확정하는 기법
- 클래스나 메서드를 선언할 때 어떤 데이터가 올지 확신이 없다면, 제네릭 타입으로 구현 => 나중에 객체 생성시 타입을 확정하여 구현
- 객체의 타입을 컴파일 할 때 체크할 수 있어서 안정성을 해치지 않는 선에서 적당히 형변환이 가능한 기법
  👉🏻 안정성 - 의도하지 않은 타입의 객체가 저장되는것을 막는 것.

//객체 구현시 타입을 적어서 처리 (안써도 가능)
List<Sale<Integer, String>> list = new ArrayList<>();
int id = 1;
String name = "햄버거";
int price = 5000;

Sale<Integer, String> s = new Sale<Integer, String>(id, name, price);
list.add(s);
list.add(new Sale<Integer, String>(2, "콜라", 1500));
int sum = 0;
int idSum = 0;
for(Sale<Integer, String> t : list) {
    idSum+= t.getId();
    sum += t.getPrice();
    System.out.println(list);
}
System.out.println("id합:"+idSum);
System.out.println("합계:"+sum);

 

 

결과

[Sale [1.햄버거 : 5000], Sale [2.콜라 : 1500]]
[Sale [1.햄버거 : 5000], Sale [2.콜라 : 1500]]
id합:3
합계:6500

 

🔷 실습

제네릭 타입 매개변수인 K와 V를 사용하여 각각 ID와 메뉴를 저장

package day09;

public class Sale<K,V> {
    private K id;
    private V menu;
    private int price;

    //생성자
    public Sale() {}
    public Sale(K id, V menu, int price) {
        this.id = id;
        this.menu = menu;
        this.price = price;
    }
    public K getId() {
        return id;
    }
    public void setId(K id) {
        this.id = id;
    }
    public V getMenu() {
        return menu;
    }
    public void setMenu(V menu) {
        this.menu = menu;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    @Override
    public String toString() {
        return "Sale [" + id + "." + menu + " : " + price + "]";
    }
}

 

 

결과

[Sale [1.햄버거 : 5000], Sale [2.콜라 : 1500]]
[Sale [1.햄버거 : 5000], Sale [2.콜라 : 1500]]
id합:3
합계:6500

 

'백엔드 > Java' 카테고리의 다른 글

Java 스트림(Stream)  (0) 2024.10.30
Java 람다(Lambda)  (0) 2024.10.29
Java로 상품 관리 시스템 구현(2)  (0) 2024.10.25
Java로 단어장 구현  (0) 2024.10.23
Java TreeSet  (0) 2024.10.22