Fully Qualified Name
2025. 4. 30. 18:05ㆍJAVA/JAVA 실행 원리
Java에서 Fully Qualified Name(FQN)은 클래스, 인터페이스, enum(열거형), annotation(주석) 등의 정확한 전체 이름을 의미하며,
패키지 이름 + 타입 이름으로 구성된다.

⌨️ 기본 구조
Fully Qualified Name의 기본 구조는 식별자의 전체 경로를 명시적으로 표현한 것으로, 사용하는 대상에 따라 약간씩 구조가 달라진다.
1️⃣ 클래스의 FQN(FQCN)
💾 기본 구조
<패키지이름>.<타입이름>
🧾 예시
java.util.ArrayList
com.example.myapp.controllers.UserController
- ArrayList는 java.util 패키지에 있음 → FQN은 java.util.ArrayList
- UserController는 com.example.myapp.controllers 패키지에 있음
2️⃣ 메서드의 FQN
💾 기본 구조
패키지명.클래스명.메서드명()
🧾 예시
java.util.List.add()
com.example.service.UserService.getUserById()
3️⃣ 필드의 FQN
💾 기본 구조
패키지명.클래스명.필드명
🧾 예시
java.awt.Color.RED
com.example.Constants.MAX_USERS
⌨️ FQN이 필요한 이유
🔹 클래스 이름 충돌 방지
자바에서는 서로 다른 패키지에 같은 이름의 클래스가 있을수 있기 때문에, FQN을 사용하면 어떤 클래스인지 정확히 식별 할수 있다.
java.util.Date
java.sql.Date
이럴 때 FQN이 없으면 어떤 Data를 쓰는지 명확하지 않다.
👉 FQN을 쓰면 명확해진다.
java.util.Date utilDate
java.sql.Date sqlDate
🔹 명시적 참조
import 없이도 FQN을 사용하면 클래스의 소속을 명확히 표현할 수 있다.
java.util.ArrayList<String> list = new java.util.ArrayList<>();
- java.util.ArrayList ← FQN을 직접 사용
- import java.util.ArrayList; ← 사용하지 않았음
⌨️ import 문과의 관계
일반적으로 import 문을 사용해 FQN을 생략할 수 있다.
import java.util.ArrayList;
ArrayList<String> list = new ArrayList<>();
⚠️ 하지만 FQN은 다음과 같은 상황에서 꼭 필요하다!!
- 같은 이름의 클래스가 여러 패키지에 존재할 때
- 간단한 스크립트나 작은 예제에서 import를 생략하고 싶을 때
- 문서, 로그, 리플렉션 등에서 클래스의 정확한 위치를 출력해야 할 때
⌨️ 컴파일러와 JVM에서의 역할
| 🔹 컴파일러 | - Java 소스코드(.java)를 바이트 코드(.class)로 변환 - 소스코드 내의 클래스, 메서드, 변수 등이 유효한지 검사 - FQN또는 import를 기반으로 참조 클래스가 존재하는지 확인 |
| 🔹 JVM | - 컴파일된 .class 파일을 실행 - 메모리(Heap, Stack. Method Area) 관리 - 바이트 코드를 해석/최적화하고 기계어로 실행 - 동적으로 클래스를 로딩하고 링크함 |
🧾 예제
public class Main {
public static void main(String[] args) {
java.util.ArrayList<String> list = new java.util.ArrayList<>();
list.add("Hello");
System.out.println(list);
}
}
| 🔹 컴파일러의 역할 | 🔹 JVM 역할 |
| ▶ java.util.ArrayList라는 FQCN이 정확한지 확인 ▶ 클래스 파일(Main.class) 생성 ▶ 참조된 클래스들이 존재하고 접근 가능한지도 검사 |
▶ Main.class 로딩 ▶ 실행 시점에 java.util.ArrayList 클래스가 필요하면 동적 로딩 ▶ 메모리 할당, 메서드 실행, 결과 출력 등 전체 실행 제어 |
📕 FQN 정리 📕
자바에서 Fully Qualified Name(FQN)은 하나의 타입(클래스 등)을 전역적으로 고유하게 식별할 수 있는 완전한 이름으로, 컴파일러와 JVM이 해당 타입을 정확히 찾아 사용하도록 돕는 핵심 메커니즘이다.
| 항목 | 설명 |
| 정의 | 클래스 또는 타입의 전체 경로 이름 |
| 구성 | 패키지 이름 + 클래스 이름 |
| 예시 | java.util.HashMap, com.myapp.service.UserService |
| 역할 | 이름 충돌 방지, 클래스 식별, 컴파일 및 클래스 로딩 지원 |
| 사용처 | import 없이 직접 참조, 리플렉션, 문서화, 충돌 회피 등 |
'JAVA > JAVA 실행 원리' 카테고리의 다른 글
| Abstract Class(추상 클래스) (0) | 2025.05.28 |
|---|---|
| String (1) | 2025.04.30 |
| Semantic Error와 Syntax Error (0) | 2025.04.23 |
| 2의 보수 (0) | 2025.04.16 |
| JVM(자바 가상 머신) (0) | 2025.03.28 |