프로그래밍 언어/JAVA

JAVA) 접근 제어자: public, protected, default, private와 Getter/Setter

luana_eun 2022. 2. 28. 17:35
728x90

접근 제어자 의미

자바는 어떤 클래스와 그 멤버에게 어느정도까지 접근할 수 있는지를 설정할 수 있다.

그 접근 권한을 지정하는것이 접근 제어자다. 

 

사용 이유

접근을 제한하는거니 당연히 보안과 관련있다. 

중요하거나 함부로 바꾸면 안되는 값들은 아무나 접근할 수 없어야하고,

누구나 자주사용하는 것은 모두가 사용할 수 있도록 자유롭게 해야한다. 

=> 사실상 개발코드 자체가 보안에 신경써야하기 때문에 클래스의 멤벼변수는 대부분 private를 사용한다. 

 


접근 제어자 종류

  같은 클래스 같은 패키지 다른 패키지
public O O O
protected O O △(상속관계만)
default O X X
private O X X

 

public

같은 패키지 내에 모든 클래스 O, 다른 패키지 O

 

protected

같은 패키지 내에 모든 클래스 O, 다른 패키지 상속관계 O, 

 

default

같은 패키지 내에 모든 클래스 O, 다른 패키지 X

접근제어자를 따로 안적으면 기본으로 default가 된다. 

 

private

같은 클래스에서만 접근 가능.

다른 외부클래스에서 접근하려면 다른 메서드를 거쳐서 접근해야한다.

객체지향 특징 중 E(Encapsulation, 캡슐화 = 은닉성)에 해당함.

외부에서의 직접적인 접근을 허용하지 않는 멤버를 설정하여 정보 은닉 구체화

집을 계약할때 안전하게 하기 위해 부동산을 통해 집주인과 접근하는것으로 생각하면 이해하기 쉽다. 

class Access_sub01 {
	// private접근제한자 int형 변수 선언 
	private int private_var = 40;
}

public class Access01 {
	public static void main(String[] args) {
		Access_sub01 as = new Access_sub01();
		System.out.println(as.private_var);	// 오류발생! 접근 불가능
	}
}

Access01클래스가 다른클래스인 Access_sub01의 private에 직접 접근하지못한다. 

따라서 Access_sub01안에 메서드를 통해서 접근해야한다. 

class Access_sub01 {
	private int private_var = 40;
    // 메서드는 같은 클래스 안에있으니 private_var에 접근할 수 있다. 부동산 역할
	public int private_method() { return private_var; }
}

public class Access01 {
	public static void main(String[] args) {
		Access_sub01 as = new Access_sub01();
		//System.out.println(as.privatevar);
		System.out.println(as.private_method());	// 메서드를 통해 간접접근 
	}
}

주로 클래스 내의 멤버변수는 private접근제한자를 사용하여 외부에서 접근 할 수 없도록 제한하고

public으로 선언된 Getter/Setter 메서드를 통해 간접적으로 멤버변수에 접근할 수 있도록 한다. 

 


클래스의 접근 제어자

클래스 내부(멤버)가 아닌 클래스에 대한 접근제어자에 대해 알아보자.

종류: public, default

       public: 다른패키지에서도 모두 접근 가능.

       default: 같은 패키지에서만 접근 가능. 생략 가능

주의! 하나의 java파일 안에서 public 클래스는 딱 하나만 올 수 있다

       public인 클래스는 자바파일명과 같은 이름이어야 한다

public이 두개 이상이면 나타나는 메시지

 

 

 

728x90