EEALL@ONCE

☕접근 제어자 본문

언어💻/자바☕

☕접근 제어자

올엣원스 2023. 8. 28. 21:14
728x90

접근 제어자는 클래스, 메서드, 필드 등의 멤버에 적용되며, 해당 멤버에 접근할 수 있는 범위를 지정합니다. 아래에서 각 접근 제어자의 의미와 사용 범위에 대해 설명하겠습니다.



1. **public:** 해당 멤버는 어디서든 접근 가능합니다.
   - 해당 클래스 안에서: ✅
   - 동일 패키지 안에서: ✅
   - 동일 패키지 또는 자손 클래스 안에서: ✅
   - 다른 패키지 포함 어느 곳에서든: ✅

2. **protected:** 해당 멤버는 동일 패키지 내에서는 접근 가능하고, 다른 패키지의 자손 클래스에서도 접근 가능합니다.
   - 해당 클래스 안에서: ✅
   - 동일 패키지 안에서: ✅
   - 동일 패키지 또는 자손 클래스 안에서: ✅
   - 다른 패키지 포함 어느 곳에서든: 

3. **default (package-private):** 해당 멤버는 동일 패키지 내에서만 접근 가능합니다. 별도의 접근 제어자를 지정하지 않았을 때의 기본 설정입니다.
   - 해당 클래스 안에서: ✅
   - 동일 패키지 안에서: ✅
   - 동일 패키지 또는 자손 클래스 안에서: 
   - 다른 패키지 포함 어느 곳에서든: 

4. **private:** 해당 멤버는 동일 클래스 내에서만 접근 가능합니다.
   - 해당 클래스 안에서: ✅
   - 동일 패키지 안에서: 
   - 동일 패키지 또는 자손 클래스 안에서: 
   - 다른 패키지 포함 어느 곳에서든: 

이 표를 보면, 접근 제어자를 통해 클래스의 멤버들에 대한 접근 범위를 지정할 수 있으며, 이를 통해 적절한 정보 은닉과 캡슐화를 구현할 수 있습니다. 또한, 상황에 맞게 접근 제어자를 선택함으로써 코드의 보안과 모듈성을 더욱 강화할 수 있습니다.


1. **public:**

public class PublicExample {
    public String publicField = "This field is public.";
    
    public void publicMethod() {
        System.out.println("This method is public.");
    }
}



2. **protected:**

package mypackage;

public class Parent {
    protected String protectedField = "This field is protected.";
}

package mypackage;

public class Child extends Parent {
    public void accessParentField() {
        System.out.println(protectedField); // 자손 클래스에서 접근 가능
    }
}



3. **default (package-private):**


package mypackage;

class DefaultExample {
    String defaultField = "This field has default access.";
    
    void defaultMethod() {
        System.out.println("This method has default access.");
    }
}



4. **private:**

public class PrivateExample {
    private String privateField = "This field is private.";
    
    private void privateMethod() {
        System.out.println("This method is private.");
    }
}



이 예시들을 통해 각 접근 제어자의 범위와 활용을 이해할 수 있을 것입니다. 주의해야 할 점은, 접근 제어자를 어떻게 사용하느냐에 따라 클래스의 멤버가 어떤 범위에서 접근 가능한지 결정된다는 것입니다. 상황과 요구 사항에 맞게 적절한 접근 제어자를 선택하여 클래스를 설계하시면 됩니다.

728x90

'언어💻 > 자바☕' 카테고리의 다른 글

☕final  (0) 2023.09.01
☕`Path filePath`와 `File file = filePath.toFile()  (0) 2023.08.31
☕캡슐화 (Encapsulation)란  (0) 2023.08.28
☕substring  (0) 2023.08.23
☕Optional.ofNullable(userName).orElse  (0) 2023.08.22