접근 제한자(Access Modifier)

공부하자·2023년 4월 8일
1

그녀를 붙Java

목록 보기
3/8

▶ 접근 제한자 종류

자바에서는 클래스, 인터페이스, 변수, 메서드 등의 멤버들을 선언할 때 접근제한자(Access Modifier)를 사용할 수 있습니다. 접근제한자는 해당 멤버에 접근할 수 있는 범위를 제어하기 위해 사용되며, 총 4가지 종류가 있습니다.

public: 모든 패키지에서 해당 멤버에 접근할 수 있습니다.

protected: 동일한 패키지 내에서는 public과 동일하게, 다른 패키지에서는 해당 멤버를 상속받은 자식 클래스에서만 접근할 수 있습니다.

default(package-private): 동일한 패키지 내에서만 해당 멤버에 접근할 수 있습니다. 따로 접근제한자를 명시하지 않으면 기본적으로 default로 설정됩니다.

private: 해당 멤버를 선언한 클래스 내에서만 접근할 수 있습니다.


▶ 접근 제한자를 사용하는 이유

접근제한자를 사용하는 이유는 클래스나 메서드 등의 멤버를 다른 사용자들과 공유하면서도, 내부적으로 사용하는 변수나 메서드 등을 숨기고 보호하기 위해서입니다.

예를 들어, public으로 선언된 메서드는 다른 패키지에서도 호출할 수 있으므로, 인터페이스의 일부분으로 사용되거나, 다른 프로그래머들이 사용할 수 있는 라이브러리로 배포될 때 유용합니다.

반면에, private으로 선언된 변수는 해당 클래스 내부에서만 사용할 수 있으므로, 다른 클래스에서 변수의 값을 변경하는 등의 잘못된 조작을 막을 수 있습니다.

접근제한자를 사용하는 경우는 대개 다음과 같습니다.

public: 다른 패키지에서도 해당 멤버를 사용할 수 있어야 할 때, 또는 인터페이스의 일부분으로 사용될 때.

protected: 상속 관계에 있는 자식 클래스에서 해당 멤버를 사용해야 할 때.

default(package-private): 같은 패키지 내에서만 해당 멤버를 사용해야 할 때.

private: 해당 클래스 내부에서만 사용해야 하는 변수나 메서드 등에 대해서.


▶ 예시 코드와 설명

1. public


public class ExampleClass {
    public String publicVariable = "public";
    
    public void publicMethod() {
        System.out.println("This is a public method.");
    }
}

위 코드에서 ExampleClass는 public으로 선언되어 있으므로, 다른 패키지에서도 이 클래스에 접근할 수 있습니다. 또한 publicVariable과 publicMethod도 public으로 선언되어 있으므로, 다른 클래스에서도 이 변수와 메서드에 접근할 수 있습니다.

2. protected


public class ExampleClass {
    protected String protectedVariable = "protected";
    
    protected void protectedMethod() {
        System.out.println("This is a protected method.");
    }
}

public class ChildClass extends ExampleClass {
    public void accessProtectedVariable() {
        System.out.println("The value of protectedVariable is " + protectedVariable);
    }
    
    public void accessProtectedMethod() {
        protectedMethod();
    }
}

위 코드에서 ExampleClass의 protectedVariable과 protectedMethod는 해당 클래스를 상속받은 ChildClass에서 접근할 수 있습니다. ChildClass에서 accessProtectedVariable 메서드와 accessProtectedMethod 메서드를 사용하여 protectedVariable과 protectedMethod에 접근할 수 있습니다.

3. default(package-private)


class ExampleClass {
    String defaultVariable = "default";
    
    void defaultMethod() {
        System.out.println("This is a default method.");
    }
}

public class AnotherClass {
    public void accessDefaultVariable() {
        ExampleClass example = new ExampleClass();
        System.out.println("The value of defaultVariable is " + example.defaultVariable);
    }
    
    public void accessDefaultMethod() {
        ExampleClass example = new ExampleClass();
        example.defaultMethod();
    }
}

위 코드에서 ExampleClass는 따로 접근제한자를 명시하지 않았으므로, default(package-private)로 설정됩니다. 따라서 ExampleClass 내부에서 선언된 defaultVariable과 defaultMethod는 같은 패키지 내에서만 접근할 수 있습니다. AnotherClass에서는 ExampleClass의 인스턴스를 생성하여, 이를 통해 defaultVariable과 defaultMethod에 접근할 수 있습니다.

4. private


public class ExampleClass {
    private String privateVariable = "private";
    
    private void privateMethod() {
        System.out.println("This is a private method.");
    }
    
    public void accessPrivate() {
        System.out.println("The value of privateVariable is " + privateVariable);
        privateMethod();
    }
}

위 코드에서 ExampleClass의 privateVariable과 privateMethod는 해당 클래스 내부에서만 접근할 수 있습니다. accessPrivate 메서드에서는 privateVariable과 privateMethod에 접근할 수 있습니다. 이는 ExampleClass 내부에서만 사용되는 변수와 메서드를 외부에서 접근하지 못하도록 보호하는데 사용됩니다.

0개의 댓글