객체 지향 프로그래밍에서 공용, 개인 및 보호 란 무엇입니까?


답변:


153

이들은 액세스 수정 자 이며 캡슐화 (또는 정보 숨김)를 구현하는 데 도움이 됩니다. 정의되는 필드 또는 메서드에 액세스 할 수있는 다른 클래스를 컴파일러에 알립니다.

private -현재 클래스 만 필드 또는 메서드에 액세스 할 수 있습니다.

protected -이 클래스의 현재 클래스와 하위 클래스 (때로는 동일한 패키지 클래스) 만 필드 또는 메서드에 액세스 할 수 있습니다.

public -모든 클래스는 필드를 참조하거나 메서드를 호출 할 수 있습니다.

이는 이러한 키워드가 클래스 정의 내에서 필드 또는 메서드 선언의 일부로 사용된다고 가정합니다.


4
참고 동일한 패키지가 액세스 할 수 보호 회원의 자바 구성원에
랜든 쿤

2
예, Java에는 빈 문자열 인 네 번째 액세스 수정 자도 있습니다. 액세스 수정자를 제공하지 않으면 모든 패키지 수준 클래스에서 액세스 할 수 있습니다.
Ben S

1
필자는 "컴파일러"부분을 좋아한다. 내가 아는 대부분의 언어는 예를 들어 .NET의 리플렉션을 통해 런타임에 쉽게 액세스 할 수 있기 때문이다. 따라서 이러한 액세스 수정자는 기본적으로 프로그래머가 특정 항목을 숨겨 같은 코드로 작업 / 작업하는 다른 프로그래머를 안내하는 데 도움이된다고 말하는 경향이 있습니다.
merkuro 2009-06-20

1
일부 언어에는 몇 가지 특수성이 있습니다. Delphi에서와 마찬가지로 private 멤버는 같은 유닛의 다른 클래스에서 액세스 할 수 있으며이 동작을 원하지 않는 경우 strict private을 사용해야합니다.
Fabio Gomes

1
C #은 동일한 패키지의 액세스 보호 멤버 트릭도 수행합니다. 본질적으로, C 번호는 마이크로 소프트의 자바입니다
iGbanam

7

세 가지 모두 클래스에서 사용되는 액세스 수정 자 및 키워드입니다. public으로 선언 된 모든 것은 클래스 내 또는 클래스 외부의 모든 객체에서 사용할 수 있으며 private 변수는 클래스 내 객체에서만 사용할 수 있으며 직접 액세스를 통해 변경할 수 없습니다 (친구 함수와 같은 함수를 통해 변경 가능). 보호 섹션 아래에 정의 된 모든 것은 클래스와 방금 파생 된 클래스에서 사용할 수 있습니다.


6

그것들은 실제로 개념이 아니라 C ++ 및 Java와 같은 인기있는 언어에서 발생하는 경향이있는 (약간 다른 의미로) 특정 키워드입니다.

기본적으로 클래스가 멤버 (필드 또는 함수)에 대한 액세스를 제한 할 수 있도록합니다. 아이디어는 다른 유형에서 액세스 할 수있는 유형이 적을수록 종속성이 더 적게 생성 될 수 있다는 것입니다. 이를 통해 액세스 된 개체를 참조하는 개체에 영향을주지 않고보다 쉽게 ​​변경할 수 있습니다.

일반적으로 공개는 모든 사람이 액세스 할 수 있음을 의미하고, private은 동일한 클래스의 구성원 만 액세스 할 수 있음을 의미하며 보호됨은 하위 클래스의 구성원도 허용됨을 의미합니다. 그러나 각 언어는 이것에 자신의 것을 추가합니다. 예를 들어 C ++를 사용하면 비공개로 상속 할 수 있습니다. Java에는 기본 (패키지) 액세스 수준도 있으며 내부 클래스 등에 대한 규칙이 있습니다.


2

공용 항목은 다른 클래스에서 액세스 할 수있는 항목입니다. 객체가 무엇인지 알아야하고 도트 연산자를 사용하여 액세스 할 수 있습니다. 보호됨은 클래스와 그 하위 클래스가 변수에 액세스 할 수 있지만 다른 클래스에는 액세스 할 수 없음을 의미합니다. 변수로 작업을 수행하려면 getter / setter를 사용해야합니다. private은 해당 클래스 만 변수에 직접 액세스 할 수 있으며 다른 모든 항목에는 해당 데이터에 액세스하거나 변경하기위한 메서드 / 함수가 필요합니다. 도움이 되었기를 바랍니다.


1

위와 같지만 질적으로 :

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

액세스 권한이 적을수록 객체에서 누출되는 구현 세부 정보가 줄어 듭니다. 이러한 종류의 누출이 적다는 것은 객체의 클라이언트를 손상시키지 않고 객체가 구현되는 방식을 변경하는 측면에서 더 많은 유연성 (일명 "느슨한 결합")을 의미합니다. 이것은 이해해야 할 진정으로 근본적인 것입니다.


0

요약하자면 객체 지향 프로그래밍에서는 모든 것이 클래스와 객체로 모델링됩니다. 클래스에는 속성과 메서드가 포함됩니다. 공용, 개인 및 보호 키워드는 다른 클래스 나 다른 .dll 또는 다른 응용 프로그램에서 클래스의 이러한 멤버 (속성 및 메서드)에 대한 액세스를 지정하는 데 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.