본문 바로가기

카테고리 없음

접근 지정자

자바에서 접근 제어자는 클래스, 메서드, 필드, 생성자 등의 접근 범위를 설정하여 데이터와 기능의 보안 및 캡슐화를 구현하는 데 사용됩니다. 접근 제어자를 통해 객체 지향 프로그래밍의 중요한 원칙인 정보 은닉을 지원합니다.

자바의 접근 제어자
자바에는 네 가지 주요 접근 제어자가 있습니다:

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으로 설정하여 외부의 불필요한 접근을 차단할 수 있습니다.
코드 유지보수: 클래스와 메서드의 접근 범위를 명확히 하여 코드의 가독성을 높이고, 유지보수를 용이하게 합니다.
이러한 접근 제어자들을 적절히 활용하면 자바 프로그램의 안전성과 구조적 설계를 개선할 수 있습니다.