• Feed
  • Explore
  • Ranking
/

    타입 캐스팅 관련

    공부
    박
    박상준
    2024.12.09
    ·
    2 min read

    개요

    • Map<String,Object> 구조의 경우 분명 Object 형식으로 밸류를 저장했는데..

    • 어떻게 map.get(키).toString 을 수행하는 경우 제대로 값을 불러올 수 있는지 궁금


    1.  String cTranType = parameterMap.get("cTranType");

      • 의 경우 대입구문 자체의 타입은 Object 이다.

      • 명시적으로 다운캐스팅이 필요함

      • 컴파일 시점에 걸린다

    2.  String cTranType = parameterMap.get("cTranType").toString() 

      • 의 경우 Object 타입에 대해 toString() 수행시에

      • 다운캐스팅을 수행하나?

        • 해당 값의 경우 Map 내부에 값을 저장하는 경우 Object 로 저장이 되었지만

        • Java JVM 내부의 메타스페이스라는 영역에 클래스 메타데이터 등의 정보가 담겨 있는데

        • 해당 메타데이터를 토대로 런타임  중에 타입을 추론해서 메서드를 수행한다고 한다.

          • 다운캐스팅은 아니다. 


    왜 1번의 경우 오토 캐스팅이 안되는가

    • 1번의 경우 param.get(키) 의 경우 Object 타입이다

      • Object 타입으로만 해당 값이 String 인지 추론하진 못한다

    • 2번의 경우

      • toString() 메서드 수행시

      • Object 타입안에 해당 toString() 이 존재하기에 일차적으로 사용이 가능

      • 또한 toString() 의 경우 반환 타입이 String  이였기 때문에 어차피 String 반환이 가능함.