2023. 5. 22. 17:18ㆍ요점/Java
class 개체(Instance of the class Class)
어떤 클래스의 개체인 class 개체는 클래스의 메타데이터를 가지고 있다. 즉 클래스의 구조(상속 등), 멤버 변수, 메서드 등에 대한 정보를 가지고 있다.
class 개체는 reflection API의 일종으로 클래스의 정보를 동적으로 조작할 수 있다. 즉 실행 중인 프로그램의 클래스의 정보를 조작할 수 있다.
class 개체를 사용하려면 예약어인 class 리터럴을 사용하면 된다.
URL resourceUrl = MyClass.class.getResource("data.txt");
Class 개체는 클래스 로더가 클래스를 생성할 때 자동으로 같이 생성한다.
getResource(String name)
class 개체의 getResource 메소드는 인자로 받은 이름의 리소스를 해당 클래스(Myclass)와 동일한 패키지에서 찾아 URL 자료형의 경로를 반환한다.
getResource를 수행하는 주체는 클래스 로더이다. 일반적으로 해당 클래스와 동일한 패키지에서 리소스를 찾지만 예외적으로 클래스 로더의 구현에 따라서 검색 방식이 달라질 수 있긴 있다. 클래스 로더 구현은 JVM 벤더사에서 담당하기 때문에 벤더사에 따라 달라질 수 있다.
URL 자료형(Class).getPath()
소위 웹사이트에서 쓰는 Uniform Resource Locator과 동일한 개념이다.
URL 클래스의 getPath() 메서드는 URL 개체의 경로 부분을 문자열로 반환한다.
<https://example.com/path/to/file.txt?query=param>
예를 들어 위의 URL에서 getPath()를 호출하면 "/path/to/file.txt”이라는 문자열이 반환된다. 쿼리 String, 프로토콜등을 제외했다.
getProtectionDomain()
해당 클래스가 정의된 보안 도메인(Security Domain)을 반환한다. 해당 클래스의 실행 권한, 액세스 제한 등과 관련된 보안 속성에 대한 데이터를 가지고 있다.
getCodeSource()
해당 도메인의 CodeSource 자료형의 codesource를 반환한다. CodeSource 개체는 코드의 원본을 나타낸다.
getLocation()
CodeSource의 위치를 URL 자료형으로 반환한다.
Logger.class.getProtectionDomain().getCodeSource().getLocation().getPath()
결국 위의 코드의 값은 Logger 클래스의 경로입니다.
Class (Java Platform SE 8 )
Determines if the specified Class object represents a primitive type. There are nine predefined Class objects to represent the eight primitive types and void. These are created by the Java Virtual Machine, and have the same names as the primitive types tha
docs.oracle.com
'요점 > Java' 카테고리의 다른 글
File 객체를 만들 때 Path 객체를 이용하는 이유 (0) | 2023.06.23 |
---|---|
LinkedList poll() vs removefirst() (0) | 2023.05.24 |