본문 바로가기

Java/Codes

선풍기 (싱글턴)

학원에서 class들로만 구성했던 선풍기를 싱글턴 방식으로 다시 만들어 보았다.

싱글턴은 쉽게 생각해서 클래스 안에서 자기자신을 다시 사용하도록 설정한다.

 

package Single_ton_test;

import java.util.Scanner;

//싱글턴으로 기능구현
public class Single_Fan {
	private static Single_Fan fan_s = new Single_Fan();//싱글턴 패턴 선언
	Single_Fan getInstance() // 싱글턴 패턴 주소로 반환 <1000번지 주소>
	{
		return fan_s;
	}
	
	//사용할 전역변수 선언
	boolean fan_power;
	String led = "빨강";
	int dan = 1;
	int ang = 90;
	int time = 0;
	
	//문자열과 정수를 사용자로부터 받기위한 스캐너
	Scanner sc = new Scanner(System.in);//문자열
	Scanner ac = new Scanner(System.in);//정수

	Boolean fan_power()//선풍기 전원 설정
	{
		String ans = sc.nextLine();
		if(ans.equals("Y")||ans.equals("y"))//ans가 y라면
		{
			System.out.println("선풍기를 킬게요\n");
			return fan_power = true;
		}
		else if(ans.equals("N")||ans.equals("n"))//ans가 n라면
		{	
			System.out.println("선풍기를 끌게요\n");
			return fan_power = false;
		}
		else //디폴트값 false
		{
			return fan_power = false;
		}
	}
	
	void LED()//LED색상 변경
	{
		System.out.printf("LED 색상을 선택해주세요. (기본색상은 빨간색입니다.) : ");
		led = sc.nextLine();//사용자에게 색상을 적도록 한다.
		if(led.equals(""))
		{
			led = "빨강";
		}
		System.out.println(led+"으로 선택되었습니다.");
		System.out.println();
	}
	
	void speed()//풍속설정
	{
		String[] dan_set = {"1단으로 변경합니다.","2단으로 변경합니다.","3단으로 변경합니다.","4단으로 변경합니다."};//배열 dan_set에 결과값 문자열 설정
		System.out.printf("몇단으로 설정 하시겠습니까? (1, 2, 3, 4) : ");
		while(true)
		{
			dan = ac.nextInt();
			if(dan == 1)
			{
				System.out.println(dan_set[0]);
				System.out.println();System.out.println(dan_set[0]);
				System.out.println();
				break;
			}
			else if(dan == 2)
			{
				System.out.println(dan_set[1]);
				System.out.println();System.out.println(dan_set[1]);
				System.out.println();
				break;
			}
			else if(dan == 3)
			{
				System.out.println(dan_set[2]);
				System.out.println();System.out.println(dan_set[2]);
				System.out.println();
				break;
			}
			else if(dan == 4)
			{
				System.out.println(dan_set[3]);
				System.out.println();System.out.println(dan_set[3]);
				System.out.println();
				break;
			}
			else
			{
				System.out.printf("%d은(는) 없는 풍속입니다. 다시 선택해주세요! : ",dan);
			}
		}
	}
	
	void angle()//회전각도 설정
	{
		System.out.printf("각도를 얼마로 설정하시겠습니까? (단, 0도 이하, 180이상은 불가능합니다.) : ");
		while(true)//무한반복
		{
			ang = ac.nextInt();//사용자에게 ang값을 받는다.
			
			if(0<=ang&&ang<=180)//ang이 0도에서 180사이면 
			{
				System.out.println(ang+"도로 설정합니다.\n");
				break;//while문 종료
			}
			else//ang이 0도에서 180사이가 아니라면 
			{
				System.out.printf("%d도는 범위를 벗어납니다. 재입력 해주세요. : ",ang);
				System.out.println();
			}
		}
	}
	
	void timer()//타이머 설정
	{
		System.out.printf("설정할 시간을 입력하세요. : ");
		time = ac.nextInt();
		System.out.println(time+"분으로 설정되었습니다.");
	}
	
	public static void main(String[] args) {
		
		Single_Fan fan_s1 = new Single_Fan().getInstance();//<1000번지 주소> 하나로 쓸 수 있다. static과 유사하게 사용한다.

		System.out.println("[LED 선풍기]");
		System.out.printf("선풍기를 켜시겠습니까? (Y/N) : ");
		fan_s1.fan_power();
		if(fan_s1.fan_power == true)//fan_power가 true일때 (선풍기 전원이 들어왔을때)
		{
			while(true)
			{
				System.out.println("<선풍기 상태>");
				System.out.printf("LED색상 : %s, 풍속 : %d단, 회전각도 : %d도, 타이머 : %d분\n\n",fan_s1.led, fan_s1.dan, fan_s1.ang,  fan_s1.time);
				System.out.println("선풍기 기능을 설정합니다.");
				System.out.println("1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기");
				int menu_sel = fan_s1.ac.nextInt();
				System.out.println();
				
				if(menu_sel == 1)
				{
					fan_s1.LED();//LED 색상변경
				}
				else if(menu_sel == 2)
				{
					fan_s1.speed();//풍속설정
				}
				else if(menu_sel == 3)
				{
					fan_s1.angle();//회전각도
				}
				else if(menu_sel == 4)
				{
					fan_s1.timer();//타이머 설정
				}
				else if(menu_sel == 5)
				{
					System.out.println("선풍기를 종료합니다.");
					break;
				}
				else
				{
					System.out.println("잘못입력하셨습니다. 다시 입력해주세요!");
				}

			}
		}
	}
}

 

실행결과는 다음과 같다.

 

[LED 선풍기]
선풍기를 켜시겠습니까? (Y/N) : y
선풍기를 킬게요

<선풍기 상태>
LED색상 : 빨강, 풍속 : 1단, 회전각도 : 90도, 타이머 : 0분

선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
1

LED 색상을 선택해주세요. (기본색상은 빨간색입니다.) : 
빨강으로 선택되었습니다.

<선풍기 상태>
LED색상 : 빨강, 풍속 : 1단, 회전각도 : 90도, 타이머 : 0분

선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
2

몇단으로 설정 하시겠습니까? (1, 2, 3, 4) : 6
6은(는) 없는 풍속입니다. 다시 선택해주세요! : 2
2단으로 변경합니다.

2단으로 변경합니다.

<선풍기 상태>
LED색상 : 빨강, 풍속 : 2단, 회전각도 : 90도, 타이머 : 0분

선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
3

각도를 얼마로 설정하시겠습니까? (단, 0도 이하, 180이상은 불가능합니다.) : 2000
2000도는 범위를 벗어납니다. 재입력 해주세요. : 
10
10도로 설정합니다.

<선풍기 상태>
LED색상 : 빨강, 풍속 : 2단, 회전각도 : 10도, 타이머 : 0분

선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
4

설정할 시간을 입력하세요. : 1000
1000분으로 설정되었습니다.
<선풍기 상태>
LED색상 : 빨강, 풍속 : 2단, 회전각도 : 10도, 타이머 : 1000분

선풍기 기능을 설정합니다.
1.LED 색상변경 2.풍속설정 3.회전각도 4.타이머 설정 5.선풍기 끄기
5

선풍기를 종료합니다.