Skip to Content
Suffering builds character

2. 제어자

1. 제어자, Modifier

제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 옵션을 적용해주는 키워드(keyword)들을 의미함

2. 제어자의 구분

제어자는 크게 2가지로 구분할 수 있음

2-1. 접근 제어자(Access Modifier)

접근 제어자란 클래스, 변수, 메서드, 생성자 등의 접근 범위(visibility) 를 제어하는 키워드

Note

접근(Access)의 의미
대상 필드의 값을 읽거나, 수정할 수 있는지, 대상 메서드를 호출할 수 있는지?

public, protected, default(package-private), private

Main 클래스(Main.java) 기준으로, Main 클래스가 Employee나 Manager 클래스가 가진 필드나 메서드에 접근할 수 있는지에 대한 범위를 제어, 제한해주기 위한 키워드

Employee.java
class Employee { private int salary = 5000; public void showSalary() { System.out.println("급여는 " + salary + "만원입니다."); } public void work() { System.out.println("업무를 수행합니다."); } }
Manager.java
class Manager { public String department = "영업팀"; public void manage() { System.out.println("팀을 관리합니다."); generateReport(); // Manager 내부에서는 호출 가능 } private void generateReport() { System.out.println("보고서를 생성합니다."); } }
Main.java
class Main { public static void main(String[] args) { Employee emp = new Employee(); Manager mgr = new Manager(); emp.showSalary(); // 출력 가능 (public 메서드) emp.work(); // 출력 가능 (public 메서드) // emp.salary; // 컴파일 에러: private 필드 접근 불가 System.out.println(mgr.department); // 출력 가능 (public 필드) // mgr.generateReport(); // 컴파일 에러: private 메서드 접근 불가 mgr.manage(); // 출력 가능 (manage 내부에서 private 메서드 호출) } }

→ 각 클래스가 가진 필드나 메서드에 대한 접근 권한에 대한 결정권은 일반적으로 해당 클래스 자신에게 있음

💡
Tip

그 외 나머지 제어자

static, final, abstract, native, transient, synchronized, volatile 등

2. 제어자 키워드를 사용할 수 있는 문법적 위치, 규칙

2-1. 하나의 대상에 대해 여러 제어자를 조합하여 사용하는 것이 가능

public class Main { public static void main(String args[]) { // ... } }

main() 앞에 접근 제어자 중 하나인 public과 그 외 제어자 중 하나인 static을 조합하여 사용

2-2. 접근 제어자는 한 번에 네 가지 중 하나만 선택해서 사용할 수 있음

하나의 대상에 대해서 publicprivate을 동시에 사용 불가

Mouse.java
public private class Mouse { // Compile Error. public private int age; // Compile Error. }

이러한 제어자들은 클래스 이름 앞이나, 멤버 필드, 멤버 메서드 앞에 주로 사용됨

Last updated on