92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

최신소식을
편하게 만나보세요.

접근 제어자

 
 

제어자

제어자에는
접근 제어자와 기타 제어자가 있습니다.

What ?

접근 제어자

💡 클래스, 메서드, 변수, 생성자 선언 시 접근 범위를 제어하는 키워드입니다.

 

💡  public, protected, default(생략), private로 인해 접근 범위가 달라집니다.

 

💡 클래스, 메서드 그리고 변수에 사용 가능한 접근 제어자가 정해져 있습니다.


How ?

접근 제어자 

💡 선언부에 접근 제어자를 추가해 접근 범위를 정의합니다.
// 클래스
public class ExamplePublic { 
  // 변수
  protected int value; 
  // 생성자
  default ExamplePublic(int value){...}
  // 메서드
  private void getValue() {...}
}​


종류

public

💡 프로그램 어디서나 접근이 가능합니다.

 

💡 선언된 클래스 멤버는 외부로 공개되어 API에서 사용되며, 공개 메서드나 클래스에 적합합니다.

 

💡 private 와 프로그램 사이의 인터페이스 역할을 수행합니다. 

protected

💡 같은 패키지나 자식 클래스(상속 관계)에서 접근이 가능합니다.

 

💡 클래스 선언 시에는 사용할 수 없습니다.

 

💡 다른 패키지여도 상속 관계라면 접근이 가능합니다.

// 상속 관계 부모 클래스
package parent;

public class Parent {
  protectet int protecteResult = 4;
  
  protected void protectedMethod(){
	...
  }
}

// 다른 패키지의 자식 클래스
package child;

import parent.Parent;

public class Child extends Parent {
    public void accessParent() {
      // 상속 시 protected 멤버에 접근 가능
      System.out.print(protecteResult);
      protectedMethod();
    }
}

 

default (생략)

💡 같은 패키지에서만 사용할 수 있습니다.

 

💡  기본 값으로 접근 제어자를 생략하면, 기본적으로 적용됩니다.

private

💡 가장 제한적인 접근 제어자로 동일힌 클래스에서만 사용 가능합니다.

 

💡 접근 시, getter와 setter 메서드를 통해 제어된 방식을 구현할 때 사용합니다.

 

💡 클래스 선언 시에는 사용할 수 없습니다.

 


접근 가능 여부

 

접근 제어자 동일
클래스
동일
패키지
자식
클래스
전체 
클래스
접근 제한
public ✅ ✅ ✅ ✅ 없음
 protected ✅ ✅ ✅ ❌ 자식 클래스가 아닌
다른 패키지 
default (생략) ✅ ✅ ❌ ❌ 다른 패키지에
소속된 클래스
private  ✅ ❌ ❌ ❌ 외부 클래스

 


적용대상

접근 제어자 적용 대상
public 클래스, 필드, 생성자, 메소드
protected 필드, 생성자, 메소드
default(생략) 클래스, 필드, 생성자, 메소드
private 필드, 생성자, 메소드

 


Why ?

접근 제어자

💡 데이터 캡슐화를 합니다.

 

💡 데이터 무결성을 가지고 상실 코드 및 오류를 방지합니다.

public class Person {
    public String name; // 접근 가능
}

Person person = new Person();
person.name = null; // 잘못된 값 설정 가능​

 

💡 접근 범위 제어로 모듈화와 유지보수성 향상시킵니다. 

 

💡 상속과 다형성 지원합니다.

 

💡 팀 협업에서의 코드 설계 규칙을 정해 개발의 효율을 높힙니다.

 

💡 코드를 외부로 노출하지 않아 보안성을 높힙니다.


 

728x90