2026-03-04

오늘 한 것

  • 자바 import 문의 근본적인 역할(경로 및 위치 지정)과 동작 방식 이해
  • 와일드카드(*) 사용과 구체적 클래스 명시 방식의 차이점 및 목적 학습
  • 컴파일 타임(Compile time)과 런타임(Runtime)의 개념을 분리하여 성능 차이 오해 교정
  • 이름 충돌(Naming Collision) 및 모호성 에러 발생 원인 학습
  • FQCN(Fully Qualified Class Name, 전체 경로 명시)의 개념과 실제 사용법 인지
  • IntelliJ IDEA의 import 자동 최적화 기능과 실무 협업 시 IDE 환경 설정의 중요성 인지

막힌 점

  • 처음에는 import가 도구(클래스)를 메모리에 무겁게 복사하여 불러오는 과정으로 오해함
  • * 사용 시 발생하는 성능 저하가 런타임에 발생한다고 생각했으나, 실제로는 컴파일 타임의 미세한 차이임을 처음 인지함
  • java.util.Datejava.sql.Date처럼 동일한 이름의 클래스를 동시에 사용할 때, 어떻게 코드를 작성해야 에러를 피할 수 있는지 직관적으로 유추하지 못함
  • 클래스를 import 한다는 개념 자체를 ‘도구를 가져온다’는 추상적인 의미로만 받아들여 초기 이해에 혼선이 있었음

정리

  • import는 메모리를 차지하는 작업이 아니라, 컴파일러에게 클래스의 위치를 알려주는 이정표 역할만 수행함
  • 명시적 import와 와일드카드(*) 방식 간의 실제 프로그램 실행(런타임) 속도나 메모리 차이는 0%임
  • 실무 및 협업 환경에서 구체적인 클래스명을 명시하는 이유는 이름 충돌 에러를 방지하고, 타 개발자가 코드의 의존성을 쉽게 파악(가독성 향상)하도록 하기 위함임
  • 와일드카드는 알고리즘 문제 풀이나 과거 텍스트 에디터 시절, 개발자의 타이핑 시간을 단축하기 위한 편의성 목적으로 주로 사용됨
  • 동일한 이름의 클래스를 한 파일에서 불가피하게 모두 써야 할 경우, 상단 import를 생략하고 변수 선언 시 전체 경로(예: java.util.Date)를 직접 명시해야 함
  • IDE(IntelliJ)는 자동으로 패키지를 묶거나 import를 관리해주지만, 실무 컨벤션에 맞게 개발자가 직접 환경 설정을 제어할 줄 알아야 함

코드

  • FQCN(전체 경로 명시)을 활용하여 이름 충돌을 피하는 객체 생성 실습

// 1. 일반적인 날짜 객체 생성 (java.util 소속) java.util.Date utilDate = new java.util.Date();

// 2. DB 통신용 날짜 객체 생성 (java.sql 소속) java.sql.Date sqlDate = new java.sql.Date(System.currentTimeMillis());