조명 키고 끄기
- DeskLamp와 DeskLampTest 클래스를 이용하여 조명을 키고 끄는 프로그램을 작성하시오.
문제 분석
- DeskLamp 클래스 : DeskLamp의 상태, 전원 켜기/끄기 메서드 정의
- DeskLampTest 클래스 : DeskLamp 호출, DeskLamp의 상태 변경 (메서드 호출)
코드 작성
package ex04;
class DeskLamp {
private boolean isOn; // 컨벤션 (약속), 변수의 선언
public void turnOn() { // 상태 변경
isOn = true;
}
public void turnOff() { // 상태 변경
isOn = false;
}
public String getIsOn() { // 상태 확인 - 컨벤션 (get으로 시작) - 카멜표기법(낙타표기법)
return "현재 상태는 " + (isOn ? "켜짐" : "꺼짐");
}
}
public class DeskLampTest {
public static void main(String[] args) {
DeskLamp myLamp = new DeskLamp(); // 인스턴스, 객체(Object)
// myLamp.isOn = true; >> X, 클래스 내의 상태는 행위로 변경
myLamp.turnOn();
System.out.println(myLamp.getIsOn());
myLamp.turnOff();
System.out.println(myLamp.getIsOn());
}
}
DeskLamp의 상태를 myLamp.isOn = true;의 형태로 변경?
- 문법적으로는 문제가 없으나, 객체 지향이 아님
- 객체 지향 프로그램에서 클래스 내의 상태는 행위로 변경
- 행위로 상태 변환을 강제하기 위해서, 접근제어자를 사용
- 나만 변경 가능 : private
- DeskLamp의 상태는 private : 직접 상태 변경을 막기 위함
- 공유받은 사람들까지만 변경 가능 : protected
- 전체가 변경 가능 : public
- 상태를 변경할 수 있는 메서드는 무조건 public ( 누구나 접근가능해야 함 )
결과

내용 정리
- toString() : return 뒤의 내용 (상태 등)을 문자열로 반환하는 메서드 (Override)
- 인스턴스 선언 후 함수를 바로 호출할 수 있는 이유? 캡슐화
Share article