액세스 수식자

Access modifiers

액세스 수식자(또는 액세스 지정자)는 클래스, 메서드 및 기타 구성원의 접근성을 설정하는 객체 지향 언어의 키워드입니다.액세스 수식자는 [1]컴포넌트의 캡슐화를 용이하게 하기 위해 사용되는 프로그래밍 언어 구문의 특정 부분입니다.

C++ 에서는, 액세스 수식자는 3개 뿐입니다.C#에서는 [2]6개까지 확장되지만 Java에서는 4개의 액세스 수식자가 있지만 이 목적을 위한 키워드는 3개입니다.Java 에서는 키워드를 지정하지 않으면 기본적으로 package-private 수식자가 됩니다.

클래스가 공개로 선언되면 같은 패키지에 정의된 다른 클래스와 다른 패키지에 정의된 클래스에 액세스할 수 있습니다.이것은 클래스에 가장 일반적으로 사용되는 지정자입니다.단, 클래스 자체는 비공개로 선언할 수 없습니다.액세스 지정자가 지정되지 않은 경우 기본 액세스 제한이 적용됩니다.클래스는 동일한 패키지의 다른 클래스에는 액세스할 수 있지만 패키지 외부의 클래스에는 액세스할 수 없습니다.클래스에 액세스할 수 없다고 하는 것은 단순히 해당 클래스의 개체를 만들거나 해당 클래스 유형의 변수를 선언할 수 없음을 의미합니다.보호된 액세스 지정자도 클래스에 적용할 수 없습니다.

키워드 이름

C++ 에서는,[3] 라고 하는3개의 수식어가 사용됩니다.C# 에는 수식어가 있습니다.internalJava has , , , , 가 디폴트로 사용됩니다.다른 액세스 수식자 키워드가 지정되지 않은 경우 사용됩니다.이러한 수식어의 의미는 언어마다 다를 수 있습니다.다음으로 가장 제한적인 키워드부터 가장 개방적인 키워드 순으로 정렬된 키워드와 이들 3개 언어에서의 그 의미를 비교합니다.표시 범위는 동일한 클래스에서 클래스가 정의된 패키지에 이르기까지 일반 액세스 권한에 이르기까지 다양합니다.다음 표에 최대 액세스 수를 나타냅니다.

Swift에서는 엔티티가 정의되어 있는 소스 파일과 해당 소스 [4]파일을 포함하는 모듈 모두에 대해 5가지 접근레벨이 있어요

키워드 C# C++ 자바 재빠르다
private 학급 학급
및/또는
친구 수업
학급 동봉된 선언만
+ 선언 확장자를 같은 파일에 저장
fileprivate - - - 동일 파일
private protected 같은 어셈블리의 파생 클래스 - - -
protected internal 동일 어셈블리
및/또는
파생 클래스
- - -
protected 파생 클래스 파생 클래스
및/또는
친구 수업
파생 클래스
및/또는
같은 패키지로
-
package - - 그 패키지 안에 -
internal 동일 어셈블리 - - 동일 모듈
public 모두 모두 모두 모두
open - - - 모두
+ 외부 모듈 서브클래스
+ 외부 모듈 덮어쓰기

C++의 예

#실패하다 <iostream> #실패하다 <conio.h> 사용. 표준::외치다; 사용. 표준::;  구조 B { // 구조 내부의 기본 액세스 수식자는 public입니다.     무효 set_n(인트 v) { n = v; }     무효 f()          { 외치다 << > "B::f" << > ; }   보호되고 있다:     인트 m, n; // B::m, B::n은 보호됩니다.   사적인:     인트 x; };   구조 D : B {     사용. B::m;               // D::m은 퍼블릭     인트 취득_n() { 돌아가다 n; } // B::n 에는 액세스 할 수 있습니다만, 외부에서는 액세스 할 수 없습니다. // int get_x() {return x; } // 오류, B::x는 여기서 액세스할 수 없습니다.  사적인:     사용. B::f;               // D::f는 프라이빗 };   인트 주된() {     D d;  // d.x = 2; // 오류, 개인 // d.n = 2; // 오류, 보호됨     d.m = 2; // 보호된 B::m은 D::m으로 접근 가능      d.set_n(2); // 콜 B:: set_n(int)     외치다 << > d.취득_n() << > ; // 출력: 2  // d.f(); // ERROR, B::f는 D::f로서 액세스 할 수 없습니다.       B& b = d; // b는 d를 참조하고 그것을 B타입으로 "표시"한다.  // b.x = 3; // ERROR, 프라이빗 // b.n = 3; // 오류, 보호됨 // b.m = 3; // ERROR, B::m은 보호됩니다.      b.set_n(3); // 콜 B:: set_n(int) // cout << b.get_n(); // 오류, 'struct B'에는 'get_n'이라는 이름의 멤버가 없습니다.      b.f();   // B를 호출한다::f()     돌아가다 0; } 

레퍼런스

메모들

  1. ^ 2002년 5월, 199페이지
  2. ^ Wagner, Bill. "Access Modifiers - C# Programming Guide". docs.microsoft.com. Retrieved 2020-01-13.{{cite web}}: CS1 maint :url-status (링크)
  3. ^ "Access specifiers". en.cppreference.com. Retrieved 2020-01-13.{{cite web}}: CS1 maint :url-status (링크)
  4. ^ "Access Control — The Swift Programming Language (Swift 5.3)". docs.swift.org. Retrieved 2021-02-08.

참고 문헌