Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바에서 같은 클래스를 두 번 import해도 될까? JVM은 런타임에 클래스를 몇 번 로드할까?

자바에서는 서로 연관된 클래스와 인터페이스를 하나의 패키지(package)로 묶어 관리합니다. 패키지는 특정 개념에 속한 클래스와 인터페이스를 담아두는 디렉터리라고 생각하면 이해하기 쉽습니다. 예를 들어, 입력·출력 작업과 관련된 모든 클래스와 인터페이스는 java.io 패키지에 포함되어 있습니다.

패키지 생성하기

클래스나 인터페이스 파일의 최상단에 package 키워드로 패키지 이름을 선언하면, 해당 클래스와 인터페이스를 원하는 패키지 아래로 그룹화할 수 있습니다.

예제

package com.tutorialspoint.mypackage;
public class Sample{
    public void demo(){
        System.out.println("This is a method of the sample class");
    }
    public static void main(String args[]){
        System.out.println("Hello how are you......");
    }
}

패키지가 선언된 소스 코드를 컴파일할 때는 일반적인 컴파일 방식과 달리, javac 명령에 -d 옵션을 사용해 패키지가 생성될 목적 경로(destination path)를 지정해야 합니다.

컴파일 명령

javac -d . Sample.java

만약 목적 경로를 지정하지 않으면, 패키지는 현재 작업 디렉터리에 생성됩니다.

패키지의 클래스 임포트하기

패키지 안에 속한 클래스나 인터페이스에 접근하려면 먼저 해당 패키지의 위치를 클래스패스(classpath) 변수에 추가하거나, 패키지가 현재 디렉터리에 존재하는지 확인해야 합니다. 그다음 import 키워드를 사용해 필요한 클래스나 인터페이스를 가져오면 됩니다.

예제

import com.tutorialspoint.mypackage.Sample;
public class Test{
    public static void main(String args[]){
        Sample obj = new Sample();
        obj.demo();
    }
}

실행 결과

This is a method of the sample class

같은 클래스를 두 번 임포트하면 어떻게 될까?

결론부터 말하면, 자바에서는 같은 클래스를 여러 번 임포트해도 전혀 문제가 되지 않습니다. 컴파일 오류도 발생하지 않고 프로그램 동작에도 영향을 주지 않습니다.

중요한 점은, 임포트 문을 몇 번 작성했는지와 무관하게 JVM은 해당 클래스를 런타임에 단 한 번만 로드한다는 것입니다. 즉, 중복 임포트는 단순히 소스 코드상에서 의미가 없을 뿐, 성능 저하나 메모리 낭비 같은 부작용도 없습니다.

예제

아래 자바 프로그램에서는 com.tutorialspoint.mypackage 패키지의 Sample 클래스를 두 번 임포트하고 있습니다.

import com.tutorialspoint.mypackage.Sample;
import com.tutorialspoint.mypackage.Sample;
public class Test{
    public static void main(String args[]){
        Sample obj = new Sample();
        obj.demo();
    }
}

실행 결과

This is a method of the sample class

이처럼 중복 임포트는 허용되지만, 코드 가독성과 유지보수를 고려하면 불필요한 중복 임포트 문은 제거하는 것이 좋은 코딩 습관입니다. 대부분의 IDE는 사용하지 않거나 중복된 임포트 문을 자동으로 정리해 주는 기능을 제공하므로 이를 활용하는 것도 좋은 방법입니다.