getter와 setter를 알아보자.
객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는 것을 막는데 객체 데이터를 외부에서 읽고 변경하면 객체의 무결성(ie, 자동차의 속도가 - )이 깨질 수 있기 때문이다. 따라서 객체 지향 프로그래밍에서는 메써드를 통해서 데이터를 변경하는 방법을 선호한다. 데이터는 외부에서 접근하지 못하게 하고 메써드는 공개해서 외부에서 메써드를 통하게 해서 데이터에 접근시킨다. 이런 메써드가 Setter이다.
또한 객체 외부에서 객체 필드 값을 사용하지 못하게 할 수도 있는데 이럴 때에는 메써드로 필드 값을 가공해서 외부로 전달하는데 이렇게 해서 값을 가져오는 메써드가 Getter이다.
=> 클래스를 선언할 때 가능하면 필드 멤버들을 private로 선언해서 외부로부터 보호하고, 필드에 대한 Setter/Getter 메써드를 작성해서 필드 값을 안전하게 변경/사용하는 것이 좋다.
class SyncEx implements Runnable{
private long money = 10000; // 잔액
@Override
public void run() {
synchronized (SyncEx.class) {
for (int i=0; i<6; i++) {
//엄마 돈 10000원에서 6000원만 빠지므로 엄마 프로세스는 끝나고 아들 프로세스가 진행된다.
try {
Thread.sleep(500);
} catch (Exception e) {
e.printStackTrace();
}
if (getMoney() <= 0)
break;
outMoney(1000);
}
}
}
public long getMoney() { // Getter() 메써드 설정
return money;
}
public void setMoney(long money) { // Setter() 메써드 설정
this.money = money;
}
public void outMoney(long howMuch) {
String threadName = Thread.currentThread().getName();
if (getMoney() > 0) {
money -= howMuch;
System.out.println(threadName + " - 잔액 : " + getMoney() + "원");
} if (getMoney()==0){
System.out.println(threadName+ " 잔액이 없습니다.");
}
}
}
public class Test05 {
public static void main(String[] args) {
SyncEx atm = new SyncEx();
Thread mom = new Thread(atm, "엄마");
Thread son = new Thread(atm, "아들");
mom.start();
son.start();
// start()를 실행하면 내부적으로 ()이 실행되므로
}
}

'JAVA' 카테고리의 다른 글
| [JAVA] Set (0) | 2022.08.02 |
|---|---|
| [JAVA] wait()과 notify() (0) | 2022.08.02 |
| [JAVA] Thread (0) | 2022.08.01 |
| [JAVA] 예외 처리 (0) | 2022.08.01 |
| [JAVA]인터페이스, 열거형, 내부클래스 (0) | 2022.07.29 |
댓글