Java 53(NonGeneric)

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

Java

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

Object(Field, Class)

  • 표현대상을 추상화하여 클래스로 선언할 떄 필드의 자료형이 부정확한 경우 필드의 자료형에 의해 다수의 클래스를 선언해 사용할 경우 발생 가능

  • 필드의 자료형을 Object 클래스로 선언하면 다수의 클래스 선언 불필요

  • Object 클래스로 선언된 필드에는 모든 Java 클래스로 생성된 객체 저장 가능

  • Object 클래스의 필드에는 모든 클래스의 객체를 전달받아 저장 가능

  • Object 클래스의 필드에 저장된 객체를 반환받아 사용하기 위해서는 반드시 명시적 객체 형변환 사용

    • ClassCastException 발생 가능

NonGeneric

public class NonGeneric {
	// Object Field로 생성
    private Object field;

    public NonGeneric() {
    }

    public NonGeneric(Object field) {
        this.field = field;
    }

    public Object getField() {
        return field;
    }

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

NonGenericApp

public class NonGenericApp {
    public static void main(String[] args) {
        NonGeneric nonGeneric1 = new NonGeneric();

        // 매개변수에 Integer 객체를 전달하여 NonGeneric 객체의 필드값 변경
        // => 매개변수의 자료형이 Object 클래스로 작성되어 있으므로 모든 Java 객체를 전달하여 메소드 호출 가능
        nonGeneric1.setField(100); // 오토박싱: 정수값 >> Integer 객체로 변환됨

        // 필드값을 Object 객체로 반환되므로 반드시 명시적 객체 형변환을 사용해야만 자식 클래스의 객체를 참조하여
        // 자식클래스의 메소드 호출 가능
        Integer returnObject1 = (Integer) nonGeneric1.getField();

        System.out.println("필드값 = " + returnObject1); // 오토언박싱: Integer 객체 >> 정수값으로 변환
        System.out.println("==========================================");

        NonGeneric nonGeneric2 = new NonGeneric();
        // 매개변수에 Double 객체를 전달하여 NonGeneric 객체의 필드값 변경
        nonGeneric2.setField(12.34); // 실수값 >> Double 객체

        // 명시적 객체 형변환을 잘못한 경우 ClassCastException 발생
        // => instanceof 연산자를 사용하여 명시적 객체 형변환 가능한 클래스인지를 검증
        if(nonGeneric2.getField() instanceof  Integer){
            Integer returnObject2 = (Integer) nonGeneric2.getField();
            System.out.println("필드값 = " + returnObject2); // 오토언박싱: Integer 객체 >> 정수값으로 변환

        } else if(nonGeneric2.getField() instanceof  Double){
            Double returnObject2 = (Double) nonGeneric2.getField();
            System.out.println("필드값 = " + returnObject2); // 오토언박싱: Double 객체 >> 실수값으로 변환
        }
        System.out.println("==========================================");
        NonGeneric nonGeneric3 = new NonGeneric();

        // 매개변수에 String 객체를 전달하여 NonGeneric 객체의 필드값을로 변경
        nonGeneric3.setField("홍길동");

        String returnObject3 = (String) nonGeneric3.getField();
        System.out.println("필드값 = " + returnObject3);
        System.out.println("==========================================");

    }
}
profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D
post-custom-banner

0개의 댓글