본문 바로가기

반응형

이번 글에서는 객체 내부에 데이터를 저장하는 필드(field)와,
그 필드를 조작하고 제어하는 메서드(method)를 사용하는 구조를 학습합니다.
특히 while 루프를 통해 객체의 상태 변화에 따라 동작을 제어하는 방식을 실습합니다.


📦 클래스 코드 (Car.java)

package ch06.sec08.exam03;

public class Car {
	private int gas;

	void setGas(int gas) {
		this.gas = gas;
	}

	boolean checkGas() {
		if (gas == 0) {
			System.out.println("가스가 없습니다.");
			return false;
		}

		System.out.println("가스가 있습니다.");
		return true;
	}

	void run() {
		while (true) {
			if (gas <= 0) {
				System.out.println("멈춥니다. (가스 잔량 : " + gas + ")");
				return;
			}
			System.out.println("달립니다. (가스 잔량 : " + gas + ")");
			gas--;
		}
	}
}

📌 실행 코드 (CarExample.java)

package ch06.sec08.exam03;

public class CarExample {
	public static void main(String[] args) {
		Car car = new Car();
		car.setGas(5);

		if (car.checkGas()) {
			System.out.println("출발합니다.");
			car.run();
		}

		System.out.println("가스를 주입하세요.");
	}
}

💬 코드 설명

  • private int gas;
    가스 잔량을 저장하는 비공개(private) 필드
  • setGas(int gas)
    → 외부에서 가스를 설정하는 메서드 (Setter)
  • checkGas()
    → 현재 가스 상태를 확인하고, 결과를 boolean으로 반환
  • run()
    → 가스가 남아있는 동안 "달립니다" 출력하고,
    가스가 0이 되면 "멈춥니다" 출력 후 반복 종료
  • while (true)
    → 무한 반복, 가스가 0이 되면 return으로 탈출

💻 실행 결과

가스가 있습니다.
출발합니다.
달립니다. (가스 잔량 : 5)
달립니다. (가스 잔량 : 4)
달립니다. (가스 잔량 : 3)
달립니다. (가스 잔량 : 2)
달립니다. (가스 잔량 : 1)
멈춥니다. (가스 잔량 : 0)
가스를 주입하세요.

📌 간단 정리

메서드 역할
setGas(int) 가스 주입
checkGas() 가스 존재 여부 확인
run() 가스가 있을 때까지 주행

💡 포인트 정리

  • private로 선언된 필드는 외부 직접 접근이 불가능 → 메서드로 간접 접근
  • Setter 메서드를 통해 필드 값을 안전하게 변경
  • Checker 메서드를 통해 객체 상태를 외부에 알림
  • 반복문(while)을 돌리면서 상태 변화로 탈출 조건 제어
  • 객체는 상태(state) + 동작(behavior)을 가진다 → 이 예제는 그 기본 구조를 잘 보여줌
댓글