main() 메서드를 가지지 않는 실행을 담당하는 클래스는 외부 클래스에서 사용할 목적으로 많이 설계된다. 이러한 클래스는 외부 클래스에서 접근할 수 있는 멤버와 접근 할 수 없는 멤버로 구분하여 설계하는 것이 바람직하다. 왜냐 아래사진 처럼어떠한 클래스의 멤버는 아무데서나 접근하게 두어서는 안되는 경우도 있다. 예를 들면 로직을 공개해서는 안되는 경우, 마치 금고와 같이 보호해야할 코드가 존재하기 때문이다. 오늘 정리할 내용은 이러한 기능을 구현하는 접근 제한자(Access Modifier) 이다.

접근제한자 적용범위
접근제한자 적용범위라는 것은 접근제한자가 어디에 사용될 수 있는지를 말하는 것이다. 즉, 메서드 앞에 붙일 수 있는지, 필드에 사용할 수 있는지 등을 말하는 것이다. 아래 표를 보면 알 수 있듯이 private을 예로 들어 설명하자면, 필드영역, 클래스의 생성자, 메서드를 선언할때는 private 사용이 가능하지만 클래스를 선언할때는 아래아래사진과 같이 빨간줄이 그어지는 것을 볼 수 있다. 이말인 즉슨, private은 클래스에는 적용이 불가하다는 이야기이다.


public 접근제한자는 외부 클래스가 자유롭게 사용할 수 있는 공개된 클래스이다. public 접근 제한자는 class 앞 부분에 적어주는데, 이것이 의미하는 것은 어떠한 패키지에서도 다 접근이 가능하고, 해당 클래스, 필드, 생성자, 메소드에 모두 적용이 가능하다.
package board.test;
public class B {
}

protected 접근제한자는 같은 패키지 또는 자식 클래스에서 사용할 수 있다. 즉, 위의 사진을 보면 board.test 패키지내에 A.java가 protected로 선언되어 있다면 board.test 패키지내에서는 모두 접근가능하고, 만약 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 생성자, 필드영역에 있는 객체, 메서드를 호출 할 수 있다. protected 접근 제한자는 클래스 선언시 사용이 불가하고, 필드, 생성자, 메서드에 사용이 가능하다.
클래스를 선언할 때 public을 생략한다면 기본적으로 default 접근 제한자가 적용된다. 클래스, 필드, 생성자, 메소드에 사용가능하고, 아래 사진처럼 메서드에 아무 접근제한자도 적용하지 않으면 default 접근 제한자를 가지게 되며 다른 패키지에서는 사용할 수 없게된다.

private 접근제한자는 말 그대로 "사적인" 이라는 의미를 가지고 있는데, private 으로 선언된 필드, 생성자, 메소드는 다른 모든 외부 클래스에서 접근이 불가능하고, 해당 클래스에서만 접근이 가능하게 된다.
신입 개발자라 잘못 정리된 부분이나 보충할 부분이 있을 수 있으니, 메시지나 댓글을 달아 주시면 감사하겠습니다.