Java 시작하기 - 접근 제어 지시자와 정보 은닉

Big Jay·2023년 11월 1일
0

Java 시작하기

목록 보기
14/14
post-thumbnail

1. 접근 제어자(access modifier)

객체 지향 프로그램에서는 예약어를 사용해 클래스 내부의 변수나 메서드, 생성자에 대한 접근 권한을 지정할 수 있다. 이를 접근 제어자(access modifier)라 한다.

접근 제어자같은 클래스의 멤버같은 패키지의 멤버자식 클래스의 멤버그 외의 영역
publicOOOO
protectedOOOX
defaultOOXX
privateOXXX

1. public

  • public 선언한 변수나 메서드는 외부 클래스에서 접근이 가능하며, 외부 클래스가 사용할 수 있다.
  • public 메소드를 통해서만 해당 객체의 private 멤버에 접근할 수 있다.

2. private

  • private로 선언한 변수나 메서드는 외부 클래스에서 아용할 수 없다.
  • 직접 접근이 안되며, 해당 객체의 public 메소드를 통해서 접근할 수 있다.

3. default

  • 클래스 및 클래스 멤버의 접근 제어의 기본값으로 default 접근 제어를 별도로 명시하고 있다.
  • default를 위한 접근 제어자는 따로 존재하지 않으므로 지정하지 않으면 자동으로 default 접근 제어를 가지게 된다.
  • default 접근 제어를 가지는 멤버는 같은 클래스의 멤버와 같은 패키지에 속하는 멤버만 접근할 수 있다.

4. protected

자바 클래스는 private로 정보를 은닉하고, public 멤버로 사용자나 프로그램과의 인터페이스를 구축한다. protected 멤버는 부모 클래스에 대해서는 public 멤버처럼 취급되며, 외부에서는 private 멤버처럼 취급된다.

2. 예제

package AccessModifier;

public class AccessModifier {
        public String getPublic = "나는 퍼블릭이야";
        private String getPrivate = "나는 프라이빗이야";
        protected String getProtected = "난 프로텍티드야";

        public String getGetPublic(){
                return this.getPublic;
        }

        public String getGetPrivate() {
                return getPrivate;
        }

        public String getGetProtected() {
                return getProtected;
        }
}
package AccessModifier;

public class Test {
    public static void main(String[] args) {
        AccessModifier a = new AccessModifier();

        //public으로 접근 가능
        System.out.println(a.getPublic);
        //같은 패키지이므로 접근 가능
        System.out.println(a.getProtected);
        // 같은 패키지 이나 같은 클래스가 아니므로 접근 불가 (에러 발생)
        System.out.println(a.getPrivate);
        
        // 하지만 메소드를 통해서 접근 가능하다.
        System.out.println(a.getGetPublic());
        System.out.println(a.getGetProtected());
        System.out.println(a.getGetPrivate());
    }
}

3. 정리

클래스의 멤버 변수를 private로 선언하여 접근을 제한하고 get, set 메소드를 통해 값을 수정하고 가져와 정보의 오류를 줄인다.

4. 참고 자료

  • TCP school
  • 패스트캠퍼스(한 번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 Online.)
profile
안녕하세요.

0개의 댓글