[Java] 접근 제한자

hyunoi·2024년 11월 5일
0

Java

목록 보기
3/20
post-thumbnail

접근 제한자


말 그대로 어떠한 것의 접근을 제한하기 위해 사용된다.
여기서 접근이란 클래스나 인터페이스, 이것들이 가지고 있는 멤버의 접근을 의미한다.

자바의 접근 제한자에는 네 가지 종류가 있다.

  • public
    외부 클래스가 자유롭게 사용할 수 있도록 한다.
  • protected
    같은 패키지나 자식 클래스만 사용할 수 있도록 한다.
  • private
    외부에서 사용을 하지 못하도록 한다.
  • default
    위 세가지 접근 제한자가 적용되지 않으면 설정된다.
    같은 패키지에 소속된 클래스 내부 에서만 사용 가능하도록 한다.
한정자클래스 내부동일 패키지하위 클래스그 외의 영역
public
protectedX
defaultXX
privateXXX

위의 내용을 적용하여 클래스, 생성자, 필드와 메소드에 각각의 접근 제한자를 적용시켜보자

클래스의 접근 제한


클래스 선언 시에 해당 패키지 내부에서만 사용할 것인지, 아니면 다른 패키지에서도 사용하게 할 것인지를 정해야 한다.

public과 default 두 가지가 클래스 자체의 접근 제한자로 의미가 있고, 나머지 두 개인 protected와 private은 클래스 자체에서는 사용이 불가하다.

default

패키지 내부에서는 사용이 자유롭게 가능하지만 외부 패키지에서는 사용이 불가능하다.

public

패키지 내부, 외부 둘 다 자유롭게 사용이 가능하다.

생성자의 접근 제한


객체를 생성하기 위해서는 new 연산자로 생성자를 호출하는데, 이 생성자 호출에 제한을 둘 수 있다.

 public class ClassName {
 	//public 접근 제한
    public ClassName(···) { ··· }
    
    //protected 접근 제한
    protected ClassName(···) { ··· }
    
    //defalut 접근 제한
    ClassName(···) { ··· }
    
    //private 접근 제한
    private ClassName(···) { ···}
 }
  • public
    모든 패키지에서 아무런 제한 없이 생성자를 호출할 수 있도록 합니다.
  • protected
    default 접근 제한과 마찬가지로 같은 패키지에 속하는 클래스에서 생성자를 호출할 수 있도록 합니다. 차이점으로 다른 패키지에 속한 클래스가 해당 클래스의 자식(child) 클래스라면 생성자를 호출할 수 있습니다.
  • default
    같은 패키지에서는 아무런 제한 없이 생성자를 호출할 수 있으나, 다른 패키지에서는 생성자를 호출할 수 없도록 합니다.
  • private
    동일한 패키지이건 다른 패키지이건 상관없이 생성자를 호출하지 못하도록 제한합니다. 오로지 클래스 내부에서만 생성자를 호출할 수 있고 객체를 만들 수 있습니다.

필드와 메소드의 접근 제한

필드와 메소드를 선언할 때 해당 필드와 메소드의 접근 제한을 둘 수 있다.

  • public
    모든 패키지에서 아무런 제한 없이 필드와 메소드를 사용할 수 있도록 해줍니다.
  • protected
    default 접근 제한과 마찬가지로 같은 패키지에 속하는 클래스에서 필드와 메소드를 사용할 수 있도록 합니다. 차이점으로 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 필드와 메소드를 사용할 수 있습니다.
  • default
    필드와 메소드를 선언할 때 접근 제한자를 생략하면 default 접근 제한을 가집니다. default 접근 제한은 같은 패키지에서는 아무런 제한 없이 필드와 메소드를 사용할 수 있으나 다른 패키지에서는 필드와 메소드를 사용할 수 없도록 합니다.
  • private
    동일한 패키지이건 다른 패키지이건 상관없이 필드와 메소드를 사용하지 못하도록 제한합니다. 오로지 클래스 내부에서만 사용할 수 있습니다.

참고 자료

자바 접근 제한자 종류와 차이점
접근 지정자

0개의 댓글