어제 오늘 내일

[Java] 접근제어 (public, private, protected, default) 본문

IT/Java

[Java] 접근제어 (public, private, protected, default)

hi.anna 2025. 12. 20. 00:16

 

Java의 접근 제어자(Access Modifier)는 클래스, 필드, 메서드가 어디까지 접근 가능한지 범위를 결정하는 중요한 문법 요소입니다. 적절한 접근 제어자는 코드의 안정성과 캡슐화를 강화하고, 불필요한 노출을 막아 더 안전한 구조를 만들 수 있게 합니다. Java에서 제공하는 주요 접근 제어자는 public, private, protected, default(명시 없음)입니다.

 

1. public

가장 개방적인 접근 제어자입니다.
어디서든 접근이 가능합니다.

public class Person {
    public String name;
}

특징

  • 다른 패키지에서도 접근 가능
  • 외부 공개 API 등을 작성할 때 사용

 

2. private

가장 제한적인 접근 제어자입니다.
같은 클래스 내부에서만 접근 가능합니다.

public class Person {
    private int age;

    private void printAge() {
        System.out.println(age);
    }
}

특징

  • 클래스 외부에서는 절대 접근 불가
  • 캡슐화(Encapsulation)를 강화하는 핵심 요소
  • 주로 필드(멤버 변수)에 많이 사용됨

 

3. protected

같은 패키지 + 다른 패키지의 자식 클래스에서 접근 가능

public class Animal {
    protected String type;
}

특징

  • default보다 넓고 public보다 좁은 접근 범위
  • 상속 구조에서 자식 클래스가 부모의 멤버를 활용할 수 있음

 

4. default (명시하지 않음)

아무 제어자를 붙이지 않으면 default 접근 제어자가 됩니다.
같은 패키지에서만 접근 가능합니다.

class Car {
    String model; // default
}

특징

  • 패키지 내부에서만 사용되는 클래스/메서드 등에 활용
  • 의도적으로 외부 패키지에 노출시키고 싶지 않을 때 사용

 

5. 접근 범위 비교 표

제어자 동일 클래스 같은 패키지 상속(다른 패키지) 다른 패키지

접근제어 동일 클래스 동일 패키지 상속(다른 패키지) 다른 패키지
public
protected
default
private

표로 보면 각 접근 제어자가 얼마나 열려 있고 닫혀 있는지 한눈에 이해할 수 있습니다.

 

6. 활용 예시

외부에서 접근시키고 싶은 경우 → public

public void run() { ... }

외부 접근을 막고 내부에서만 사용 → private

private void validate() { ... }

패키지 내부에서만 사용 → default

void process() { ... }

상속 관계에서는 허용하되, 일반 외부 접근은 제한 → protected

protected void move() { ... }

 

7. 정리

  • public: 어디서든 접근 가능
  • private: 클래스 내부에서만 접근 가능
  • protected: 같은 패키지 + 상속 관계에서 접근 가능
  • default: 같은 패키지에서만 접근 가능

접근 제어자를 적절히 활용하면 코드 보안과 유지보수성이 크게 향상됩니다.

 

 

 

반응형

'IT > Java' 카테고리의 다른 글

[Java] 상속, 부모클래스, 자식클래스  (0) 2025.12.20
[Java] void 메소드 호출  (0) 2025.12.19
[Java] void 뜻  (0) 2025.12.19
[Java] static이란?  (0) 2025.12.18
[Java] 클래스와 객체 차이  (0) 2025.12.18
Comments