Fully Qualified Name

2025. 4. 30. 18:05JAVA/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