EEALL@ONCE
☕접근 제어자 본문
접근 제어자는 클래스, 메서드, 필드 등의 멤버에 적용되며, 해당 멤버에 접근할 수 있는 범위를 지정합니다. 아래에서 각 접근 제어자의 의미와 사용 범위에 대해 설명하겠습니다.
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.");
}
}
이 예시들을 통해 각 접근 제어자의 범위와 활용을 이해할 수 있을 것입니다. 주의해야 할 점은, 접근 제어자를 어떻게 사용하느냐에 따라 클래스의 멤버가 어떤 범위에서 접근 가능한지 결정된다는 것입니다. 상황과 요구 사항에 맞게 적절한 접근 제어자를 선택하여 클래스를 설계하시면 됩니다.
'언어💻 > 자바☕' 카테고리의 다른 글
☕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 |