[Java] 접근 제어자

벼랑 끝 코딩·2025년 2월 24일
0

Java

목록 보기
12/40

접근 제어자란, 필드나 메서드, 생성자에 접근할 수 있는 사용자를 제어하겠다는 것이다.
외부로 부터의 접근을 막아 버그를 방지하고 기대한 대로 기능이 작동할 수 있도록 유도한다.

예를 들어, 내 이름을 바꿀 수 있는건 나로 한정하고,
다른 사람은 내 이름을 변경할 수 없도록 막아
어디선가 갑자기 내 이름이 변경되는 일이 없도록 막는다.

접근 제어자 종류

private

  • 모든 외부 호출을 막는다.

default(package-private)

  • 접근 제어자를 명시하지 않을 경우 기본 값.
  • 같은 패키지 내부에서의 호출만 허용한다.

protected

  • 같은 패키지 내부에서의 호출을 허용한다.
  • 패키지가 달라도 상속 관계의 호출을 허용한다.

public

  • 모든 외부 호출을 허용한다.

필드, 메서드 접근 제어자

  • 필드, 메서드에는 네 종류의 접근 제어자를 모두 사용할 수 있다.
  • public 메서드를 통해서 private 또는 defualt, protected 메서드에 접근할 수 있다.
package class.a;
class ClazzA {
	public void publicMethod() {
    	// 메서드 바디
    }
    
    default void defaultMethod() {
    	// 메서드 바디
    }
    
    protected void protectedMethod() {
    	// 메서드 바디
    }
    
    private void privateMethod() {
    	// 메서드 바디
    }
    
    public void accessMethod() {
    	defaultMethod();
        privateMethod();
    }
    
package clazz.b;
class ClazzB extends ClassA {
	publicMethod(); // public 호출 가능
    defaultMethod(); // 패키지가 달라 호출 불가
    protectedMethod(); // 패키지가 다르지만 상속 관계이므로 호출 가능
    privateMethod(); // private 호출 불가
    
    accessMethod(); // public이므로 호출 가능, 메서드 내부 default, private 메서드에 접근 가능
}

클래스 접근 제어자

  • 클래스에는 public, default만 사용할 수 있다.
  • public 클래스는 반드시 클래스 이름과 자바 파일 이름이 같아야 한다.
  • 하나의 자바 파일에는 하나의 public 클래스만 사용 가능하다.
    (클래스 이름과 자바 파일 이름이 같아야 하니 당연한 이야기)
  • default 클래스는 여러개 생성할 수 있다.
파일명 : Clazz.java

public class Clazz {
	// 클래스 본문
}

// 불가
public class Clazz2 {
	// 클래스 본문
}

// 가능
class DefaultClazz1 {
	// 클래스 본문
}

class DefaultClazz2 {
	// 클래스 본문
}
profile
복습에 대한 비판과 지적을 부탁드립니다

0개의 댓글