Development Tip

Java의 파일 이름이 공용 클래스 이름과 동일한 이유는 무엇입니까?

yourdevel 2020. 12. 25. 10:32
반응형

Java의 파일 이름이 공용 클래스 이름과 동일한 이유는 무엇입니까?


Java에서 파일 이름은 해당 파일에 public class포함 된 이름과 동일해야 합니다. 이것이 왜 제한입니까? 어떤 용도로 사용됩니까?


자바는 흥미로운 접근 방식을 가지고 있었다. 프로그래머에게 선택권을주는 것은 프로그래밍 경험을 저하시킬뿐 선택권을 제거하는 것이다.

그들은 꽤 많은 곳에서 이것을했습니다. 파일 이름과 패키지는 확실하지만 파일에 여러 공용 클래스를 허용하지 않으며 (절대 좋지 않음) 파일간에 클래스를 분할 할 수 없습니다 (젠장 작업하기가 어렵습니다!).

나는 그들이 몇 가지 더 나아 갔기를 정말로 바랬다. 공개 변수에 대한 이유는 없습니다. 저는 하나도 필요로하지 않았고, 어떤 똑똑한 프로그래머가 변수가 필요하고 실제로 옳다고 생각하는 상황을 본 적이 없습니다.

나는 또한 메서드 / 클래스 크기 제한을 보는 것을 신경 쓰지 않을 것입니다. 그러나 이것은 대략적 일 수 있습니다 (코드 검사기로 쉽게 구현할 수 있습니다. 문제는 일반적으로 가장 도움이 필요한 회사가 자신에게 필요한 것을 모르는 회사라는 것입니다. 따라서 코드 검사기와 같은 도구를 사용하지 마십시오).

이것은 대부분의 소규모 팀에게 중요한 문제가 아니지만, 팀이 성장하고 인도, 중국 및 전 세계의 여러 다른 지점에서 컨설턴트가있는 여러 사이트를 보유하게되면 유연성이 떨어짐을 인식하게 될 것입니다.


setters / getters 댓글에 대한 응답 :

Java bean은 Borland가 GUI를 해킹 한 다음 Java로 개조하기 위해 만든 혐오스러운 존재였습니다.

끔찍한 아이디어 (OO 프로그래밍에서 산만 함)는 게터와 세터가 A) 구현을 너무 많이 보여주고 B) 다른 객체에게 작업을 실행하도록 요청하는 대신 다른 객체의 데이터에 대한 작업 측면에서 생각하게 만듭니다. 아직 OO에서 생각할 수없는 사람들에게는 나쁜 해킹입니다.

게터는 가끔 필요하지만 절대적으로 피할 수없는 것으로 간주되지 않는 한 추가해서는 안됩니다.

세터는 어떤 대가를 치르더라도 피해야합니다. 개체가 생성 된 후 외부 적으로 상태를 수정해야하는 경우 빌더 패턴을 사용하고 작업이 실행 된 후 setter가 호출되지 않도록 보호하세요.

분명히 모든 것에 예외가 있으며, 많은 "게터"는 실제로 String.length ()와 같은 중요한 객체 비즈니스 로직입니다. String.length ()는 String이 구현 된 방법에 관계없이 필요하며 속성을 반환하여 구현되지도 않습니다. 당신이 그것을 부르고 싶다면 "Getter"의 경우.


나는 그것이 단순히 필수 라고 말하려고했다 . 그러나 나는 JLS를 보았고 그렇게 엄격하지 않았습니다. JLS의 관점에서 이러한 제한을 설정할지 여부를 선택하는 것은 컴파일러의 몫입니다.

실제적으로 말하면 일반적인 컴파일러에는 이러한 제한이 있으며 다른 이미 설명했듯이 컴파일러가 컴파일 단위를 찾거나 클래스 로더가 이러한 제한이있는 클래스 파일을 찾는 것이 훨씬 쉽습니다.


더 구체적으로 말하면, 파일 이름 은 해당 파일 공용 클래스 이름 과 동일한 이름을 가져야 합니다. 이는 JVM에 이것이 진입 점임을 알리는 방법입니다.


Java의 제작자 인 Sun이 설정 한 규칙 일뿐 입니다.
목적은 조직입니다. 그 이유는 Java로 코딩하는 모든 사람이 일관된 파일 이름 지정 방법을 갖기 때문입니다.


각 공용 클래스는 FileName이 ClassName과 일치하는 파일에 있어야하며 Packagename이 점 형식으로 쓰여진 Directory 구조를 나타내는 패키지 (com / example / app이 com.example.app이되는 것처럼 슬래시는 점이 됨)에 있어야합니다.

이 규칙은 무작위가 아닙니다. 컴파일러는 소스 파일을 찾을 수 있어야하고 클래스 로더는 구현을 찾을 수 있어야합니다. 패키지 이름과 클래스 이름을 일치 시키면이 작업이 정말 간단하고 더 중요하고 빠릅니다.

이 규칙은 비공개 클래스에는 적용되지 않습니다. 이는 비공개 클래스의 가시성이 매우 제한되어 있고 정의 된 패키지 내에서만 사용할 수 있기 때문입니다. 따라서 두 경우 모두 컴파일러와 런타임 환경이 이미 올바른 파일을 찾았습니다.


클래스를 찾는 데 유용합니다. 즉, 다른 파일 이름이 허용되고 클래스의 인스턴스를 만든 경우 컴파일러는 파일 이름이 클래스의 이름과 같으면 클래스를 찾아 사용하는 성능이 다음과 같으면 대신 모든 파일에서 클래스를 검색해야합니다. 증가했습니다. 다른 이유도있을 수 있습니다.


공용이 아닌 한 클래스는 파일 이름과 다른 이름을 가질 수 있습니다 . 클래스는 또한 메인 메소드를 가질 수 있습니다. 클래스 파일은 소스 파일 이름이 아닌 클래스 이름으로 생성됩니다. 클래스 이름을 사용하여 실행해야합니다.

이유는 기본 클래스가 패키지 전용이므로 javac는 패키지 외부에서 다른 Java 프로그램을 컴파일러하기 위해이 소스 파일을 찾을 필요가 없습니다.

참조 URL : https://stackoverflow.com/questions/2134784/why-are-filenames-in-java-the-same-as-the-public-class-name

반응형