Throttle 클래스

2025. 4. 17. 19:00자료구조

코드 설명

/****************************************************************************** 
* Throttle 객체는 연료 흐름을 제어하는 스로틀을 시뮬레이션합니다.
******************************************************************************/
public class Throttle
{
   private int top;      // 스로틀의 최상위 위치
   private int position; // 현재 스로틀 위치
                      
   /**
   * 지정된 개수의 "작동 위치(on position)"를 가진 Throttle을 생성합니다.
   * @param size
   *   이 Throttle에 설정할 작동 위치의 개수
   * @precondition
   *   size는 0보다 커야 합니다.
   * @postcondition
   *   Throttle은 지정된 개수만큼의 작동 위치를 가지고 생성되며,
   *   현재는 꺼진(닫힌) 상태입니다.
   * @exception IllegalArgumentException
   *   size가 0 이하일 경우 예외가 발생합니다.
   **/
   public Throttle(int size)
   {
       if (size <= 0)
           throw new IllegalArgumentException("Size <= 0: " + size);
       top = size;
       position = 0; // 현재 위치는 기본값인 0으로 설정됩니다.
   }

   /**
   * 현재 Throttle의 연료 흐름 정도를 반환합니다.
   * @param - 없음
   * @return
   *   현재 연료 흐름 비율 (0.0에서 1.0 사이의 값)
   **/
   public double getFlow( )
   {
      return (double)position / (double)top;
   }

   /**
   * 현재 Throttle이 켜져 있는지 확인합니다.
   * @param - 없음
   * @return
   *   흐름이 0보다 크면 true, 아니면 false를 반환합니다.
   **/
   public boolean isOn( )
   {
      return (position > 0);
   }

   /**
   * Throttle의 위치를 위나 아래로 이동시킵니다.
   * @param amount
   *   이동할 양 (양수는 위로, 음수는 아래로 이동)
   * @postcondition
   *   위치가 지정된 양만큼 조정됩니다.  
   *   최상위 위치를 넘기면 최상위로 고정되며,  
   *   0보다 작아지면 0으로 고정됩니다.
   **/
   public void shift(int amount)
   {   
       if (amount + position > top)
           // 이동 결과가 최상위 위치를 넘을 경우
           position = top;
       else if (position + amount < 0)
           // 이동 결과가 0보다 작아질 경우
           position = 0;
       else
           // 정상 범위 내에서 위치 이동
           position += amount;                 
   }

   /**
   * Throttle을 끕니다.
   * @param - 없음
   * @postcondition
   *   Throttle의 위치가 0으로 설정되어 꺼진 상태가 됩니다.
   **/   
   public void shutoff( )
   {
       position = 0;
   }
}
  • Throttle은 연료 흐름을 조절할 수 있는 가상의 스로틀 장치를 의미한다.
  • 내부적으로 0~top까지의 위치 값으로 흐름을 표현한다.
private int top;
private int position;
  • top: 스로틀이 가질 수 있는 최대 위치(연료의 최대 흐름? 유량인가?)
  • position현제 스로틀의 위치(0이면 꺼진 상태, top 이면 완전 개방)
public Throttle(int size)
  • 스로틀의 최대 위치 수를 설정하면서 객체를 생성한다.
  • size가 0 이하이면 예외 처리.
  • 기본적으로 위치는 0으로 설정되며, 꺼진 상태이다.
public double getFlow()
  • 현제 위치에 따른 연료 흐름 비율을 반환한다.
  • 만약 position이 0이면 흐름이 0.0
  • 만약 position이 top이면 흐름이 1.0
  • 만약 position이 top/2이면 흐름이 0.5
public boolean isOn()
  • 스로틀의 흐름이 있는 지 확인한다.
  • 만약 position>0 이면 true 반환
public void shift(int amount)
  • 스로틀의 위치를 조절한다.
  • 만약 범위를 벗어나면 자동으로 0 또는 top에 고정시킨다.
public void shutoff()
  • 스로틀을 완전히 꺼서 position을 0으로 만든다.

코드 실행?

public class ThrottleTest {
    public static void main(String[] args) {
        Throttle t = new Throttle(10);  // top = 10, position = 0

        System.out.println("초기 상태:");
        System.out.println("isOn: " + t.isOn());           // false
        System.out.println("getFlow: " + t.getFlow());     // 0.0

        t.shift(3);  // 스로틀을 3단계 올림
        System.out.println("\n3단계 올린 후:");
        System.out.println("isOn: " + t.isOn());           // true
        System.out.println("getFlow: " + t.getFlow());     // 0.3

        t.shift(10); // 10단계 추가 이동 시도 (최대는 10이므로 초과 시 10에 고정)
        System.out.println("\n10단계 추가 이동 시도 후:");
        System.out.println("isOn: " + t.isOn());           // true
        System.out.println("getFlow: " + t.getFlow());     // 1.0

        t.shift(-5); // 5단계 내림
        System.out.println("\n5단계 내린 후:");
        System.out.println("isOn: " + t.isOn());           // true
        System.out.println("getFlow: " + t.getFlow());     // 0.5

        t.shutoff(); // 스로틀 끄기
        System.out.println("\nshutoff() 호출 후:");
        System.out.println("isOn: " + t.isOn());           // false
        System.out.println("getFlow: " + t.getFlow());     // 0.0
    }
}
//결과
초기 상태:
isOn: false
getFlow: 0.0

3단계 올린 후:
isOn: true
getFlow: 0.3

10단계 추가 이동 시도 후:
isOn: true
getFlow: 1.0

5단계 내린 후:
isOn: true
getFlow: 0.5

shutoff() 호출 후:
isOn: false
getFlow: 0.0

'자료구조' 카테고리의 다른 글

IntStack 클래스  (0) 2025.04.19
IntNode 클래스  (0) 2025.04.19
IntLinkedBag 클래스  (0) 2025.04.18
IntArrayBag 클래스  (0) 2025.04.18
Location 클래스  (1) 2025.04.17