JAVA

12.[JAVA] 접근제어

Gunadian 2021. 12. 6. 22:33

접근제어(access control)

클래스의 멤버에 접근하는 것을 제어하는 것이다.

public 이나 private의 접근 지정자를 멤버 앞에 붙여서 접근을 제한 하게 된다. 

public은 멤버 앞에 붙이면 자유롭게 접근할 수있는 멤버가 되고

private를 붙이면 클래스 안에서만 접근이 가능한 멤버가 된다.

 

자바의 접근 제어 지정자

멤버 접근 제어는 3가지의 지정자로 이루어져 있으며 public,private,protected가있다.

class A {
	private int a;
	int b;
	public int c;

}

public class Test{
	private void psvm() {
	
		A obj = new A();
		obj.a = 100;  // 전용 멤버는 다른 클래스에서 접근이 안된다
		obj.b = 200; //디폴트 멤버는 접근 가능
		obj.c = 300; //공용 멤버는 접근 가능

	}
}

 

접근자와 설정자

객체지향 프로그램중에 정보은닉이라고 있었는데 정보은닉이란 구현한 세부 사항을 클래스 안에 감추는 것이다.

클래스 안에 변수를 선언할 때는 private를 붙여 사용 하는게 좋다.

private를 사용하면 외부로부터의 접근이 차단된다.

 

필드와 관련된 두 가지 종류의 메소드가 있는데 바로 접근자(getter)설정자(setter)이다.

보통 get이나 set 메소드 이름 앞에 붙여 진다.

 

public class Account {
	
	private int regNumber;
	private String name;
	private int balance;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getBalance() {
		return valance;
	}
	public void setBalance(int balance) {
		this.balance = balance;
	}
}
public class AccountTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Account obj = new Account();
		obj.setName("guna");
		obj.setBalance(50000);
		
		System.out.println("내 이름은" + obj.getName() + " 갖고 있는 현금은" + obj.getBalance()+"이다");
	}

}

실행 결과는 

내 이름은guna 갖고 있는 현금은50000이다

클래스 Account의 필드 name과 balance는 모두 private로 선언 되었다.

 

balance에 대한 접근자는 getBalance()이고 설정자는 setBalance()다.

필드가 private로 선언 되어있더라도 외부에서 메소드를 이용하면 불편함 없이 필드 값을 변경하거나 읽을수가 있다.

 

접근자와 설정자의 사용 이유

-접근자와 설정자를 사용해야지 나중에 클래스를 업그레이드 할때 편하다.

-필요할 때마다 필드값을 계산하여 반환할 수 있다.

-접근자만을 제공하면 자동적으로 읽기만 가능한 필드를 만들수 있다.

-접근자에서 매개 변수를 통하여 잘못된 값이 넘어오는 경우, 사전에 차단 할 수있다.