STEP1 8.1 메뉴 만들기
To Do 01. Chapter 08로 프로젝트를 만들고 MyCalculator 클래스를 만들어 추가한다.
02. 입력 처리에 Scanner 클래스를 사용하겠다. 그리고 선택할 수 있는 메뉴를 보여주는 기능을 메서드로 만들어준다. 그리고 메뉴를 호출해준다.
1. 입력 기능을 사용하기 위해 그대로 적용한다(클래스를 임포트한다).
2. 입력 기능을 사용하기 위해 그대로 적용한다(객체를 생성한다). sc는 변수명이므로 변경해도 된다.
4. 사용자에게 보여줄 메뉴 항목을 작성해 메서드를 만든다.
3. 호출해서 출력한다.
03. 컴파일한 후 실행시켜 메뉴가 잘 출력되는지 확인한다.
STEP2 8.2 메뉴 출력 및 사용자 입력
To Do 01. 반복문을 이용하여 메뉴가 계속해서 출력되어 사용자 입력을 처리할 수 있도록 만들어준다. 횟수가 정해지지 않고 끝나는 조건만 있을 때는 while 반복문이 for 반복문보다 잘 어울린다.
1. while문을 이용하여 반복문을 만든다.
2. 메뉴 출력을 위해 메서드를 호출한다.
3. 사용자로부터 정수를 입력받는다.
4. 입력받은 값이 0이면 반복문을 종료한다.
5. 입력받은 값이 0이 아니고 메뉴의 다른 값이면 else 부분의 중괄호에서 처리를 한다.
6. 잘못된 메뉴가 입력되면 메시지를 출력하고 다시 메뉴 선택을 할 수 있도록 한다.
7. 반복문이 종료되면 메시지를 출력하고 프로그램을 종료한다.
02. 컴파일한 후 실행시켜 반복문에서 메뉴가 잘 출력되는지, 입력을 받고 입력받은 값을 잘 처리하는지 확인한다. 일단 입력받은 값이 0이 아닐 때 메뉴가 반복적으로 잘 출력되고, 입력받은 값이 0일 때 프로그램이 종료되면 제대로 처리되는 것이다.
▼ 사칙연산 메뉴 선택 ▼ 없는 메뉴 선택 ▼ 종료 메뉴 선택
STEP3 8.3 연산 기능 만들기
To Do 01. showMenu() 메서드 아래 쪽에 각 연산 기능을 작성한다.
1. addNum()
2. minusNum()
3. multipleNum()
4. divideNum()
메서드를 추가해주었다. 기능별로 메서드를 구현하고 main() 밖으로 빼내줬다.
이렇게 기능별로 메서드로 구현해주면 main() 메서드에서는 전체 로직을 알아보기도 쉽고, 개별 기능별로는 수정을 쉽게 할 수 있다.
STEP4 8.4 선택 메뉴 실행하기
이제 사용자가 선택한 메뉴의 기능이 실행되도록 해주자.
To Do 01. if 조건문을 이용하여 선택한 메뉴에 맞는 기능을 수행하는 코드를 추가해주겠다. 기존 코드의 26번 라인의 주석 아래에 다음 코드를 추가한다.
1. 각 조건문 안에 수행되는 문장이 한 문장씩밖에 없어서 중괄호를 생략했다.
STEP5 8.5 유효성 검사
To Do 01. 이제 사용자의 입력이 숫자가 아닐 때를 체크해보겠다. 메뉴를 선택하는 입력은 숫자여야 하고, 사칙연산을 수행하는 데 사용할 입력값도 숫자여야 한다. 여기서는 메뉴를 선택하는 부분에만 적용시키겠다. checkNum() 메서드를 코드의 맨 뒤에 추가한다.
1. checkNum() 메서드는 char형 데이터를 매개변수로 받아 숫자 0에서 9 사이의 값인지 확인하고 숫자이면 true를 반환하고 그렇지 않으면 false를 반환한다.
02. 자, 이 메서드를 이용하여 입력받은 값을 체크하면 된다. 입력받는 부분을 다음과 같이 수정한다.
1. 기존의 입력코드는 1이다. 입력된 것이 숫자가 아닐 수도 있는데 여기서 무조건 숫자로 처리하여 입력받기 때문에 에러가 발생한다.
2. 1을 주석처리하고 2에서 sc.nextLine()을 이용하여 글자로 입력을 받는다. 글자로 입력을 받으면 키보드의 어떤 키라도 입력을 받을 수 있으므로 에러가 나지 않는다. 다만 우리가 필요한 것은 한 글자, char형 데이터인데 char형의 데이터를 받는 기능은 따로 없으므로 sc.nextLine().charAt(0)를 이용하여 한 글자를 입력받는다.
3. 이제 char형 데이터 한 개를 입력받았으니 checkNum() 메서드에 매개변수로 넘겨 숫자인지 체크한다.
4. 반환받은 값이 false이면 4번 주석의 내용이 실행된다. 잘못 입력을 받은 것이니 다시 메뉴 출력을 반복한다.
5. 숫자이면 5부터 다시 진행된다. 5에서처럼 숫자라고 판명된 char형 데이터를 바로 int형 데이터로 형변환해 출력해보면 '1'을 입력했을 때 49가 출력된다. 문자 '1'의 십진수 값은 아스키코드표상 49이기 때문이다.
6. char형 숫자를 int형 숫자로 변경할 수 있다. 즉 '1'을 1로 반환해준다.
7. 배운 내용으로 처리하려면 7처럼 입력된 문자에서 '0'을 뺴면 된다.
int 변수 = 문자 - 문자;
산술 연산이기 때문에 char형 데이터는 int형 데이터로 형변환되고 '1'을 입력하면 다음과 같은 순서로 연산된다.
int num = '1' - '0';
// ↓ 형변환
int num = 49 - 48;
// ↓ 산술 연산
int num = 1;
다음 라인부터는 이전에 작성한 코드 그대로이다.
이렇게 메뉴를 선택할 때 숫자가 아닌 키보드의 다른 입력을 방지하는 코드를 적용시킬 수 있다.
지금까지 배운 자료형, 형변환, 연산자, 제어문, 메서드 등 많은 기능을 계산기 예제에 다 적용시켜보았다.
출처 : <Must Have> 이재환의 자바프로그래밍 입문
'Java > Basics' 카테고리의 다른 글
<Java Basics> Chapter 09. 클래스의 기초 (0) | 2023.09.23 |
---|---|
<Java Basics> Chapter 07. 메서드와 변수의 사용 가능 범위 (0) | 2023.09.22 |
<Java Basics> Chapter 06. 제어문 (0) | 2023.09.15 |
<Java Basics> Chapter 05. 콘솔 출력과 입력 (0) | 2023.09.15 |
<Java Basics> Chapter 04. 연산자 (0) | 2023.09.14 |