자바에서 접근 제어자는 클래스, 메서드, 필드, 생성자 등의 접근 범위를 설정하여 데이터와 기능의 보안 및 캡슐화를 구현하는 데 사용됩니다. 접근 제어자를 통해 객체 지향 프로그래밍의 중요한 원칙인 정보 은닉을 지원합니다.
자바의 접근 제어자
자바에는 네 가지 주요 접근 제어자가 있습니다:
public
protected
default (패키지 프라이빗)
private
각 접근 제어자의 접근 범위는 다음과 같습니다:
1. public
정의: public으로 선언된 필드, 메서드, 클래스는 모든 클래스에서 접근할 수 있습니다.
사용: 일반적으로 API를 제공하거나 외부에서 접근이 필요한 요소에 사용됩니다.
예제:
java
코드 복사
public class PublicExample {
public int publicField;
public void publicMethod() {
System.out.println("This is a public method.");
}
}
이 예제에서 publicField와 publicMethod는 모든 클래스에서 접근할 수 있습니다.
2. protected
정의: protected로 선언된 필드, 메서드, 생성자는 같은 패키지 내의 다른 클래스와 자식 클래스에서 접근할 수 있습니다.
사용: 상속 관계에서 자식 클래스가 부모 클래스의 필드나 메서드에 접근해야 할 때 사용됩니다.
예제:
java
코드 복사
public class ProtectedExample {
protected int protectedField;
protected void protectedMethod() {
System.out.println("This is a protected method.");
}
}
이 예제에서 protectedField와 protectedMethod는 같은 패키지 내의 클래스나 상속받은 자식 클래스에서 접근할 수 있습니다.
3. default (패키지 프라이빗)
정의: 접근 제어자를 명시하지 않으면 기본적으로 default 접근 제어자가 적용됩니다. default로 선언된 필드, 메서드, 클래스는 같은 패키지 내의 다른 클래스에서만 접근할 수 있습니다.
사용: 패키지 내부에서만 사용되고 외부에서 접근할 필요가 없는 요소에 사용됩니다.
예제:
java
코드 복사
class DefaultExample {
int defaultField;
void defaultMethod() {
System.out.println("This is a default method.");
}
}
이 예제에서 defaultField와 defaultMethod는 같은 패키지 내에서만 접근할 수 있습니다.
4. private
정의: private로 선언된 필드, 메서드, 생성자는 해당 클래스 내에서만 접근할 수 있습니다. 클래스 외부에서는 접근할 수 없습니다.
사용: 클래스의 내부 상태를 보호하고 외부에서 직접 접근을 제한할 때 사용됩니다.
예제:
java
코드 복사
public class PrivateExample {
private int privateField;
private void privateMethod() {
System.out.println("This is a private method.");
}
public void accessPrivate() {
privateField = 10;
privateMethod();
}
}
이 예제에서 privateField와 privateMethod는 PrivateExample 클래스 내부에서만 접근할 수 있으며, accessPrivate 메서드를 통해 접근할 수 있습니다.
접근 제어자의 사용 예
클래스의 접근 제어자
public 클래스: 모든 클래스에서 접근할 수 있으며, 파일명과 클래스명이 동일해야 합니다.
예제:
java
코드 복사
public class PublicClass {
// 내용
}
기본 접근 제어자 클래스: 같은 패키지 내에서만 접근할 수 있습니다.
예제:
java
코드 복사
class PackagePrivateClass {
// 내용
}
필드와 메서드의 접근 제어자
public 필드/메서드: 외부에서 접근이 가능합니다.
protected 필드/메서드: 같은 패키지 내의 클래스와 자식 클래스에서 접근이 가능합니다.
default 필드/메서드: 같은 패키지 내에서만 접근이 가능합니다.
private 필드/메서드: 해당 클래스 내에서만 접근이 가능합니다.
예제:
java
코드 복사
public class Example {
public int publicField;
protected int protectedField;
int defaultField;
private int privateField;
public void publicMethod() {
// 모든 클래스에서 호출 가능
}
protected void protectedMethod() {
// 같은 패키지와 자식 클래스에서 호출 가능
}
void defaultMethod() {
// 같은 패키지에서만 호출 가능
}
private void privateMethod() {
// 해당 클래스에서만 호출 가능
}
}
접근 제어자의 중요성
정보 은닉 (Encapsulation): 접근 제어자를 사용하여 객체의 내부 상태를 보호하고 외부에서 직접 수정하는 것을 방지할 수 있습니다.
데이터 보호: 중요한 데이터나 기능을 private으로 설정하여 외부의 불필요한 접근을 차단할 수 있습니다.
코드 유지보수: 클래스와 메서드의 접근 범위를 명확히 하여 코드의 가독성을 높이고, 유지보수를 용이하게 합니다.
이러한 접근 제어자들을 적절히 활용하면 자바 프로그램의 안전성과 구조적 설계를 개선할 수 있습니다.
카테고리 없음