
제어자에는
접근 제어자와 기타 제어자가 있습니다.
What ?
접근 제어자
💡 클래스, 메서드, 변수, 생성자 선언 시 접근 범위를 제어하는 키워드입니다.
💡 public, protected, default(생략), private로 인해 접근 범위가 달라집니다.
💡 클래스, 메서드 그리고 변수에 사용 가능한 접근 제어자가 정해져 있습니다.
How ?
접근 제어자
// 클래스
public class ExamplePublic {
// 변수
protected int value;
// 생성자
default ExamplePublic(int value){...}
// 메서드
private void getValue() {...}
}
종류
public
💡 프로그램 어디서나 접근이 가능합니다.
💡 선언된 클래스 멤버는 외부로 공개되어 API에서 사용되며, 공개 메서드나 클래스에 적합합니다.
💡 private 와 프로그램 사이의 인터페이스 역할을 수행합니다.
protected
💡 같은 패키지나 자식 클래스(상속 관계)에서 접근이 가능합니다.
💡 클래스 선언 시에는 사용할 수 없습니다.
💡 다른 패키지여도 상속 관계라면 접근이 가능합니다.
// 상속 관계 부모 클래스
package parent;
public class Parent {
protectet int protecteResult = 4;
protected void protectedMethod(){
...
}
}
// 다른 패키지의 자식 클래스
package child;
import parent.Parent;
public class Child extends Parent {
public void accessParent() {
// 상속 시 protected 멤버에 접근 가능
System.out.print(protecteResult);
protectedMethod();
}
}
default (생략)
💡 같은 패키지에서만 사용할 수 있습니다.
💡 기본 값으로 접근 제어자를 생략하면, 기본적으로 적용됩니다.
private
💡 가장 제한적인 접근 제어자로 동일힌 클래스에서만 사용 가능합니다.
💡 접근 시, getter와 setter 메서드를 통해 제어된 방식을 구현할 때 사용합니다.
💡 클래스 선언 시에는 사용할 수 없습니다.
접근 가능 여부

| 접근 제어자 | 동일 클래스 |
동일 패키지 |
자식 클래스 |
전체 클래스 |
접근 제한 |
| public | ✅ | ✅ | ✅ | ✅ | 없음 |
| protected | ✅ | ✅ | ✅ | ❌ | 자식 클래스가 아닌 다른 패키지 |
| default (생략) | ✅ | ✅ | ❌ | ❌ | 다른 패키지에 소속된 클래스 |
| private | ✅ | ❌ | ❌ | ❌ | 외부 클래스 |
적용대상
| 접근 제어자 | 적용 대상 |
| public | 클래스, 필드, 생성자, 메소드 |
| protected | 필드, 생성자, 메소드 |
| default(생략) | 클래스, 필드, 생성자, 메소드 |
| private | 필드, 생성자, 메소드 |
Why ?
접근 제어자
💡 데이터 캡슐화를 합니다.
💡 데이터 무결성을 가지고 상실 코드 및 오류를 방지합니다.
public class Person {
public String name; // 접근 가능
}
Person person = new Person();
person.name = null; // 잘못된 값 설정 가능
💡 접근 범위 제어로 모듈화와 유지보수성 향상시킵니다.
💡 상속과 다형성 지원합니다.
💡 팀 협업에서의 코드 설계 규칙을 정해 개발의 효율을 높힙니다.
💡 코드를 외부로 노출하지 않아 보안성을 높힙니다.