접근 제한자

개발자가 되고 싶어요 ㅣ 2024. 2. 26. 19:06

접근 제한자

경우에 따라서는 객체의 필드를 외부에서 변경하거나 메소드를 호출할 수 없도록 막아야 할 필요가 있다. 중요한 필드와 메소드가 외부로 노출되지 않도록 해 객체의 무결성(결점이 없는 성질)을 유지하기 위해서이다.

자바는 이러한 기능을 구현하기 위해 접근 제한자(Acces Modifier)를 사용한다. 접근 제한자는 public, protected, private의 세 가지 종류가 있다.

 

접근 제한자 제한 대상 제한 범위

접근 제한자 생성자 설명
public 클래스, 필드, 생성자, 메소드 없음
protected 필드, 생성자, 메소드 같은 패키지이거나, 자식 객체만 사용 가능
(default) 클래스, 필드, 생성자, 메소드 같은 패키지
private 필드, 생성자, 메소드 객체 내부

 

클래스의 접근 제한

접근 제한자 선언 설명

접근 제한자 생성자 설명
public public class 클래스 {} 모든 패키지에서 사용 가능하다.
(default) class 클래스 {} 다른 패키지에서는 사용이 불가능하다.

 

생성자의 접근 제한

객체를 생성하기 위해 생성자를 어디에서나 호출할 수 잇는 것은 아니다. 생성자가 어떤 접근 제한을 갖느냐에 따라 호출 가능 여부가 결정된다. 생성자는 public, default, private 접근 제한을 가질 수 있다.

접근 제한자 생성자 설명

접근 제한자 생성자 설명
public public 클래스() 모든 패키지에서 생성자를 호출할 수 있다.
= 모든 패키지에서 객체를 생성할 수 있다.
(default) 클래스() 같은 패키지에서만 생성자를 호출할 수 있다.
= 같은 패키지에서만 객체를 생성할 수 있다.
private private 클래스() 클래스 내부에서만 생성자를 호출할 수 있다.
= 클래스 내부에서만 객체를 생성할 수 있다.
package practice.accessModifer;

public class A {
	//필드 선언
	A a1 = new A(true);
	A a2 = new A(1);
	A a3 = new A("문자열");
	
	//public 접근 제한 생성자 선언
	public A(boolean b) {
		
	}
	
	//default 접근 제한 생성자 선언
	A(int b) {
		
	}
	
	//private 접근 제한 생성자 선언
	private A(String b) {
		
	}
}
package practice.accessModifer; // A.class와 패키지 동일

public class B {
	//필드 선언
	A a1 = new A(true); 	//o
	A a2 = new A(1); 		//o
//	A a3 = new A("문자열");	//x(private 생성자 접근 불가(컴파일 에러)
}
package kr.so5.object.field; //A.class와 패키지 다름

import practice.accessModifer.A;

public class C {
	A a1 = new A(true); 	  //o
	A a2 = new A(1); 		    //x (default 생성자 접근 불가(컴파일 에러))
	A a3 = new A("문자열");	//x(private 생성자 접근 불가(컴파일 에러))
}

필드와 메소드의 접근 제한

필드와 메소드도 어디에서나 읽고 호출할 수 있는 것은 아니고, 어떤 접근 제한을 갖느냐에 따라 호출 여부가 결정된다. 필드와 메소드는 public, default, pricate 접근 제한을 가질 수 있다.

접근 제한자 생성자 설명
public public 필드
public 메소드{}
모든 패키지에서 필드를 읽고 변경할 수 있다.
모든 패키지에서 메소드를 호출할 수 있다.
(default) 필드
메소드{}
같은 패키지에서만 필드를 읽고 변경할 수 있다.
같은 패키지에서만 메소드를 호출할 수 있다.
private private 필드
private 메소드{}
클래스 내부에서만 필드를 읽고 변경할 수 있다.
클래스 내부에서만 메소드를 호출할 수 있다.

'Java' 카테고리의 다른 글

멀티 스레드  (0) 2024.04.17
싱글톤 패턴  (0) 2024.03.02
Getter와 Setter  (0) 2024.02.27
예외 처리  (0) 2024.02.22
자바  (1) 2024.01.27