Java의 액세스 제어 권한 분석
(1) 사용자가 건드리지 말아야 할 부분을 건드리지 않도록 하기 위해서, 이러한 부분은 클래스 내부의 조작에 필요하지만, 클라이언트 프로그래머가 필요로 하는 인터페이스의 일부분에 속하지 않는다.
(2) 라이브러리 디자이너가 클래스의 내부 작업 방식을 변경할 수 있도록 하기 위해 사용자에게 중대한 영향을 미칠 것을 걱정할 필요가 없다.
Java의 액세스 권한 제어 레벨은 사용 권한의 크기와 크기에 따라 다음과 같습니다.
Public->protected->패키지 액세스 권한(권한 수식어 없음)->private.
1. 패키지(package)
Java 패키지(package)의 개념은 C++의 이름 공간(namespace)의 개념과 유사하며 클래스의 역할 영역을 제한할 수 있습니다.양자의 가장 큰 차이점은 자바의 패키지가 클래스의 트리 등급 구조를 은밀하게 가리킨다는 데 있다.이렇게 하면 파일 시스템에서 파일 경로의 유일성에 대한 요구를 통해 클래스의 유일성을 제한할 수 있다.
1. 코드 조직
Java 소스 코드 파일 (.java 파일) 을 작성할 때 이 파일은 일반적으로 컴파일러라고 합니다.컴파일러 내에 최대 하나의public 클래스가 허용되며, 이 클래스의 이름은 파일 이름과 완전히 같아야 합니다 (대/소문자 포함).
하나를 번역하다.java 파일 때.자바 파일의 모든 종류는 하나입니다.class 출력 파일입니다. 이 파일 이름과 클래스 이름은 같습니다.Java 실행 프로그램은 Java 문서 파일(JAR 패키지, Java를 사용하는jar 문서 생성기)로 압축할 수 있는 그룹입니다.class 파일.Java 해석기는 이러한 파일의 검색, 마운트 및 해석을 담당합니다.
라이브러리는 실제로 클래스 파일입니다.그중에 각각.자바 파일은 최대 하나의public 클래스와 임의의 수량의 비public 클래스를 허용합니다.따라서 파일마다 위젯이 있습니다.이 구성 요소 (구축마다.java 파일과 몇 개의.class 파일) 를 구성하여 서로 다른 그룹을 형성하려면 자바의 키워드 패키지를 사용할 수 있습니다.
2. 패키지(package)의 역할
(1) 기능이 비슷하거나 관련된 클래스나 인터페이스를 같은 패키지에 구성하여 클래스의 검색과 사용을 편리하게 한다.
(2) 폴더와 같이 패키지도 트리 디렉터리의 저장 방식을 사용한다.같은 가방의 클래스 이름은 다르다. 다른 가방의 클래스 이름은 같을 수 있다. 두 개의 다른 가방의 클래스 이름을 동시에 호출할 때 패키지 이름을 붙여서 구별해야 한다.따라서 가방은 이름 충돌을 피할 수 있다.
(3) 패키지도 액세스 권한을 제한하고 패키지 액세스 권한을 가진 클래스가 패키지의 클래스에 접근할 수 있습니다.
3. 패키지 만들기
Java에서 package 키워드를 사용하여 코드가 속한 패키지(네임스페이스)를 지정합니다.
구문 형식:
package pkg1[.pkg2[.pkg3…]];
참고 사항:(1) 패키지의 이름은 코드의 디렉터리 구조를 은근히 가리킨다.
(2) 같은 디렉터리에 있는public 클래스 이름(동시에 자바 파일 이름)은 유일무이하다.
(3) 패키지 성명은 원본 파일의 첫 줄에 있어야 하며, 원본 파일마다 패키지 성명만 있을 수 있으며, 이 파일의 모든 유형이 적용됩니다.
(4) 원본 파일에 패키지 설명을 사용하지 않으면 클래스, 함수, 매거, 주석 등이 이름 없는 패키지 (unnamed 패키지) 에 놓입니다.
(5) 패키지의 이름은 일반적으로 모두 소문자이다.
예:
자바 보기.util.ArrayList 클래스의 소스 코드는 파일의 첫 번째 행 코드를 볼 수 있습니다.
package java.util;
그것의 코드 디렉터리 구조는 바로java/util/ArrayList입니다.java
4. 패키지 가져오기
Java에서 import 키워드를 사용하여 패키지를 가져옵니다.
구문 형식:
import package1[.package2…].(classname|*);
예:아니면 자바로.util.Array List를 예로 들자.만약 하나의 완전한 경로로 그것을 사용한다면 매우 불편하다.
java.util.ArrayList<String> list = new java.util.ArrayList<String>();
앞의 경로를 생략하려면 import 키워드를 사용할 수 있습니다.
import java.util.ArrayList;
파일에서 import 가져오기 패키지를 사용하면 앞에서 설명한list 코드를 다음과 같이 간소화할 수 있습니다.
ArrayList<String> list = new ArrayList<String>();
2. 액세스 권한 수식어1,package:패키지 액세스 권한
액세스 권한 수식어를 제공하지 않으면 패키지 액세스 권한입니다.
기본 접근 권한은 키워드가 없지만 패키지 접근 권한을 가리킨다. (때로는 friendly라고도 하는데 C++의 우원 개념과도 같다.)이것은 가방의 모든 다른 종류가 이 구성원이나 방법에 접근할 수 있지만, 이 가방 이외의 모든 종류는 접근할 수 없다는 것을 의미한다.
예:
com.notes.packages.test.Info
package com.notes.packages.test;
publicclass Info {
void print() { System.out.println("default method -- print()"); }
}
com.notes.packages.test.PublicDemo01
package com.notes.packages.test;
publicclass PublicDemo01 {
publicstaticvoid main(String[] args) {
Info x = new Info();
x.print();
}
}
PublicDemo01과 Info는 같은 패키지에서 Info의 default 레벨에 액세스할 수 있는 방법인 print () 를 사용합니다.com.notes.packages.PublicDemo02
package com.notes.packages;
import com.notes.packages.test.Info;
publicclass PublicDemo02 {
publicstaticvoid main(String[] args) {
Info x = new Info();
// x.print(); // Error
}
}
PublicDemo02와 Info는 하나의 패키지 아래에 있지 않고 Info의 패키지 액세스 권한 수준에 액세스할 수 없는 방법인 print () 입니다.2,public:인터페이스 액세스 권한
퍼블릭 키워드를 사용하면 성명된 구성원이나 방법이 모든 사람에게 접근할 수 있음을 의미합니다.
예: default 레벨 권한 예에서 print () 방법 권한을public로 설정하면 PublicDemo02에 액세스할 수 있습니다.
package com.notes.packages.test;
publicclass Info {
publicvoid print() { System.out.println("public method -- print()"); }
}
3. private: 액세스할 수 없음private 키워드를 사용하면 성명된 구성원이나 방법을 의미합니다. 이 클래스를 제외하고는 다른 클래스에 접근할 수 없습니다.
응용 장면: 단일 모드
4. protected: 액세스 권한 계승
새 클래스 (하위 클래스 또는 파생 클래스) 는 계승을 통해 기존 클래스 (부부 클래스 또는 기본 클래스) 를 복용한 다음 기본 클래스의 구성원, 방법을 확장할 수 있습니다.때때로, 기본 클래스의 창설자는 특정한 구성원에게 모든 클래스가 아닌 파생 클래스에 접근할 수 있는 권한을 부여하기를 원할 수도 있다.public는 이 점을 할 수 없습니다. 이를 위해protected를 도입하여 이 일을 완성했습니다.protected도 패키지 접근 권한을 제공합니다. 즉, 파생 클래스와 같은 패키지 내의 다른 클래스는protected 구성원이나 방법에 접근할 수 있습니다.
예: 하위 클래스가 상위 클래스를 계승한 후 상위 클래스의protected 구성원에 접근할 수 있습니다.
class Father {
private String a = "private";
protected String b = "protected";
public String c = "public";
};
class Son extends Father {
publicvoid print() {
// System.out.println("element a:" + super.a); // Error
System.out.println("element b:" + super.b);
System.out.println("element c:" + super.c);
}
}
publicclass ProtectedDemo01 {
publicstaticvoid main(String args[]) {
Son sub = new Son();
sub.print();
}
};
액세스 권한 수식어의 주의점앞의 각 예에서 클래스의 구성원, 방법은 모두 각종 권한 수식어로 수식할 수 있음을 보여 주었다.
이 외에도 주의해야 할 점이 있다.
(1) 정적 구성원, 정적 방법의 권한 수식어의 사용법은 일반 구성원, 방법과 같다.
(2)류는 수식어로도 수식될 수 있지만private,protected 두 권한으로 수사할 수 없다.
(3) 일부 책에서는 패키지 액세스 권한을 기본 액세스 권한이라고도 합니다.Java Se8의 새로운 기능인 default 키워드와 헷갈리기 쉽기 때문에 개인적으로 이렇게 기억하는 것을 권장하지 않습니다.이 키워드는 Interface에만 사용할 수 있으며, 프로그래머가 Interface에서 인터페이스를 정의하는 기본적인 구체적인 실현을 허용하는 역할을 합니다. (이전의 JDK 버전에서는 이런 것을 허용하지 않았습니다. 인터페이스에서만 방법을 설명할 수 있습니다.)
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되기를 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.