문제

나는 초보자이고 내가 정의하면

package my.first.group.here;
...

그러면이 패키지에있는 Java 파일이 아래에 배치됩니다. my/first/group/here 예배 규칙서.

일부 Java 파일을 패키지에 넣는 주요 목적은 무엇입니까? 또한, 내가 이것을 채택하기로 선택했다면 어떻게 그룹화해야합니까?

고맙습니다


편집 : 다시 같은 질문을 할 수있는 사람은 방금 찾았습니다. 패키지에 대한이 튜토리얼 태양에서

도움이 되었습니까?

해결책

다음에 설명 된대로 "Java 패키지"의 정의부터 시작하겠습니다. 위키 백과 기사:

Java 패키지는 Modula 모듈과 유사한 네임 스페이스로 Java 클래스를 구성하는 메커니즘입니다. Java 패키지는 JAR 파일이라는 압축 파일에 저장 될 수 있으므로 클래스가 한 번에 하나가 아닌 그룹으로 더 빠르게 다운로드 할 수 있습니다. 프로그래머는 일반적으로 패키지를 사용하여 동일한 범주에 속하는 클래스를 구성하거나 유사한 기능을 제공합니다.

그래서 그것에 근거하여 Java의 패키지는 단순히 클래스를 구성하고 클래스 이름 충돌을 방지하는 데 사용되는 메커니즘입니다.. 당신은 그들에게 원하는 것을 말할 수 있지만 Sun은 일부를 출판했습니다. 이름 지정 규칙 당신 ~해야 한다 패키지 이름 지정시 사용 :

패키지

고유 한 패키지 이름의 접두사는 항상 All-LowerCase ASCII 문자로 작성되며 현재 COM, Edu, Gov, Mil, Net, Org 또는 English Two-Letter 코드 중 하나 여야합니다. ISO 표준 3166, 1981에 명시된 국가 식별.

패키지 이름의 후속 구성 요소는 조직의 내부 명명 규칙에 따라 다릅니다. 이러한 규칙은 특정 디렉토리 이름 구성 요소가 부서, 부서, 프로젝트, 기계 또는 로그인 이름임을 지정할 수 있습니다.

예 :

  • com.sun.eng

  • com.apple.quicktime.v2

  • edu.cmu.cs.bovik.cheese

다른 팁

나는 큰 응용 프로그램입니다. 특히 타사 항아리를 가져 오기 시작할 때 정확히 동일하게 (java.util.date 및 java.sql.date)라는 두 개의 파일이 있습니다. 따라서 기본적으로 패키지를 사용하여 고유성을 보장 할 수 있습니다.

가장 중요한 것은 제 생각에 포장은 프로젝트를 의미있는 세그먼트로 분류합니다. 따라서 내 SQL 패키지에는 SQL 관련 코드가 있으며 로거 패키지는 로깅을 처리합니다.

이를 통해 여러 다른 프로그램/구성 요소/라이브러리에서 프로그램을 구성 할 수 있으므로 클래스 이름이 충돌하지 않고 구성 요소를 쉽게 구성 할 수 있습니다. 보다 http://java.sun.com/docs/books/tutorial/java/package/index.html

Java에서는 패키지를 리버스 도메인 이름으로 지명하는 것이 일반적입니다. 예를 들어, 회사의 도메인이 "initech.com"이고 "gizmo"라는 프로그램을 만드는 경우 패키지 이름은 일반적으로 프로그램의 다른 구성 요소에 대한 서브 포장으로 "com.initech.gizmo"로 접두사로 표시됩니다.

다른 답변에 언급 된 네임 스케이싱 외에도 해당 멤버의 선언 된 범위를 기반으로 메소드 및 필드에 대한 액세스를 제한 할 수 있습니다. 멤버 공공의 범위는 자유롭게 액세스 할 수 있으며, 일반적으로 접근을 제한하기 위해 사적인 (즉, 수업 밖에서 숨겨져 있습니다). 당신은 또한 사용할 수 있습니다 보호 유형과 어린이에 대한 액세스를 제한하는 범위. 또한 있습니다 기본 SCOPE (Qualifier가없는 멤버에는 기본 범위가 있습니다)는 멤버에 대한 동일한 패키지에 어린이 유형 및 유형을 허용합니다. 이는 필드와 방법을 너무 광범위하게 사용할 수있게하지 않고 공유하는 효과적인 방법 일 수 있으며 테스트에 도움이 될 수 있습니다.

예를 들어 아래 방법은 동일한 패키지의 다른 모든 구성원에게 표시됩니다.

public class Foo {
    int doSomething() {
        return 1;
    }
}

메소드를 테스트하기 위해 동일한 패키지 (아마도 다른 소스 위치)에서 다른 유형을 정의 할 수 있습니다.이 유형은 메소드에 액세스 할 수 있습니다.

public class FooTest {
    @Test
    int testDoSomething() {
        Foo foo = new Foo();
        assertEquals(1, foo.doSomething());
    }
}

패키지는 수업 분리의 유연성을 제공하는 데 중요합니다. 다음에 사용될 수 있습니다.

  • 프로젝트 분리
  • 모듈 분리
  • 응용 프로그램 계층 분리 (비즈니스, 웹, DAO)
  • 더 미세한 입자 코드 분리

예를 들어

com.mycompany.thisproject.thismodule.web

일부 모듈의 웹 계층을 표시 할 수 있습니다.

궁극적으로 Java에서 패키지를 사용하려는 3 가지 핵심 이유가 있습니다.

1) 더 쉬운 유지 보수

조직 classes ~ 안으로 packages 캡슐화에 의한 관심 원리의 분리에 따라 전체 시스템 설계에서 더 나은 응집력을 제공합니다. 더 나아가서, 포장별로 포장을 통해 개발자 팀은 변화를위한 관련 클래스와 인터페이스를 찾아 민첩한 방법론에 사용되는 스케일링 접근법에 대한 수직 슬라이싱 기술을 지원할 수 있습니다. 자세한 내용은 블로그 게시물을 참조하십시오. 레이어가 아닌 기능별로 클래스를 포장하십시오 그리고 코딩 : 수직 슬라이스로 포장.

2) 패키지 보안을 제공합니다

패키지는 외부에만 액세스 할 수 있습니다 public 포함 된 클래스의 메소드에 대한 수정자를 액세스합니다. 사용 protected 또는 동일한 패키지 내의 클래스에만 수정자가 액세스 할 수 없습니다. 자세한 내용은 게시물을 참조하십시오.어떤 Java Access Modifier가 다른 패키지의 서브 클래스에서만 멤버에 액세스 할 수 있습니까?

3) 비슷한 이름을 피하십시오

.NET의 네임 스페이스와 유사하게 클래스 이름은 포함 된 패키지의 범위 내에 포함됩니다. 이는 두 개의 상호 독점 패키지가 동일한 이름의 클래스를 포함 할 수 있음을 의미합니다. 패키지 자체의 이름이 다르기 때문에 완전히 자격을 갖춘 이름이 다르기 때문입니다. 자세한 내용은 튜토리얼 [패키지 이름 : Java Tutorials] [3]을 참조하십시오.

로부터 위키 백과 주제에 관한 페이지 :

"Java 패키지는 Modula 모듈 모듈과 유사한 네임 스페이스로 Java 클래스를 구성하는 메커니즘입니다. Java 패키지는 JAR 파일이라는 압축 파일에 저장 될 수 있으므로 클래스는 한 번에 하나씩 그룹으로 더 빠르게 다운로드 할 수 있습니다. 일반적으로 프로그래머는 일반적으로도 프로그래머도 있습니다. 패키지를 사용하여 동일한 범주에 속하는 클래스를 구성하거나 유사한 기능을 제공합니다. "

또한, 내가 이것을 채택하기로 선택했다면 어떻게 그룹화해야합니까?

이것은 주로 프로젝트에 사용할 설계 패턴에 따라 다릅니다. 대부분의 경우 (특히 새로운 경우) 기능성 또는 다른 논리적 유사성으로 그룹화하고 싶을 것입니다.

다른 사람들은 괜찮은 Java 특정 답변을 제공했지만 여기에 비유가 있습니다. 왜 하드 드라이브의 디렉토리로 파일을 구성합니까? 하나의 디렉토리에 모든 것이있는 플랫 파일 시스템 만 가지고 있지 않습니까?

물론 대답은 패키지가 조직을 제공한다는 것입니다. 데이터베이스와 인터페이스하는 프로그램의 일부는 UI를 사용자에게 표시하는 프로그램의 일부와 다르므로 패키지가 다릅니다.

디렉토리와 마찬가지로 이름 충돌을 해결하는 방법도 제공합니다. 다른 패키지에 나타나는 두 개의 클래스를 가질 수있는 것과 같은 방식으로 몇 개의 다른 디렉토리로 temp.txt를 가질 수 있습니다. 이것은 (1) 인터넷에서 다른 사람들과 코드를 결합하기 시작하거나 (2) Java의 클래스로드가 어떻게 작동하는지 인식 할 때 중요합니다.

패키지의 또 다른 중요한 것은입니다 보호 액세스 제어 회원.

보호는 공개 (모든 사람이 액세스 할 수 있음)와 개인 (클래스 내부 만 액세스 할 수 있음) 사이에 있습니다. 보호 된 것으로 표시된 물건은 동일한 패키지 내 또는 하위 클래스에서 액세스 할 수 있습니다. 이것은 제한된 액세스를 위해 모든 것을 같은 클래스에 넣을 필요가 없음을 의미합니다.

Java는 구현이 매우 정확합니다. 그것은 실제로 푸딩의 공간을 떠나지 않습니다.

모든 사람이 동일한 패키지를 사용하려면 두 개의 클래스 이름이 충돌하지 않도록 "월드 와이드"방법을 찾아야합니다.

이것은 모든 단일 클래스가 원하지 않는 경우 볼 필요가없는 자체 "장소"에 적합하게 할 수 있도록합니다.

시스템의 4 개의 다른 위치에 정의 된 다른 "포인트"객체를 가질 수 있지만 클래스는 예상 한 것만 사용합니다 (해당 클래스를 가져 오기 때문에).

모든 사람이 자신의 공간을 가지고 있도록 보장하는 방법은 리버스 도메인을 사용하는 것이므로 "TV.kress.bill"입니다. 나는 그 도메인을 소유하고 있습니다-실제로 나는 동생 "tv.kress.doug"와 공유하고 동일한 도메인을 공유하더라도 충돌 할 수 없습니다.

회사의 100 개의 부서가 각각 Java로 개발되면 충돌없이 나누는 방법을 알 수 없습니다.

이런 종류의 분열을하지 않는 시스템은 지금 나에게 정말 벗겨져 보입니다. 나는 그것들을 사용하여 개인적인 무언가를 위해 대본을 해킹 할 수도 있지만, 엄격한 포장이 진행되지 않고 큰 것을 개발하는 것이 불편하다고 느낄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top