본문 바로가기

개발/JAVA

소스파일명과 동일한 클래스에만 public을 붙일 수 있는 이유

반응형


자바 언어를 배우면서 클래스의 이름은 소스파일명과 같아야 한다는 것은 지극히 당연한 일이죠?

한 소스파일 내에 클래스가 여러 개 있을 때는 소스파일명과 동일한 클래스에만 public이라는 접근제어자를 사용할 수 있는데 그 이유가 궁금해서 정리해봤습니다.

그 이유는

자바의 컴파일과 네임스페이스 관리 방식과 관련이 있기 때문입니다.

 

소스 파일명과 클래스 이름이 동일한 경우 컴파일러는 해당 클래스 파일의 이름을 소스 파일명과 동일하게 생성합니다.

이러한 방식은 자바의 일관성과 그 구조를 유지하는 데에 도움을 준다고 합니다.

또한 클래스의 접근성과 사용범위를 명확하게 유지할 수 있습니다.

 

그렇다면 한 소스 파일명에 여러 개의 클래스가 있는 경우 왜 다른 클래스에는 public 접근제어자를 사용할 수 없을까요?

 

이것은 자바의 컴파일 및 로드 매커니즘과 관련이 있습니다.

자바 컴파일러는 소스 파일을 컴파일할 때 각 클래스를 각각의 바이트코드 파일로 분리해서 생성합니다.

클래스 파일의 이름은 해당 클래스의 이름과 동일하게 지정되는데 public 접근제어자를 사용할 수 있는 클래스와 해당 클래스 파일의 이름이 일치해야만 클래스의 접근성과 사용범위를 명확하게 유지할 수 있기 때문입니다.

 

같은 소스 파일에 여러 개의 클래스 중 소스파일명과 이름이 다른 클래스에는 public 접근제어자는 사용할 수 없지만 대신 package-private 접근제어자를 사용해서 해당 패키지 내에서만 접근할 수 있도록 제한하게 됩니다.

반응형