Programming 기초/Java

[Java] 접근 제어

뭉제 2023. 3. 24. 13:38

변수나 메소드 앞에 public을 붙여 사용했는데, public은 무엇일까?

 

public class AccessLevelModifiersMethod {
	public static void main(String[] args) {
		hi();
	}
    
	private static void hi() {
		System.out.println("Hi");
	}
}

· hi 메소드: "Hi" 를 콘솔에 출력하는 private 메소드

-> main 메소드에서 잘 실행된다.

 

 hi 메소드가 다른 클래스의 소속이라면 main 메소드에서 잘 실행될까?

 

public class AccessLevelModifiersMethod {
	public static void main(String[] args) {
		hi();
		Greeting.hi(); //Error
	}
	
	private static void hi() {
		System.out.println("Hi");
	}
}

class Greeting{
	private static void hi() {
		System.out.println("Hi");
	}
}

오류 발생

· Greeting 클래스의 hi 메소드를 main 메소드에서 실행하면 오류 발생

-> hi는 private 메소드라서 Greeting 클래스 밖에서 직접 접근해서 사용 불가 

 

class Greeting{
	public static void hi() {
		System.out.println("Hi");
	}
}

· hi 메소드를 public으로 바꾸면 잘 실행된다.

-> public은 클래스 외부에서도 바로 접근해서 사용 가능

 

 

** 접근 제어라는 장치가 왜 있는 것일까?

public은 선풍기의 버튼과 같이 사용자가 외부에서 선풍기의 동작을 제어하기 위해 바깥으로 드러나서 호출할 수 있는 것들을 위해 지정한다.

private는 선풍기의 부품, 전선과 같이 동작을 위해 꼭 필요하지만, 외부에서 굳이 알 필요도 없거나 알아서는 안되는 것들을 위해 지정한다.

 

 

 

접근 제어자


접근 제어자(access modifier)

· 클래스나 멤버들을 다른 클래스에서 접근해도 되는지의 여부를 선언하는 지시어

 

[클래스 접근 제어]

1. public 클래스: 모든 클래스에게 접근 허용

2. default 클래스: 같은 패키지의 클래스에만 접근 허용 

 

[멤버 접근 제어]

private -> default -> protected -> public 순으로 접근 허용 범위가 넓어진다.

1. private 멤버: 동일 클래스 내에만 접근 허용 

2. default 멤버: 같은 패키지 내의 클래스에게 접근 허용

3. protected 멤버

   - 같은 패키지 내의 클래스에게 접근 허용

   - 자식 클래스는 다른 패키지에 있어도 접근 가능 

4. public 멤버: 패키지에 상관없이 모든 클래스에게 접근 허용

 

** 접근 제어자 생략 -> default