일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 르세라핌
- Python
- analytics4
- docker
- 티스토리챌린지
- ANTIFRAGILE
- 데이터내보내기
- 11월순위
- spring
- IntelliJ
- JPQL
- docker push
- 도커이미지
- 애널리틱스4
- git branch 삭제
- git pat
- JPA
- 명령어
- DBMS
- pat발급
- macvlan
- 오블완
- java
- 컬렉션프레임워크
- db종류
- gtihub
- codeium
- docker build
- 자바
- Today
- Total
hanker
JAVA - JAVA에서 접근 제어자란 무엇일까? (public / private / protected / default) 본문
JAVA - JAVA에서 접근 제어자란 무엇일까? (public / private / protected / default)
hanker 2024. 11. 30. 01:02Java에서 접근 제어자(Access Modifiers)는 클래스, 메서드, 필드 등 구성 요소에 대한 접근 권한을 설정하는 키워드이다.
접근 제어자를 통해 코드의 접근 범위를 제한하거나 허용하여 캡슐화와 보안성을 높일 수 있다. Java에서는 네 가지 접근 제어자를 사용할 수 있는데, public, protected, private, 그리고 default (접근 제어자를 명시하지 않았을 때)가 있다.
각 접근 제어자의 특징을 알아보자!
public
범위: 모든 클래스에서 접근 가능.
특징: 해당 멤버가 public으로 선언된 경우, 패키지 내외의 모든 클래스에서 접근할 수 있다. 즉, 전역으로 접근을 허용하는 가장 개방적인 접근 제어자이다.
사용 예: 주로 공용 API, 유틸리티 메서드 등 외부에서도 사용해야 하는 경우에 사용한다.
예제.
package org.example.test1;
public class PublicEx {
public int value = 10; // 모든 클래스에서 접근 가능
public void getValue() {
System.out.println("value : " + value);
}
}
package org.example;
import org.example.test1.PublicEx;
public class Main {
public static void main(String[] args) {
PublicEx publicEx = new PublicEx();
publicEx.getValue();
}
}
protected
범위: 같은 패키지 내의 클래스 + 상속받은 자식 클래스에서 접근 가능
설명: protected로 선언된 멤버는 동일한 패키지 내의 다른 클래스와 해당 클래스를 상속한 자식 클래스에서도 접근할 수 있다.
이 제어자는 상속 관계에서 자주 사용된다.
사용 예: 부모 클래스로부터 상속을 받아 자식 클래스에서만 사용하도록 하는 멤버들에 사용
예제.
package org.example.test1;
public class ProtectedEx {
protected static int value = 10; // 같은 패키지 내 또는 상속받은 클래스에서 접근 가능
protected static void getValue() {
System.out.println("ProtectedEx value : " + value);
}
}
package org.example;
import org.example.test1.ProtectedEx;
public class Main extends ProtectedEx {
public static void main(String[] args) {
getValue();
}
}
private
범위: 같은 클래스 내에서만 접근 가능
설명: private으로 선언된 멤버는 선언된 클래스 내부에서만 접근할 수 있다.
외부에서는 접근이 불가능하므로, 정보 은닉을 위해 사용된다.
사용 예: 클래스 내부의 특정 로직에만 사용해야 하는 필드나 메서드를 숨기기 위해 사용
예를 들어, 객체의 상태를 외부로부터 보호하려는 경우 private를 사용한다.
예제.
package org.example.test1;
public class PrivateEx {
private static int value = 10;
private static void getValue() {
System.out.println("private Value : " + value); // 같은 클래스 내에서만 접근 가능
}
public static void main(String[] args) {
getValue();
}
}
Default (접근 제어자를 명시하지 않은 경우)
범위: 같은 패키지 내의 클래스에서만 접근 가능.
설명: 접근 제어자를 명시하지 않으면 패키지 전용 접근 수준이 된다.
같은 패키지에 속한 클래스들끼리만 접근할 수 있으며, 다른 패키지에서는 접근할 수 없다.
사용 예: 특정 패키지 내에서만 사용할 수 있는 멤버들을 정의할 때 사용한다.
package org.example.test1;
class DefaultEx {
static int value = 10;
static void getValue() {
System.out.println("Default value : " + value); // 같은 클래스 내에서만 접근 가능
}
}
package org.example.test1;
import static org.example.test1.DefaultEx.getValue; // 같은 패키지 내에서 접근 가능
public class MainEx {
public static void main(String[] args) {
getValue();
}
}
정리
접근제어자 | 같은 클래스 | 같은 패키지 | 하위 클래스 | 외부 클래스 |
public | O | O | O | O |
protected | O | O | O | X |
default | O | O | X | X |
private | O | X | X | X |
이러한 접근 제어자를 적절히 사용함으로써 클래스의 내부 구현을 감추고 외부에 노출할 부분만 명확히 정의할 수 있으며, 이를 통해 객체 지향의 중요한 원칙인 캡슐화를 효과적으로 달성할 수 있다.
끝.
'JAVA' 카테고리의 다른 글
JAVA - JAVA에서 가비지 컬렉션(GC)이란 무엇일까? (0) | 2024.12.02 |
---|---|
JAVA - JAVA에서 제네릭이란 무엇일까? (0) | 2024.12.01 |
JAVA - JAVA에서 컬렉션 프레임워크란 무엇일까? (0) | 2024.11.28 |
JAVA - JAVA에서 메서드 오버로딩과 오버라이딩의 차이점은 무엇일까? (0) | 2024.11.27 |
Java - 문자열 내 Tab 문자 지우기 (0) | 2024.11.25 |