Java 54(Generic Class)

Kang.__.Mingu·2024년 5월 14일
0

Java

목록 보기
56/108
post-custom-banner

Generic(제네릭)

  • 필드의 자료형이 부정확한 경우 Java 자료형 대신 사용될 미지정 자료형의 식별자

  • Java 자료형(클래스, 인터페이스) 선언시 < > 기호에 제네릭 타입 작성

    형식) public class 클래스명<제네릭, 제네릭, ...> { }

  • < > 기호에 클래스에서 사용할 수 있는 다수의 제네릭 타입을 [ , ] 기호로 구분하여 선언 가능

  • 제네릭 타입의 식별자는 대문자로 작성하는 것을 권장

Generic 타입 제한하는 방법

  • 제네릭 타입 대신 사용될 Java 자료형을 상속 기능을 사용해 제한 가능

    형식) public class 클래스명<제네릭 extends 부모클래스, ...> { }

  • 제네릭 타입 대신 사용될 Java 자료형은 반드시 부모클래스를 상속받은 자식클래스로만 사용 가능

    ex) public class Generic < T extends Number > { }

  • 제네릭 타입 대신 사용될 Java 자료형을 전달해야만 필드 또는 메소드가 완성되어 클래스로 객체 생성 작성 가능

  • 생성자의 제네릭 타입에는 Java 자료형 생략 가능

  • 사용 방법

    Generic< Integer > generic1 = new Generic<이 부분 생략 가능함>();
    Generic< Integer > generic1 = new Generic< Integer >(); // T >> Integer


Generic

// public class Generic<T extends Number> {

public class Generic<T> {
    private T field;

    public Generic() {
    }

    public Generic(T field) {
        this.field = field;
    }

    public T getField() {
        return field;
    }

    public void setField(T field) {
        this.field = field;
    }
}

GenericApp

public class GenericApp {
    public static void main(String[] args) {
        // 제네릭 타입 대신 사용될 Java 자료형을 전달해야만 필드 또는 메소드 완성되어 클래스로 객체 생성 작성 가능
        // => 생성자의 제네릭 타입에는 Java 자료형 전달 생략 가능
        // => Generic<Integer> generic1 = new Generic<이 부분 생략 가능함>();
        // Generic<Integer> generic1 = new Generic<Integer>(); // T >> Integer

        Generic<Integer> generic1 = new Generic<>(); // T >> Integer

        // 제네릭 타입 대신 설정된 클래스의 객체를 매개변수로 전달하여 필드값으로 저장
        generic1.setField(100); // 필드에 Integer 객체를 전달하여 저장
        // generic1.setField(12.34); // 필드에 Double 객체를 전달하면 에러 발생

        Integer returnObject1 = generic1.getField();
        // System.out.println("필드값 = " + returnObject1.intValue());
        System.out.println("필드값 = " + returnObject1);
        System.out.println("===================================");
        Generic<Double> generic2 = new Generic<>(); // T >> Double
        generic2.setField(12.34);

        Double returnObject2 = generic2.getField();
        System.out.println("필드값 = " + returnObject2);
        System.out.println("===================================");

        // Generic 클래스에서 Number가 상속된다면 String은 사용할 수 없음
        // => Number클래스 안에 String은 상속받지 않기 때문에
        // public class Generic<T extends Number> {
        Generic<String> generic3 = new Generic<>(); // T >> String
        generic3.setField("홍길동");
        String returnObject3 = generic3.getField();
        System.out.println("필드값 = " + returnObject3);
        System.out.println("===================================");
    }
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D
post-custom-banner

0개의 댓글