AccessFlag — JVM 접근·모듈 플래그 열거형

AccessFlag — JVM 접근·모듈 플래그 열거형

AccessFlag는 클래스, 필드, 메서드 같은 런타임 멤버에 대한 JVM 접근(access) 및 모듈 관련 플래그를 나타내는 열거형이에요. JVM 접근·모듈 플래그는 자바 언어 수식자(modifier)와 관련은 있지만 구별돼요. public처럼 일대일 대응하는 것도 있지만, sealed처럼 언어 수식자는 있으나 접근 플래그가 없는 경우도 있고, synthetic처럼 접근 플래그는 있으나 대응 수식자가 없는 경우도 있어요. 접근·모듈 플래그 상수의 값은 JVM 명세(JVMS)의 여러 절에서 가져와요. 서로 다른 접근 플래그의 마스크 값은 구분되지 않아요. 다른 종류의 JVM 구조에 대해 플래그가 정의되며, 같은 비트 위치가 다른 문맥에서 다른 의미를 가질 수 있어요. 예를 들어 0x0000_0040volatile 필드를 나타내지만 bridge 메서드를 나타내기도 해요.

출처: Java API Reference

본문

AccessFlag는 많은 상수를 정의해요. 대표적인 값은 다음과 같아요.

PUBLICpublic 수식자에 대응하는 접근 플래그로, 마스크 값 0x0001이에요.

PRIVATEprivate 수식자에 대응하며 마스크 값 0x0002예요.

PROTECTEDprotected 수식자에 대응하며 마스크 값 0x0004예요.

STATICstatic 수식자에 대응하며 마스크 값 0x0008이에요.

FINALfinal 수식자에 대응하며 마스크 값 0x0010이에요.

SUPER — 클래스 플래그로, 마스크 값 0x0020이에요 (이전 버전 호환용 ACC_SUPER).

OPEN, TRANSITIVE — 모듈 관련 플래그예요.

SYNCHRONIZEDsynchronized에 대응하며 마스크 값 0x0020이에요.

VOLATILEvolatile 필드에 대응하며 마스크 값 0x0040이에요 (메서드에서는 bridge).

TRANSIENTtransient 필드에 대응하며 마스크 값 0x0080이에요 (메서드에서는 varargs).

NATIVEnative 메서드에 대응하며 마스크 값 0x0100이에요.

INTERFACE — 인터페이스에 대응하며 마스크 값 0x0200이에요.

ABSTRACTabstract 수식자에 대응하며 마스크 값 0x0400이에요.

SYNTHETIC — 컴파일러가 합성한 멤버를 나타내며 마스크 값 0x1000이에요.

ANNOTATION — 애너테이션 타입에 대응하며 마스크 값 0x2000이에요.

ENUM — 열거형에 대응하며 마스크 값 0x4000이에요.

MANDATED — 소스로 선언되지 않은 암묵적 멤버를 나타내며 마스크 값 0x8000이에요.

MODULE — 모듈 플래그예요.

public static AccessFlag[] values() — 열거형 상수의 배열을 반환해요.

public static AccessFlag valueOf(String name) — 이름에 해당하는 열거형 상수를 반환해요.

public int mask() — 이 접근 플래그의 마스크 값을 반환해요.

public boolean sourceModifier() — 이 접근 플래그에 대응하는 소스 수식자가 있으면 true를 반환해요.

public Set<AccessFlag.Location> locations() — 이 접근 플래그가 적용될 수 있는 위치 집합을 반환해요.

public static Set<AccessFlag> maskToAccessFlags(int mask, AccessFlag.Location location) — 주어진 마스크에 포함된, 지정된 위치의 AccessFlag 집합을 반환해요.

더 알아보기 (Learn more)