접근 제한자에 관하여

2025. 2. 4. 20:55·java

Java에서는 접근 제한자(Access Modifiers) 를 사용하여 클래스, 변수, 메서드 등에 대한 접근 범위를 제어할 수 있습니다. 이를 통해 객체 지향 프로그래밍의 캡슐화(Encapsulation) 원칙을 적용할 수 있으며, 코드의 보안성과 유지보수성을 높일 수 있습니다. 이번 글에서는 Java의 접근 제한자에 대해 자세히 알아보겠습니다.


1. Java 의 접근 제한자 종류

Java 에서는 네 가지 접근 제한자를 제공합니다:

접근 제한자같은 클래스같은 패키지자식 클래스(상속)다른 패키지

public ✅ 가능 ✅ 가능 ✅ 가능 ✅ 가능
protected ✅ 가능 ✅ 가능 ✅ 가능 ❌ 불가능
default ✅ 가능 ✅ 가능 ❌ 불가능 ❌ 불가능
private ✅ 가능 ❌ 불가능 ❌ 불가능 ❌ 불가능

각 접근 제한자의 특징과 사용법을 살펴보겠습니다.



 

2. public (공개 범위: 모든 곳)

public 키워드를 사용하면 모든 클래스에서 접근 가능합니다.

package mypackage;

public class PublicExample {
    public void display() {
        System.out.println("Public method called");
    }
}
import mypackage.PublicExample;

public class Main {
    public static void main(String[] args) {
        PublicExample obj = new PublicExample();
        obj.display(); // 가능
    }
}

✅ public 메서드는 같은 패키지뿐만 아니라 다른 패키지에서도 접근 가능합니다.



 

3. protected (공개 범위: 같은 패키지 + 상속 관계 클래스)

protected 키워드는 같은 패키지 내에서는 자유롭게 접근 가능하지만, 다른 패키지에서는 상속받은 클래스에서만 접근할 수 있습니다.

package mypackage;

public class ProtectedExample {
    protected void show() {
        System.out.println("Protected method called");
    }
}
package anotherpackage;
import mypackage.ProtectedExample;

public class SubClass extends ProtectedExample {
    public static void main(String[] args) {
        SubClass obj = new SubClass();
        obj.show(); // 가능 (상속 관계이므로 접근 가능)
    }
}

🚫 ProtectedExample 을 직접 객체로 생성하고 show() 를 호출하면 컴파일 오류가 발생합니다. ✅ 하지만 SubClass 가 ProtectedExample 을 상속받은 경우, show() 메서드에 접근할 수 있습니다.



 

4. default (공개 범위: 같은 패키지)

default 접근 제한자는 아무 키워드도 사용하지 않은 경우 적용됩니다. 같은 패키지 내에서는 접근 가능하지만, 다른 패키지에서는 접근할 수 없습니다.

package mypackage;

class DefaultExample {
    void display() {
        System.out.println("Default method called");
    }
}
package anotherpackage;
import mypackage.DefaultExample;

public class Main {
    public static void main(String[] args) {
        DefaultExample obj = new DefaultExample(); // 오류 발생
        obj.display();
    }
}

🚫 DefaultExample 클래스는 같은 패키지 내에서만 접근할 수 있으며, 다른 패키지에서는 접근할 수 없습니다.



 

5. private (공개 범위: 같은 클래스 내부에서만 사용 가능)

private 키워드는 해당 클래스 내부에서만 접근 가능하도록 제한합니다. 다른 클래스에서는 접근할 수 없습니다.

class PrivateExample {
    private void secretMethod() {
        System.out.println("Private method called");
    }

    public void accessSecret() {
        secretMethod(); // 같은 클래스 내부에서는 호출 가능
    }
}
public class Main {
    public static void main(String[] args) {
        PrivateExample obj = new PrivateExample();
        obj.secretMethod(); // 오류 발생
    }
}

🚫 secretMethod() 는 private 으로 선언되어 외부 클래스에서 직접 접근할 수 없습니다. ✅ 하지만 같은 클래스 내부의 accessSecret() 메서드를 통해 호출하면 사용할 수 있습니다.



 

6. 접근 제한자의 활용 및 권장 사항

6.1 캡슐화 (Encapsulation) 와 접근 제한자

  • private을 사용하여 직접적인 데이터 접근을 제한하고, public 메서드를 통해 데이터를 조작하도록 설계하면 **캡슐화(Encapsulation)**를 효과적으로 적용할 수 있습니다.
  • 예제:
class Person {
    private String name;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

✅ private 필드를 getter와 setter 메서드를 통해 조작하면 데이터 보호와 유효성 검사가 가능합니다.

6.2 접근 제한자 선택 가이드

  • 클래스 레벨
    • 대부분 public을 사용하지만, 내부적으로만 사용하는 클래스는 default를 사용할 수 있음.
  • 필드(변수) 레벨
    • 데이터 보호를 위해 private을 기본으로 사용하고, 필요한 경우 getter와 setter를 제공.
  • 메서드 레벨
    • public: 외부에서 호출해야 하는 경우.
    • protected: 서브클래스에서만 접근할 필요가 있는 경우.
    • private: 내부적으로만 사용되는 경우.


 

7. 마무리

  • Java의 접근 제한자는 public, protected, default, private 네 가지가 있다.
  • public은 모든 곳에서 접근 가능하지만, private은 같은 클래스 내에서만 접근 가능하다.
  • protected는 같은 패키지 또는 상속받은 클래스에서만 접근할 수 있다.
  • default는 같은 패키지 내에서만 접근 가능하다.
  • 적절한 접근 제한자를 선택하면 캡슐화를 강화하고 코드의 보안성과 유지보수성을 높일 수 있다.

'java' 카테고리의 다른 글

DTO, VO, DAO 에 관하여  (0) 2025.02.06
Synchronized 에 관하여  (0) 2025.02.05
정적 바인딩과 동적 바인딩에 관하여  (0) 2025.02.04
Java 상속에 관하여  (0) 2025.02.03
Signature 에 관하여  (0) 2025.01.22
'java' 카테고리의 다른 글
  • DTO, VO, DAO 에 관하여
  • Synchronized 에 관하여
  • 정적 바인딩과 동적 바인딩에 관하여
  • Java 상속에 관하여
heejunp
heejunp
희준개발
  • heejunp
    희준개발
    heejunp
  • 전체
    오늘
    어제
    • 분류 전체보기 (35)
      • java (16)
      • spring (1)
        • test (0)
      • web (1)
      • cloud (1)
      • database (2)
      • algorithm (7)
      • OS (2)
      • sonarqube (0)
      • ai (1)
      • 기타 (2)
      • 사고 (1)
      • go (0)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    heejunp
    접근 제한자에 관하여
    상단으로

    티스토리툴바