
Java의 접근 제어자카테고리 없음2024. 4. 9. 13:57
Table of Contents
Java에서 접근 제어자는 클래스, 메소드, 변수 등의 접근 범위를 제한하는 키워드로, 객체 지향 프로그래밍의 캡슐화 원칙을 구현하는 데 중요한 역할을 한다.
접근 제어자의 종류
Java에서는 네 가지 주요 접근 제어자가 있다: private, default(아무 키워드도 사용하지 않을 때), protected, public.
- private: 해당 멤버는 오직 동일한 클래스 내에서만 접근할 수 있다. 외부 클래스나 다른 패키지에서는 접근할 수 없다.
- default: 아무 접근 제어자도 사용하지 않을 때 적용되며, 동일한 패키지 내에서만 접근할 수 있다. Java 에서는 접근제어자를 생략할 경우 기본값은 default 접근 제어자로 지정된다.
- protected: 해당 멤버는 동일한 패키지 내에서, 그리고 다른 패키지의 서브클래스에서 접근할 수 있다.
- public: 해당 멤버는 모든 클래스에서 접근할 수 있다.
동일한 패키지란?
Java에서 패키지는 클래스와 인터페이스를 그룹화하는 메커니즘이다. 동일한 패키지에 속한 클래스는 같은 디렉토리 내에 위치하며, 같은 패키지 선언을 가지고 있다. 예를 들어, com.example.myapp 패키지에 속한 클래스는 모두 동일한 패키지로 간주된다.
예시
// 파일 경로: src/com/example/myapp/Person.java
package com.example.myapp;
public class Person {
String name; // default 접근 제어자
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
// 파일 경로: src/com/example/myapp/Main.java
package com.example.myapp;
public class Main {
public static void main(String[] args) {
Person person = new Person("John", 25);
System.out.println(person.name); // 동일한 패키지 내에서 접근 가능 (default 접근 제어자)
System.out.println(person.getAge()); // public 메소드이므로 접근 가능
// System.out.println(person.age); // private 접근 제어자이므로 접근 불가 (컴파일 에러)
}
}
위의 예시에서 Person 클래스와 Main 클래스는 com.example.myapp 패키지에 속해 있으며, name 변수는 default 접근 제어자로 동일한 패키지 내에서 접근 가능하다.
상속에서의 접근 제어자
protected 접근 제어자는 상속 관계에서 중요한 역할을 한다. 자식 클래스는 다른 패키지에 속해 있어도 부모 클래스의 protected 멤버에 접근할 수 있다.
package com.example.accessmodifiers;
public class Parent {
protected String protectedField = "Protected Field in Parent";
}
package com.example.accessmodifiers;
public class Child extends Parent {
public void printProtectedField() {
System.out.println(protectedField); // 상속받은 protected 필드에 접근 가능
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.printProtectedField(); // Protected Field in Parent
}
}
위 예시에서 Child 클래스는 Parent 클래스의 protectedField에 접근할 수 있다.

@바이솔 :: Byesol의 기록