logo

공개 자바와 비공개 자바

자바에서는 공공의 그리고 사적인 ~이다 키워드 이는 다음과 같이 알려져 있습니다. 접근 수정자 또는 지정자 . 클래스의 범위나 접근성을 제한합니다. 건설자 , 변수 , 방법 s 및 데이터 멤버. 어떤 것이 적용되는지에 따라 다릅니다. Java는 네 가지 유형의 액세스 수정자를 제공합니다. 공개, 비공개, 보호 , 그리고 기본 . 하지만 이 섹션에서는 공공 및 민간 두 가지에 대해서만 논의하고 공개 액세스 지정자와 비공개 액세스 지정자의 차이점 예를 들어.

액세스 한정자는 다른 클래스가 특정 필드를 사용하거나 특정 메서드를 호출할 수 있는지 여부를 제어합니다. 자바 두 가지 수준의 액세스 제어를 제공합니다.

    최상위:이 수준에서는 다음 중 하나만 사용할 수 있습니다. 공공의 회원 등급:이 수준에서 우리는 다음을 사용할 수 있습니다. 공개, 비공개, 보호 그리고 패키지 전용 (명시적인 수정자를 사용하지 않는 경우 이를 package-private이라고 합니다).

다음 표는 public 및 private 한정자가 허용하는 멤버에 대한 액세스 수준을 보여줍니다.

인공지능과 지능형 에이전트
공개 자바와 비공개 자바

아직도 둘 사이의 차이점이 명확하지 않나요? 액세스 수준이 가시성에 어떤 영향을 미치는지 보여주는 그림을 보여드리겠습니다. 다음 그림은 두 패키지를 보여줍니다. p1 그리고 p2 . 각 패키지에는 두 개의 클래스가 포함되어 있습니다. 데모1 그리고 데모2 (패키지 p1에 있음) 및 데모3 그리고 데모4 (패키지 p2에 있음)

공개 자바와 비공개 자바

다음 표에서는 클래스를 하나씩 공개 및 비공개로 설정할 경우 클래스의 가시성에 대해 설명합니다. 위 그림에서 Demo1은 각 액세스 한정자에 대해 표시되는 유일한 클래스입니다.

공개 자바와 비공개 자바

자세히 논의해 봅시다.

공개 액세스 수정자

를 사용하여 지정할 수 있습니다. 공공의 예어. 그 범위나 접근성은 다른 액세스 지정자 중에서 가장 넓습니다. public으로 선언된 변수, 클래스 및 메서드는 프로그램의 모든 곳에서 액세스할 수 있습니다. 공개 데이터 구성원의 범위에 제한을 두지 않습니다. 메소드와 클래스를 공개로 선언하면 다음 원칙도 위반됩니다. 캡슐화 . 최상위 클래스에서도 사용할 수 있습니다.

개인 액세스 지정자를 사용해 보겠습니다. 자바 프로그램 더 나은 이해를 위해.

Demo1.java

데이터베이스의 정규화
 package p1; public class Demo1 { public void show() { System.out.println('Javatpoint'); } } 

Demo2.java

 package p2; import p1.*; class Demo2 { public static void main(String args[]) { Demo1 obj = new Demo1(); obj.show(); } } 

산출

Java의 사용자 정의 예외
 Javatpoint 

비공개 액세스 수정자

이는 공개 수정자의 반대입니다. 를 사용하여 지정할 수 있습니다. 사적인 키워드 뒤에는 클래스 이름(중첩 클래스에만 적용됨), 메서드 이름 또는 데이터 멤버가 옵니다. 최상위 클래스 또는 개인 액세스 지정자를 사용할 수 없습니다. 인터페이스 . private으로 선언된 변수, 메서드, 클래스는 해당 클래스가 선언된 클래스에서만 접근할 수 있거나 부모 클래스를 상속받아 접근할 수 있습니다. 이는 Java에서 가장 제한된 액세스 지정자입니다. 캡슐화의 높이 형태입니다.

  • 우리는 할 수 없습니다 우세하다 비공개로 선언된 메소드.
  • 생성자와 함께 private 수정자를 사용하면 하위 클래스화되는 것을 방지할 수 있습니다.
  • 동일한 클래스 내의 다른 클래스로부터 해당 클래스를 숨깁니다. 패키지 .

더 나은 이해를 위해 Java 프로그램에서 개인 액세스 지정자를 사용해 보겠습니다.

다음 예에서는 Demo1과 Demo2라는 두 개의 클래스를 선언했습니다. Demo1 클래스에서는 메소드를 정의했습니다. 보여주다() 비공개로. Demo2 클래스에는 Demo1 클래스의 객체를 생성한 main() 메서드가 포함되어 있습니다. 그 후에는 Demo2 클래스에서 Demo1 클래스의 비공개 메서드에 액세스하려고 하는데 이는 불가능합니다. 하지만 여전히 프로그램을 실행하여 어떤 오류가 표시되는지 확인하겠습니다.

 class Demo1 { //defining method as private private void show() { System.out.println('Javatpoint'); } } public class Demo2 { public static void main(String args[]) { Demo1 obj = new Demo1(); //trying to access private method of the class Demo1 obj.show(); } } 

위 프로그램을 실행하면 다음과 같은 오류가 표시됩니다.

공개 자바와 비공개 자바

Java의 공개 액세스 지정자와 개인 액세스 지정자의 차이점

공개 수정자와 비공개 수정자의 주요 차이점은 가시성입니다. Java는 클래스 멤버의 가시성을 다음과 같이 분류합니다.

  • 동일한 패키지의 서브클래스
  • 동일한 패키지의 서브클래스가 아닌 경우
  • 다양한 패키지의 서브클래스
  • 동일한 패키지나 하위 클래스에 속하지 않는 클래스
공개 자바와 비공개 자바

어느 것을 사용해야 할까요?

메서드나 속성을 어디에서나, 다른 클래스 및 개체의 인스턴스에서 볼 수 있도록 하려면 공용 액세스 수정자를 사용해야 합니다. 메서드나 속성을 자체 클래스에만 표시하려면 private 액세스 한정자를 사용하세요. 상수를 제외한 공개 필드는 피하세요.