programming/Java3 Reflection Java Reflection 메소드, 클래스, 인터페이스의 행위를 런타임에 검사하거나 수장하기 위해 사용되는 API 입니다. 런타임에 지금 실행되고 있는 클래스를 가져와 실행할 수 있습니다. 자바의 클래스 파일은 바이트 코드로 컴파일되어 static 영역에 위치하게 됩니다. 그로 인해 클래스 이름만 알고 있으면 해당 영역을 탐색하여 클래스에 대한 정보를 가져올 수 있습니다 컴파일시 해당 클래스가 없더라도 런타임에 해당 클래스를 로딩하여 메타정보를 가져올 수 있습니다 SDK에 API가 공개되지 않은 경우 Android Studio에서 참조할 수 없어 호출할 수 없지만, 실제로 hidden API가 존재하기 때문에 리플렉션을 이용해서 호출할 수 있습니다. 또 테스트 코드 작성을 위해 private 변수를 변.. 2022. 10. 6. Class loading 자바 클래스 로딩 클래스 로더가 .class 파일을 찾아 JVM의 method 영역에 올리는 것 JVM은 실행될 때 모든 클래스를 메모리에 올려놓지 않습니다. 그때 마다 필요한 클래스를 메모리에 올려 효율적으로 관리하기 위함입니다. 자바 클래스 로딩 시점 클래스의 인스턴스가 생성될 때 new 를 통한 초기화 class.forName()과 함께 Reflection을 사용하는 경우 클래스의 정적 변수가 사용될 때(final로 선언된 상수가 아닐 때) 클래스의 정적 메소드가 호출될 때 초기화 클래스 초기화는 static 블록과 static 멤버 변수의 값을 할당하는 것을 의미합니다. 클래스가 로드되면 초기화도 바로 수행됩니다. 즉, 클래스의 static 멤버 변수는 클래스 로드 시점에 초기화 됩니다. 초기화 .. 2022. 8. 14. JVM 실행 자바 애플리케이션은 java명령어로 실행할 수 있다 실행 시 JRE를 실행하고 main메소드를 포함하고 있는 클래스를 로딩하고, main()메서드를 호출한다. 정확히는 java명령어 실행 시 JVM이 실행되고, JVM은 클래스로더를 이용하여 inital class를 create, link, initalize하고, main 메서드를 호출한다 각 용어에 대한 설명은 참고바랍니다. JVM 자바 가상 머신(Java Virtual Machine), 자바 바이트 코드(.class 파일)을 OS에 특화된 코드로 변환(인터프리터와 JIT 컴파일러)하여 실행한다. JVM자체는 바이트 코드를 실행하는 표준이자 특정 벤더가 구현한 구현체 Oracle이 JVM 표준 스펙을 정해놓았고, 각 OS 개발사가 OS에 맞도록 J.. 2022. 7. 13. 이전 1 다음