액세스 수식자
Access modifiers액세스 수식자(또는 액세스 지정자)는 클래스, 메서드 및 기타 구성원의 접근성을 설정하는 객체 지향 언어의 키워드입니다.액세스 수식자는 [1]컴포넌트의 캡슐화를 용이하게 하기 위해 사용되는 프로그래밍 언어 구문의 특정 부분입니다.
C++ 에서는, 액세스 수식자는 3개 뿐입니다.C#에서는 [2]6개까지 확장되지만 Java에서는 4개의 액세스 수식자가 있지만 이 목적을 위한 키워드는 3개입니다.Java 에서는 키워드를 지정하지 않으면 기본적으로 package-private 수식자가 됩니다.
클래스가 공개로 선언되면 같은 패키지에 정의된 다른 클래스와 다른 패키지에 정의된 클래스에 액세스할 수 있습니다.이것은 클래스에 가장 일반적으로 사용되는 지정자입니다.단, 클래스 자체는 비공개로 선언할 수 없습니다.액세스 지정자가 지정되지 않은 경우 기본 액세스 제한이 적용됩니다.클래스는 동일한 패키지의 다른 클래스에는 액세스할 수 있지만 패키지 외부의 클래스에는 액세스할 수 없습니다.클래스에 액세스할 수 없다고 하는 것은 단순히 해당 클래스의 개체를 만들거나 해당 클래스 유형의 변수를 선언할 수 없음을 의미합니다.보호된 액세스 지정자도 클래스에 적용할 수 없습니다.
키워드 이름
C++ 에서는,[3] 라고 하는3개의 수식어가 사용됩니다.C# 에는 수식어가 있습니다.internal
Java 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; }
레퍼런스
메모들
- ^ 2002년 5월, 199페이지
- ^ Wagner, Bill. "Access Modifiers - C# Programming Guide". docs.microsoft.com. Retrieved 2020-01-13.
{{cite web}}
: CS1 maint :url-status (링크) - ^ "Access specifiers". en.cppreference.com. Retrieved 2020-01-13.
{{cite web}}
: CS1 maint :url-status (링크) - ^ "Access Control — The Swift Programming Language (Swift 5.3)". docs.swift.org. Retrieved 2021-02-08.
참고 문헌
- Mayo, Joseph (2002), C Sharp Unleashed, Sams publishing, ISBN 9780672321221