모르지 않다는 것은 아는것과 다르다.

Java

접근 지정자

채마스 2022. 2. 26. 00:45

접근 지정자

 

개요

  • java 접근 지정자 private, default, protected, public 에 대해서 알아보려고 한다.





private, default, protected, public 비교

  • public : 어떠한 클래스든 접근이 가능하다.
  • protected : 상속받은 클래스 또는 같은 패키지에서만 접근이 가능하다.
  • default : 자신 클래스 내부와 같은 패키지 내에서만 접근이 가능하다.
  • private : 같은 클래스 내에서만 접근이 가능하다.
  • 접근영역 : public > protected > default > private






코드 예시

public

 

package com.pack;

class A {

    public int data = 40;
}
package com.pack.test;

class B {

    public static void main(String args[]) {

        A obj = new A();
        System.out.println(obj.data);
    }
}
  • 위 코드의 경우 에러가 발생하지 않는다.
  • 접근 지정자가 public 인 경우, 패키지도 다르고, 외부 클래스이고, 상속관계도 아니지만 접근이 가능하다.


protected

 

package com.pack;

class A {

    protected int data = 40;
}
package com.pack.test;

class B extends A{

    public static void main(String args[]) {

        A obj = new A();
        System.out.println(obj.data);
    }
}
  • 위 코드의 경우 에러가 발생하지 않는다.
  • 클래스 B 는 A와 패키기도 다르고, 외부 클래스이다.
  • 접근 지정자가 protected 인 경우, 하위 클래스에서 접근이 가능하기 때문이다.
  • 물론 상속관계가 아니더라도 패키지가 같으면 접근 가능하다.


default

 

package com.pack;

class A {

    int data = 40;
}
package com.pack.test;

class B {

    public static void main(String args[]) {

        A obj = new A();
        System.out.println(obj.data);
    }
}
  • 위 코드의 경우 에러가 발생한다.
  • 접근 지정자가 default 의 경우, 다른 패키지에서는 접근이 불가능하다.
  • 당연하겠지만 클래스 B 의 패키지가 클래스 A 와 같이 com.pack 이라면, 접근이 가능하다.


private

 

package com.pack;

class A {

    private int data = 40;
}
package com.pack;

class B {

    public static void main(String args[]) {

        A obj = new A();
        System.out.println(obj.data);
    }
}
  • 위 코드의 경우 에러가 발생한다.
  • 그 이유는 접근지정자가 private 이면, 다른 클래스에서 접근이 불가능하다.
  • 접근하려면, getter, setter 를 사용해야한다. -> 안전장치 역할을 한다. -> 이는 캡슐화를 돕는다.





접근 지정자 의 장점

  • 접근제어자를 이용하면 프로그래머의 코딩 실수를 방지할 수 있고 기타 위험요소를 제거할 수 있는 등의 장점이 있다.




REFERENCES

'Java' 카테고리의 다른 글

함수형 인터페이스  (0) 2022.02.26
제네릭  (0) 2022.02.26
인터페이스 기본 메소드와 스태틱 메소드  (0) 2022.02.26
상수와 리터럴  (0) 2022.02.26
람다 표현식  (0) 2022.02.26