BE/Java

[Java] 접근 제어자

baek-dev 2024. 11. 30. 20:13

접근 제어자의 종류

접근 제어자 같은 클래스 같은 패키지 다른 패키지(서브클래스,상속) 다른 패키지
`public` O O O O
`protected` O O O X
`(default)` O O X X
`private` O X X X

1. `public`

  • 어디서나 접근 가능
  • 제한이 없는 가장 개방적인 접근 제어자
  • 사용 위치 : 클래스, 메서드, 변수, 생성자
  • 특징 : 외부에서 자유롭게 사용 가능한 요소를 선언할때 사용

2. `protected`

  • 같은 패키지와 다른 패키지의 서브클래스(상속)에서 접근 가능
  • 같은 패키지에 있는 클래스에서는 접근 가능하지만 다른패키지에서는 서브클래스를 통해서만 접근 가능하다
package example;

public class Parent {
    protected String message = "Hello, Subclass!";
    
    protected void displayMessage() {
    	System.out.println(message);
    }
}
package anotherExample;

import example.Parent;

public class Child extends Parent {
    public void show() {
    	displayMessage();	// 서브클래스에서 접근 가능
    }
}
  • 사용 위치 : 메서드, 변수, 생성자 (클래스에서 불가능)
  • 특징 : 상속을 고려하여 설계된 클래스에서 서브클래스에 특정 멤버를 노출하고 싶을때 사용

3. `(default)` (패키지 전용 접근)

  • 접근 제어자를 명시하지 않을 경우 적용되는 기본값
  • 같은 패키지 안에서만 접근 가능, 다른 패키지에서는 접근 불가
  • 사용 위치 : 클래스, 메서드, 변수, 생성자
  • 특징 : 패키지 내에서만 사용될 클래스나 메서드를 정의할때 유용

4. `private`

  • 같은 클래스에서만 접근 가능
  • 외부에서 접근할수 없고 다른클래스나 서브클래스에서도 접근할수없다
  • 사용 위치 : 메서드, 변수, 생성자 (클래스에는 사용 불가능)
  • 특징 : 외부에서 절대 접근하면 안되는 데이터나 메서드를 보호할때 사용
위치 클래스 변수 메서드 생성자
`public` O O O O
`protected` X O O O
`(default)` O O O O
`private` X O O O

캡슐화와 접근 제어자

캡슐화는 클래스 내부의 데이터와 동작을 외부로부터 보호하는 개념이다. 

접근제어자를 통해 캡슐화를 구현할 수 있다 (ex: 게터,세터)

자세한 내용은 추후에 다루기로...


접근 제어자를 선택하는 기준

1. `private`

  • 민감하거나 중요한 데이터를 외부에 노출시키고 싶지 않을때
  • 데이터 보호를 최우선으로 할때

2. `(default)`

  • 같은 패키지에서만 사용하는 클래스나 멤버를 만들때
  • 패키지 수준의 모듈화를 지원하고자 할때

3. `protected`

  • 상속을 활용하여 서브클래스에서만 접근할수 있도록 제한할때
  • 서브클래스에서 공유가 필요하지만 외부에서는 보호가 필요한 경우

4. `public`

  • 모든 곳에서 접근 가능하도록 설계해야 할 경우
  • 공용 API나 유틸리티 클래스를 만들때

요약

  • `public` : 모두 접근 가능
  • `protected` : 같은 패키지 + 서브클래스에서만 가능 (상속 관계)
  • `(default)` : 같은 패키지에서만 접근 가능
  • `private` : 같은 클래스에서만 접근 가능

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

[Java] 캐스팅 (형 변환)  (0) 2024.12.01
[Java] abstract와 interface  (0) 2024.11.30
[Java] static  (0) 2024.11.30
[Java] 메모리 계산  (1) 2024.11.30
[Java] 변수  (0) 2024.11.30