본문 바로가기
혼자 공부하는 것들/JAVA

JAVA)알람시계 클래스 만들기

by applepick 2020. 7. 18.
반응형

제목: 알람시간 클래스 (class AlarmTime)

 

목적

알람시간을 나타내는 클래스를 설계함으로써 생성자 오버로딩, this 레퍼런스, this() 호출, 객체의 배열생성 방법을 학습한다.

 

AlarmTime이라는 클래스를 만들어 알람의 시간과 어떠한 요일로 알람을 맞출것인지 사용자에게 받아와 실행시켜주는 프로그램입니다. 각 필드에 필요한 메소드를 만들어 유동적으로 사용하는 방법을 터득하는 것입니다. 각 메소드의 상호작용에 따라 알람을 만듭니다. 생성자자체를 배열타입으로 선언하여 알람의 개수를 설정합니다.

 

구현 내용

class AlarmTime

필드

private int hour: class 내부에서 알람의 (시간)변수입니다.

private int minute: class 내부에서 알람의 (분)변수입니다.

private boolean active = false : 저는 알람의 상태의 초기값을 꺼놓는 것으로 하였습니다.

private boolean repeat = new boolean[7] : 요일의 반복을 알기위해서 boolean타입의 배열로 일~토 7개의 배열을 구현했습니다.

private char[] day : 각 요일을 한글로 나타내기위해서 char형 배열로 변수를 생성하였습니다. class 내부에 선언한 이유는 이 값은 변하지 않는 값이기떄문에private으로 선언하여 숨겨두었습니다.

생성자

public AlarmTime( ): 값을 아무것도 안받았을 때도 만들수있도록 파라미터 값을 안 받아도 생성할수있도록 만들었습니다.

public AlarmTime( int hour, int minute ): 외부에서 받아온 값을 내부 class private 값에 저장하기위해 변수 두 개를 선언하였습니다. 또한, this()생성자를 통해 public AlarmTime(int hour, int minuite, boolean[] repeat, boolean active)이 생성자를 불러들어왔습니다. 시간과 분만 입력받아도 실행될 수 있도록 만들었습니다.

public AlarmTime(int hour, int minuite, boolean[] repeat, boolean active) : 실질적으로 제일중요한 생성자입니다. 시간, 분, 반복요일 알람의 on/off의 정보를 받아와 설정해주는 생성자입니다.

메소드

public boolean isActive( ): active가 true 즉, 켜져있으면 true를 반환하고, false이면 false을 반환합니다.

public int getHour( ): class AlarmTime 내부의 private int hour 값을 반환해줍니다.

public int getMinute( ): class AlarmTime 내부의 private int Minute 값을 반환해줍니다.

public boolean[ ] getRepeat( ): AlarmTime 생성자에서 repeat를 받아온 것을 class 내부의 private boolean[ ] repeat에 저장하여 결과를 반환시켜주는 메소드입니다.

public void AlarmTime(int hour, int minuite, boolean[] repeat, boolean active): active값이 false이면 알람이 꺼져있음을 알리고, 켜있다면 다시 시간과 분을 제대로 입력되어있는지 확인하는 메커니즘을 구현했습니다. 만약 시간과 분이 제대로 입력되어있다면 알람의 시간과 분을 나타내고, 다시 반복요일을 for문으로 돌려 원하는 요일이 맞는지 확인하여 출력하게 만들었습니다.

public static void main(String[ ] args) : AlarmTime타입의 배열 k를 선언과 동시에 50개를 할당해주었습니다. 배열의 1번부터 사용할것이기떄문에 p는 1부터 시작합니다. active,khour,kminute,krepeat값을 사용자에게 받아와 배열에 저장했습니다. do while문으로 묶어 d값이 false이면 사용을 종료합니다.

 

import java.util.Scanner;

public class AlarmTime {
	private int hour;
	private int minute;
	private boolean active =false; //초기 값은 꺼져있는 상태
	private boolean[] repeat = new boolean[7];
	private char[] day = {'일','월','화','수','목','금','토'};
	
 	public AlarmTime() //시간설정
	{
		this(0,0,null,false);
	}

 	public AlarmTime(int hour, int minute) //시간설정
	{
		this(hour,minute,null,false);
	}
	public AlarmTime(int hour, int minute,boolean[] repeat, boolean active)
	{
		this.hour = hour;
		this.minute = minute;
		this.repeat = repeat;
		this.active = active;
	}

	public boolean isActive() //알람상태
	{
		if(active == true)
		{
			System.out.println("알람이 켜져있는 상태입니다.");
			return true;	
		}
		else
		{
			System.out.println("알람이 꺼져있는 상태입니다.");
			return false;
		}
	}

	public int getHour() //설정된 시간 리턴
	{
		return hour;
	}

	public int getMinute() //설정된 분 리턴
	{
		return minute;
	}

	

	public boolean[] getRepeat() //설정된 반복 요일을 리턴
	{		 
		return repeat;
	}

	

	public void setAlarmTime(int hour, int minute, boolean[] repeat, boolean active) //설정변경
	{
		this.hour = hour;
		this.minute = minute;
		this.repeat = repeat;
		this.active = active;
		if(active == true) //알람이 켜있으면
		{
			if(0<hour && hour<24 && 0<=minute && minute<60)
			{	
				System.out.println("설정된 시간은"+getHour()+"시"+getMinute()+"분"+"입니다.");
				System.out.printf("반복되는 요일은 ");
				for(int i=0;i<repeat.length;i++)
				{
					if(repeat[i] == true)
						System.out.printf("%c ",day[i]);
				}
				System.out.printf("입니다.");
				System.out.println();
			}
			else {
				System.out.println("시 또는 분이 잘못 입력되었습니다");	
			}
		}
		else {
			isActive();
		}
	}

	public static void main( String[] args ) //메인함수
	{
		Scanner scanner = new Scanner(System.in);
		boolean[] krepeat = new boolean[7];  
		boolean active;
		boolean t,d;
		int khour;
		int kminute;
		int p=0;
		AlarmTime[] k = new AlarmTime[50];
		do
		{
			p++;
			System.out.printf("알람을 켜시겠습니까?");
			active = scanner.nextBoolean();
			if(active == true)
			{
				System.out.printf("알람을 킬 시간과 분을 입력해주세요 :");
				khour = scanner.nextInt();
				kminute = scanner.nextInt();

				System.out.printf("알람이 반복될 요일을 입력해주세요 :"); //일 ~토요일 순입니다.
				for(int i=0;i<krepeat.length;i++)
				{
					t = scanner.nextBoolean();
						krepeat[i] = t;
				}
				k[p] = new AlarmTime(khour, kminute, krepeat, active);
				k[p].setAlarmTime(khour, kminute, krepeat, active);
			}
			else
			{
				k[p] = new AlarmTime();
				k[p].isActive();
			}
			System.out.println();
			System.out.printf("다시 실행하시겠습니까 ? :");
			d = scanner.nextBoolean();
			System.out.println();
		}while(d == true);
		System.out.printf("사용을 종료합니다");

	}

}
반응형

댓글