Access Modifier(접근 제어자)

2025. 4. 4. 16:47JAVA/JAVA 기초 문법

📕 Access Modifier (접근 제어자)란?

Access Modifier(접근 제어자)는 클래스, 변수, 메서드 등에 대한 접근 권한을 설정하는 키워드다.

즉, 어떤 클래스나 메서드가 다른 클래스에서 접근 가능한지 여부를 제어하는 역할을 한다.

 

📘 Access Modifier (접근 제어자) 종류

1. public (공용)

  • 어디서든 접근 가능한 접근 제어자
  • 같은 패키지 뿐만 아니라, 다른 패키지에서도 접근 가능

📖 예제

public class Example {
    public int number = 10;  // 어디서든 접근 가능
    
    public void show() {
    	System.out.println("Hello");
    }
}
public class Main {
    public static void main(String[] args) {
         Example example = new Example();
         System.out.println(example.number);   // 접근가능
         example.show(); // 접근가능
    }
}

결과

10
Hello

 

2. protected (상속 관게 접근 허용)

  • 같은 패키지에서는 자유롭게 접근 가능
  • 다른 패키지의 경우, 상속받은(자식) 클래스 에서만 접근 가능

📖 예제

package packageA;

public class Parent {
    protected int value = 100; // 같은 패키지 + 상속받은 클래스에서 접근 가능
}
package packageB;
import packageA.Parent; // 상속

public class Child extends Parent {
    public void showValue() {
        System.out.println(value); // 상속받았으므로 접근 가능
    }
}
public class Test {
    public static void main(String[] args) {
        Child child = new Child();
        child.showValue();  // 접근 가능 (상속 관계이므로)
    }
}

 

3. default (package-private, 접근 제어자 생략)

  • 접근 제어자를 명시하지 않으면 기본적으로 default 접근자로 설정됨
  • 같은 패키지에서만 접근 가능, 다른 패키지에서는 접근 불가능

📖 예제

package com.Tistory.Java;

class Example {
	public static void main(String[] args) {
		Example example = new Example();
		System.out.println(example);   // 같은 패키지는 접근 가능
	}
}
package com.Tistory.Java2;
import com.Tistory.Java.*;

public class Test {
	public static void main(String[] args) {
		Example example = new Example();  // 에러 발생, 다른 패키지에서는 접근 불가능
		System.out.println(example);
	}
}

🚨 오류 발생!

 

4. private (완전 비공개)

  • 같은 클래스 내에서만 접근 가능
  • 외부 클래스, 자식 클래스에서도 접근 불가능

📖 예제

package com.Tistory.Java;

public class Example {
	private void Hello() {
		System.out.println("Hello");
	}
	public void show () {
		Hello();            // 접근 가능
    }
}
package com.Tistory.Java;

public class Test {
	public static void main(String[] args) {
		Example example = new Example();
		System.out.println(example);
		example.Hello();   // 에러 발생, 접근 불가능      
	}
}

🚨 오류 발생!

 

 

→  같은 패키지에 있는 클래스여도

    외부 클래스이기 떄문에 접근 불가능

 

 

📖 private 필드에 접근하는 방법 (Getter & Setter)

Getter와 Setter은 Java에서 클래스의 필드(멤버 변수)에 접근하고 값을 설정하거나 가져오는 메서드다.

객체지향 프로그래밍의 캡슐화 원칙을 지키기 위해 사용.

  • Getter : 필드 값을 변환하는 메서드 > getFieldName() 형식
  • Setter : 필드 값을 설정하는 메서드 > setFieldName(value) 형식
package com.Tistory.Java;

public class Example {
	private int age = 0; // private 필드
	
	// Getter
	public int getAge() {
		return age;
	}
	
	// Setter
	public void setAge(int age) {
		this.age = age;
	}	
}
package com.Tistory.Java;

public class Main {
	public static void main(String[] args) {
		Example example = new Example();
		example.setAge(0); // Setter을 이용한 값 설정
		int age = example.getAge(); // Getter을 이용한 값 가져오기
	}
}

 

📘 클래스 레벨과 멤버 레벨에서의 접근 제어자

  📖 클래스 레벨                    

접근 제어자 사용 가능 
public 🔵
protected
default 🔵
private

 

📖 멤버 레벨 

 

📕 Access Modifier 정리 📕 

접근 제어자 접근 가능 범위   특징
public 어디서든 접근 가능 가장 개방적, 제한 없음

protected
같은 패키지 + 상속받은 클래스 주로 상속 관계에서 사용

default
같은 패키지에서만 접근 가능 접근 제어자 생략 시 기본값

private
같은 클래스에서만 접근 가능 가장 제한적, 외부 접근 불가

 

 

 

 

'JAVA > JAVA 기초 문법' 카테고리의 다른 글

자바에서 This  (0) 2025.04.15
Constructor (생성자)  (0) 2025.04.14
변수(Variable) 필드(Field) 객체(Object)  (0) 2025.04.04
Parameter와 Argument  (0) 2025.04.02
Method  (0) 2025.04.01