BEER&DEV

자바의 접근 제어자: 초보자를 위한 꼬리의 꼬리를 무는 자바 본문

BASIS/JAVA

자바의 접근 제어자: 초보자를 위한 꼬리의 꼬리를 무는 자바

사당맥주 2023. 7. 13. 12:12

자바에서는 접근 제어자(access modifier)를 사용하여 클래스의 멤버(속성과 메소드)의 접근 범위를 지정할 수 있습니다. 접근 제어자는 클래스 외부에서 멤버에 접근할 수 있는지를 제어하여 코드의 캡슐화와 보안을 강화합니다. 이번 글에서는 초보자를 위해 자바의 접근 제어자에 대해 예시와 함께 자세히 설명하겠습니다.

1. 자바의 접근 제어자


자바에서는 네 가지의 접근 제어자를 사용할 수 있습니다:

- `public`: 어떤 클래스에서든 접근할 수 있는 가장 넓은 범위의 접근 제어자입니다. `public`으로 선언된 멤버는 외부 클래스에서 직접 접근이 가능합니다.

- `private`: 동일 클래스 내에서만 접근할 수 있는 가장 제한적인 범위의 접근 제어자입니다. `private`으로 선언된 멤버는 외부에서 직접 접근할 수 없으며, 클래스 내부의 다른 멤버를 통해서만 접근할 수 있습니다.

- `protected`: 동일 패키지 내의 클래스와 해당 클래스를 상속한 클래스에서 접근할 수 있는 범위의 접근 제어자입니다. `protected`로 선언된 멤버는 외부 패키지에서는 직접 접근할 수 없지만, 상속 관계에 있는 하위 클래스에서는 접근이 가능합니다.

- `default` (기본 접근 제어자): 접근 제어자를 명시하지 않은 경우, `default` 접근 제어자로 간주됩니다. 동일 패키지 내의 클래스에서만 접근이 가능하며, 외부 패키지에서는 접근할 수 없습니다.

2. 접근 제어자의 예시


다음은 접근 제어자를 예시와 함께 설명하는 코드입니다:

public class MyClass {
    private int privateAttribute;
    public String publicAttribute;
    protected boolean protectedAttribute;
    int defaultAttribute;
    
    private void privateMethod() {
        // private 메소드 내용
    }
    
    public void publicMethod() {
        // public 메소드 내용
    }
    
    protected void protectedMethod() {
        // protected 메소드 내용
    }
    
    void defaultMethod() {
        // default 메소드 내용
    }
}



위의 예시에서 `MyClass` 클래스에는 `privateAttribute`, `publicAttribute`, `protectedAttribute`, `defaultAttribute`라는 네 개의 멤버 변수가 선언되어 있습니다. 이들 멤버 변수는 각각 `private`, `public`, `protected`, `default` 접근 제어자로 지정되었습니다.

또한, `privateMethod()`, `publicMethod()`, `protectedMethod()`, `defaultMethod()`라는 네 개의 메소드가 선언되었는데, 이들 메소드도 각각 해당 접근 제어자로 지정되었습니다.

3. 접근 제어자의 활용 예시

public class Main {
    public static void main(String[] args) {
        MyClass myObject = new MyClass();
        myObject.publicAttribute = "Public value";  // public 속성에 접근 가능
        myObject.publicMethod();  // public 메소드 호출 가능
        
        // 아래 코드는 컴파일 에러 발생 (접근 제어자에 따라 접근 불가능)
        // myObject.privateAttribute = 10;  // private 속성에 접근 불가능
        // myObject.privateMethod();  // private 메소드 호출 불가능
        
        // protected 속성과 메소드는 동일 패키지 또는 하위 클래스에서 접근 가능
        myObject.protectedAttribute = true;
        myObject.protectedMethod();
        
        // default 속성과 메소드는 동일 패키지에서만 접근 가능
        myObject.defaultAttribute = 20;
        myObject.defaultMethod();
    }
}



위의 예시 코드에서 `Main` 클래스에서는 `MyClass` 객체를 생성하고, `publicAttribute`과 `publicMethod()`에 접근할 수 있습니다. 그러나 `privateAttribute`과 `privateMethod()`는 접근할 수 없으며, `protectedAttribute`과 `protectedMethod()`는 동일 패키지 또는 하위 클래스에서만 접근할 수 있습니다. `defaultAttribute`과 `defaultMethod()`는 동일 패키지에서만 접근할 수 있습니다.

자바의 접근 제어자는 클래스의 멤버에 대한 접근을 제어하여 코드의 캡슐화와 보안을 강화합니다

반응형