[java] 접근 제어 지시자와 정보은닉

DEVELOPERS_Ivan ㅣ 2023. 8. 1. 09:06

접근 제어 지시자 (accesss modifier) 4 tpye
● 클래스 외부에서 클래스의 멤버 변수, 메서드, 생성자를 사용할 수 있는지 여부를 지정하는 키워드
● private : 같은 클래스 내부에서만 접근 가능 (외부 클래스, 상속 관계의 클래스에서도 접근 불가)
● 아무것도 없음 (default) : 같은 패키지 내부에서만 접근 가능 (상속 관계라도 패키지가 다르면 접근 불가)
● protected : 같은 패키지나 상속 관계의 클래스에서 접근 가능하고 그 외 외부에서는 접근 할 수 없음
● public : 클래스의 외부 어디서나 접근 할 수 있음

get()/ set() 메서드
● privaste 으로 선언된 멤버 변수 (필드)에 대해 접근, 수정할 수 있는 메서드를 public 으로 제공 get() 메서드만 제공되는 경우 read-only 필드
● 이클립스에서 자동으로 생성해주는 단축 기능이 존재한다.

정보 은닉
prvate으로 제어한 멤버 변수도 puvlic 메서드가 제공되면 접근 가능하지만 변수가 public으로 공개되었을 때 보다 private 일때 각 변수에 대한 제한을 public 메서드에서 제어 할 수 있다.
객체 지향 프로그램에서 정보 은닉은 필요한 외부에서 접근 가능한 최소한의 정보를 오픈함으로써 객체의 오류를 방지하는 클라이언트 객체가 더 효율적으로 객체를 활용 할 수 있도록 해준다.

package ch06;

 

public class BankMainTest {

 

// 메인 함수

public static void main(String[] args) {

 

Bank bank = new Bank();

// System.out.println(bank.balance);

// bank.showinfo();

// System.out.println(bank.showifo); <-- 오류 발생(showinfo 사용)

 

bank.deposit(10_000);

bank.whitdraw(5_000);

bank.showinfo();

 

// 신입이 실수를 한 코드

// bank.balance = 100_000;

// bank.showinfo();

 

} // end of main

 

} // end of class

 

package ch06;

 

public class Bank {

// 정보 은닉

 

// 접근 제어 지시자 private - 자기 자신에서만 사용 가능

// 내부 접속 막을 때 프라이빗 사용

// String name; // 계좌 번호

// int balance; // 계좌 잔액

 

private String name; // 계좌 번호

private int balance; // 계좌 잔액

 

// 입급

public void deposit(int money) {

this.balance += money;

}

 

// 출금 - 도전 (잔액 0원인데 출금 요청)

public int whitdraw(int money) {

// 메서드 영역 안에 사용하는 변수는 지역 변수라고도 한다.

int result = 0;

this.balance -= money;

result = money;

return result;

 

}

 

// 잔액 확인

public void showinfo() {

System.out.println("현재 계좌 잔액은 " + balance + "입니다.");

System.out.println("현재 계좌 잔액이 부족합니다.");

}

 

} // end of class

 

if(this.balance<0){this.balance=0;}else{this.balance=this.balance-money;

'Java' 카테고리의 다른 글

[java] 대중교통 이용 프로그램 만들기  (0) 2023.08.03
[java] static  (0) 2023.08.03
[java] 객체와 객체간의 상호작용  (0) 2023.07.31
[java] 생성자  (0) 2023.07.31
[java] 인스턴스화 생성과 힙 메모리  (0) 2023.07.31