본문 바로가기
Web

[Java] 접근제한자(public, default, protected, private)

by DuncanKim 2022. 7. 14.
728x90

[Java] 접근 제한자(public, default, protected, private)

객체 지향적 설계를 할 때 개발자들은 메인 메소드를 가지지 않는 클래스를 만들어낼 것이다. 외부 클래스에서 이용할 목적으로 설계되었기 때문에 외부 클래스에서 쓰지 않아야 하는 변수도 있을 수도 있고, 섞이면 곤란한 메소드들도 있을 것이다. 객체 생성을 막기 위해서 생성자를 호출하지 못하게 하거나, 특정 데이터를 보호하기 위해 필드에 접근하는 것을 막아야 할 때도 있다.

 

이럴 때, 접근 제한자를 사용한다. 접근 제한자는 네 가지 종류가 있다. 

 

public 접근 제한자는 외부 클래스가 자유롭게 사용할 수 있는 공개 멤버를 만든다.

protected 접근 제한자는 같은 패키지 또는 자식 클래스에서 사용할 수 있는 멤버를 만든다.

private 접근 제한자는 단어의 뜻 그대로 외부에 노출되지 않는 멤버를 만든다.

defalut 접근 제한자는 명시하지 않으며, 위의 세 가지 접근제한자를 쓰지 않을 경우 기본으로 설정된다. 같은 패키지에 소속된 클래스에서만 사용할 수 있는 멤버를 만든다.

접근 제한자 적용 대상 접근할 수 없는 클래스
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스
default 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스
private 필드, 생성자, 메소드 모든 외부 클래스

 

다음 아래에서는 적용 대상 별로 접근 제한 시 고려할 사항을 알아보도록 한다.

 

 

1. 클래스의 접근 제한

 

클래스에 적용할 수 있는 접근제한은 public과 default 두 가지이다. 클래스 접근 제한은 동일 패키지 내에서만 사용할 지, 아니면 다른 패키지에서도 볼 수 있도록 할 것인지에 따라, default 또는 public을 쓰면 된다.

 

default는 동일 패키지 내에서만 접근을 할 수 있다. public은 다른 패키지에서도 접근이 가능하다.

인터넷으로 배포되는 라이브러리 클래스들은 모두 public 접근 제한을 가지고 있다.

 

 

2. 생성자의 접근 제한

 

public class Name{
	// Name 클래스의 생성자 접근 제한자
	
    // public
	public Name(){
    }
    
    //protected
    protected Name(){
	}
    
    //default
    Name(){
    }
    
    //private
    private Name(){
    }
}

 

객체를 생성하기 위해서는 new 연산자로 생성자를 호출해야 한다. 생성자가 어떤 접근 제한을 갖느냐에 따라 호출 가능 여부가 결정된다. 만약 private로 설정되어 있다면, 동일 클래스 내에서만 객체를 생성할 수 있으며, 동일 패키지이더라도 다른 클래스라면 객체를 생성할 수 없다. 기본값 default와 protected는 같은 패키지 안에서만 호출이 가능하다. protected만의 차이점은 다른 패키지에 속한 클래스가 해당 클래스의 자식 클래스라면 생성자를 호출할 수 있는 점이다.

 

 

3. 필드와 메소드

 

필드와 메소드도 위의 생성자와 같다. public은 같은 프로젝트 패키지 어디에서나 참조가 가능하고, protected, default는 동일 패키지에서만, private은 같은 클래스 안에서만 참조가 가능하다. 똑같이 protected는 자식 클래스라면 패키지가 달라도 참조가 가능하다.

728x90

댓글