[JAVA] 31. DeskLamp 클래스

문정준's avatar
Feb 11, 2025
[JAVA] 31. DeskLamp 클래스

조명 키고 끄기

  • 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 ( 누구나 접근가능해야 함 )

결과

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

sxias