Java/Java

접근 제어 지시자

DDG9 2024. 4. 17. 09:48

접근 제어 지시자란?

 

클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를

사용할 수 있는지 여부를 지정하는 키워드

 

정보 은닉, 캡슐화를 위해 사용

객체의 각각의 상태값은 직접 변수를 통해서 변경하는 것이 아닌

기능(행위, 메서드)을 통해서 변경하게 설계해야함

 

접근 제어 지시자의 종류

 

public —> 어디에서든 접근 가능 함

default —> 같은 패키지 내에서 접근 가능

protected ← 상속 배운 이후

private —> 해당 .java 안에서만 접근이 가능하다.

 

package basic.ch10;

// 은행
public class Bank {

	// 아무것도 지정하지 않으면 default 제어 지시자이다.
	// private는 클래스 안에서만 사용 가능
	private String name;
	private int balance; // 정보 은닉 --> 외부에서 확인 안되어야 하는 중요한 변수를 감춘다.

	// 입금하다.
	public void deposit(int money) {
		balance += money;
		showInfo();
	}

	// 출금하다.
	public int withdraw(int money) {
		// 방어적 코드를 작성
		if (balance < money) {
			System.out.println("잘못된 요청입니다");
			return 0;
		}
		balance -= money;
		showInfo();
		return money;
	}

	// 현재 은행의 총 잔액을 출력하다.
	public void showInfo() {
		System.out.println("현재 잔액은 : " + this.balance + " 입니다.");
	}

	// 정보 은닉(private) 후에 getter, setter 메서드를 설계해 둘 수 있다.
	// get 메서드란, 단순히 객체의 상태 변수를 리턴하는 메서드이다.
	public int getBalance() {
		return this.balance;
	}

	public String getName() {
		return this.name;
	}

	// 멤버 변수에 접근해서 객체의 상태 값을 변경하게 하는 메서드 (리턴 타입 없음)
	public void setName(String inputName) {
		this.name = inputName;
	}

	public void setBalance(int money) {
		if (money < 0) {
			System.out.println("잘못된 요청입니다");
		} else {
			this.balance = money;
		}
	}

}
package basic.ch10;

public class BankTest {

	// 코드의 시작점
	public static void main(String[] args) {

		Bank bank1 = new Bank();
		// bank1.name = "우리은행";

		bank1.deposit(10_000);
		int getMoney = bank1.withdraw(5_000);
		System.out.println(">>>>>>>> 출금 >>>>>>>>>");
		System.out.println("금액 : " + getMoney);

		// 신입 개발자가 실수로 멤버 변수에 접근해서 수정 ...
		// Bank에 돈을 넣어야 --> deposit() 기능으로 만들어져 있다.
		// bank1.balance = 100_000; <-- private으로 변경 후 정보 은닉 되었다.
		// 10만 5천원이 있어야 정상
		// 의도하지 않은 실수를 발생 시킬 수 있다.
		bank1.deposit(100_000);

		// 실행의 흐름을 만들 예정
		// 현재 은행의 전체 잔고가 200_000 이하라면 본점에 금액 요청상황
		System.out.println(bank1.getBalance());
		if (bank1.getBalance() <= 200_000) {
			System.out.println("본점에 금액을 요청해~~");
		}

		bank1.setName("그린은행");
		System.out.println(bank1.getName());
		bank1.setBalance(2100000000);
		System.out.println(bank1.getBalance());

	} // end of main

} // end of class

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

static 변수  (0) 2024.04.19
this 의 3가지 사용방법  (0) 2024.04.18
객체 지향 패러다임  (0) 2024.04.16
생성자 ( Constructor )  (0) 2024.04.16
RunTime Data Area  (0) 2024.04.16