C++과 JAVA에서는 클래스를 만들어 프로그램을 제작한다.
하지만 만들어진 인스턴스에 다른 작업에서 접근하여 클래스 내부를 수정하게 되면 큰 문제가 발생할 수 있다.
하지만 C++ / JAVA 인스턴스 변수 또는 메소드에 접근을 제어하는 접근 제어자를 설정할 수 있다. 이를 통해
클래스의 캡슐화(정보은닉) 을 실현할 수 있다.
JAVA의 접근 제어자에는 4종류가 있다.
1. public
다른 클래스에서 생성한 인스턴스를 통해 제한 없이 멤버에 접근하여 사용할 수 있는 제어자.
단, static 멤버의 경우는 인스턴스 없이도 접근 가능
2. default (package - private)
같은 패키지에서만 접은을 허용하는 제어자.
접근 제어자를 별도로 정해주지 않는다면 기본으로 적용된다.
즉, void func() 는 default void func() 과 같은 의미다.
3. protected
같은 패키지, 다른 패키지여도 상속받은 하위 클래스에서는 사용할 수 있는 제어자.
※ protected를 이해하기 위해서는 상속에 대한 이해가 필요하므로 추후 상속에서 다루기로 한다.
4. private
클래스 내부에서만 접근하여 사용할 수 있도록 하는 제어자.
위의 순서는 접근이 가능한 범위가 넓은 순으로 작성하였다. 즉, public 으로 선언된다면 인스턴스를 통해
어디서나 접근이 가능하며 반대로 private 로 선언된다면 클래스 외부에서는 접근이 불가능하다.

접근 제어 가능한 범위
<소스 코드>
점수를 입력받아 합격 여부 및 A ~ F 로 변환해주는 프로그램이다.
자세한 설명은 주석을 참고한다.
package com;
import java.util.Scanner;
public class Branch {
/* 점수 입력 받아서 합격 불합격 처리용 클래스 */
private int score;
void inputScore() { // 접근제어자가 없으므로 default 로 선언됨
Scanner scan = new Scanner(System.in);
score = scan.nextInt();
}
private void printPass() { // private 메소드 선언
if(score >= 60) System.out.println(score+" : 합격 ");
else System.out.println(score+" : 불합격 ");
}
private void printGrade() {
if(score >= 90) System.out.println(score+" : A ");
else if(score <= 89 && score >= 80) System.out.println(score+" : B ");
else if(score <= 79 && score >= 70) System.out.println(score+" : C ");
else if(score <= 69 && score >= 60) System.out.println(score+" : D ");
else if(score <= 59 ) System.out.println(score+" : F ");
else System.out.println(score+" 는 잘못된 값입니다. ");
}
public void playBranch() { // private로 선언된 메소드에 접근할 수 있는 public형 메소드
inputScore();
printPass();
printGrade();
}
}
package com;
public class UseClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Branch bc = new Branch(); // 인스턴스 생성
bc.playBranch();
}
}

실행 화면