728x90
반응형
접근 제어자 (Access Modifier)

 

자바는 접근제어자를 사용하여 변수메서드사용 권한을 설정할 수 있다.

 

  1. private
  2. default
  3. protected
  4. public

  • private
    • 접근 제어자가 private으로 설정되어 있다면 private이 붙은 변수, 메서드는 해당 클래스에서만 접근이 가능하다.
    • 아래 secret 멤버변수와 getSecret 메서드는 오직 Sample 클래스에서만 접근이 가능하다.
public class Sample {
	private String secret;
	private String getSecret() {
		return this.secret;
	}
}

  • default
    • 접근 제어자를 별도로 설정하지 않는다면 접근 제어자가 없는 멤버 변수 및 메서드는 default 접근제어자가 되어
      해당 패키지 내에서만 접근이 가능하다.
    • HouseKim 과 HousePark의 패키지는 house로 동일하다. 따라서 상호간의 멤버변수에 접근이 가능하다.

house/HouseKim.java

package house;

public class HouseKim{
	String lastname = "kim";
}

 

house/HousePark.java

package house;
public class HousePark{
	String lastname = "park";
	
	public static void main(String[] args) {
		HouseKim kim = new HouseKim();
		System.out.println(kim.lastname);
	}
}

  • protected
    • 접근제어자가 protected로 설정되었다면 protected 가 붙은 멤버 변수 및 메서드는
      동일 패키지의 클래스 또는 해당 클래스를 상속 받은 다른 패키지의 클래스에서만 접근이 가능하다.
    • HouseHong 클래스를 상속한 GilDongHong 클래스의 패키지는 house.person 으로
      HouseHong의 패키지인 house와 다르지만 HouseHong의 lastname 변수가 protected 이기 때문에
      gdh.lastname 과 같은 접근이 가능하다.
    • 만약 lastname의 접근제어자가 protected가 아닌 default 접근제어자였다면
      gdh.lastname 문장은 컴파일 오류가 발생할 것이다.

house/HouseHong.java

package house;

public class HouseHong{
	protected String lastname = "hong";
}

 

house/person/GilDongHong.java

package house.person;

import house.HouseHong;

public class GilDongHong extends HouseHong{		// HouseHong 을 상속
	public static void main(String[] args) {
		GilDongHong gdh = new GilDongHong();
		System.out.println(gdh.lastname);
	}
}

  • public
    • 접근제어자가 public 이라면 public 접근제어자가 붙은 변수 및 메서드는 어떤 클래스에서도 접근이 가능하다.
    •  info 변수는 public 접근 제어자가 붙어 있으므로 어떤 클래스라도 접근이 가능하다.

package house;

public class HouseHong{
	protected String lastname = "Hong";
	public String info = "this is public message.";
}
import house.HouseHong;

public class Sample{
	public static void main(String[] args) {
		HouseHong househong = new HouseHong();
		System.out.println(househong.info);
	}
}

728x90
반응형

'Language > Java' 카테고리의 다른 글

Java - Exception  (0) 2023.03.27
Java - Static  (0) 2023.03.27
Java - Abstract Class  (0) 2023.03.27
Java - Polymorphism  (0) 2023.03.27
Java - Interface  (0) 2023.03.26

+ Recent posts