[Java] 자바 캡슐화(encapsulation), 접근 제어자(private, default, protected, public)


캡슐화(encapsulation)

- 어쩌다 유지보수를 하는 다른 개발자가 인스턴스 변수나 메서드, 

  이너 클래스에 접근해서 값을 마음대로 저장시킨다면 클래스를 

  정의(추상화)한 보람이 없어진다.

- 캡슐화는 이런 경우를 막고자 고안된 방법으로, 추상화를 무너뜨리지 않게 

  만드는 문법이다. 즉 클래스가 원래 목적에 맞게 동작할 수 있도록 클래스 멤버

  (변수, 메서드, 이너 클래스)의 접근을 제한하는 것이다.

- 추상화 : 어떤 목적에 맞게 동작하도록 클래스 안에 변수나 메서드를 정의한 것을 의미



I 캡슐화(encapsulation) : modifier 종류

- private : 

  클래스 멤버만이 접근 가능


- (default) : 아무것도 붙이지 않는 것.

  클래스 멤버 + 같은 패키지의 클래스


- protected : 

  클래스 멤버 + 같은 패키지의 클래스 + 자식 클래스 


- public :

  모든 접근 허용




modifier 예제

package step11.ex1;

public class A {
  private int  v1;
  int v2;
  protected int v3;
  public int v4;
}



다른 패키지에서의 변수 선언 코드

import step11.ex1.*;


public class Test04 extends A{
  public void test() {
//    this.v1 = 1; // private
//    this.v2 = 2; // (default)
    this.v3 = 3; // protected. 상속 받아서 만든 변수이기 때문에 가능
    this.v4 = 4; // public 
   
  }
 
  public static void main(String[] args) {
    A obj = new A();
//    obj.v1 = 1; // private
//    obj.v2 = 2; // (default)
//    obj.v3 = 3; // protected. 남의 것은 안된다. 상속 받아서 만든 변수에 대해서만 가능.
    obj.v4 = 4; // public
  }
}





II 캡슐화(encapsulation) : 패키지 멤버 클래스(일반 클래스)에 붙일 수 있는 modifier 종류 II

- 패키지 멤버 클래스 : 

  소스 파일 가장 밖에 선언한 클래스이다.

  일반적으로 작성하는 클래스이다.

- (default) : 아무것도 붙이지 않는 것.

  같은 패키지의 클래스

- public :

  모든 접근 허용




III 캡슐화(encapsulation) : 중첩 클래스(nested class) / 내부 클래스(inner class)

클래스 안에 선언된 클래스를 "중첩 클래스(nested class)" 또는 "내부 클래스(inner class)"라고 부른다.

inner 클래스는 클래스 안에 선언되기 때문에 바깥 클래스의 멤버이다.

따라서 클래스의 멤버인 변수나 메서드와 똑같이 modifier를 사용할 수 있다.










블로그 이미지

필로그래머

,