[Unity] UI와 Button 이벤트 복습을 위한 계산기 만들기 ( 1 )
오늘 오후에 자습할 시간이 생겨서 Unity UI와 Button 이벤트를 복습하기 위해 간단한 계산기를 만들어보기로 했다.
이전에 배웠던 UI 구성과 버튼 입력 방식을 다시 활용하면서 이번에는 이벤트 함수를 이용한 입력 처리와 연산자 우선순위를 고려한 계산 기능을 구현해 보려고 한다. (많이 써봐야 친해지니까...)
단순히 숫자를 입력하고 사칙연산을 수행하는 것에서 나아가 입력된 수식을 분석하고 올바른 순서로 계산하는 것이 목표이다.
1. 현재 구현 상황

현재 계산기의 기본적인 UI 구성을 완료했으며 숫자 버튼을 클릭하면 해당 숫자가 화면에 표시되는 기능까지 구현했다. 숫자 입력 영역과 연산자 입력 영역을 분리했으며 상단에는 수식과 계산 결과를 출력할 화면을 배치했다.
2. 구현할 기능
숫자 및 소수점 입력
0~9버튼으로 숫자 입력.버튼으로 소수점 입력- 소수점 중복 입력 방지
- 최대 입력 문자 수 제한
연산 기능
| 연산자 | 기능 |
|---|---|
+ | 덧셈 |
- | 뺄셈 |
* | 곱셈 |
/ | 나눗셈 |
% | 나머지 연산 |
^ | 거듭제곱 |
특수 버튼
| 버튼 | 기능 |
|---|---|
E | 입력된 수식 계산 |
C | 전체 입력 초기화 |
<- | 마지막 문자 한 개 삭제 |
<- 버튼은 사용 중인 폰트에서 화살표 문자를 지원하지 않아 두 글자로 표현했다. 폰트 설정 다시 하면 되지만 너무 귀찮았다. 문자열로 인식하여 한 글자 삭제 기능을 수행하도록 구현할 생각이다.
3. 구현 방향
3.1 Button 이벤트 활용
이번에는 Unity의 Button.onClick.AddListener()를 이용하여 버튼의 클릭 이벤트를 등록하려고 한다.
각 버튼의 TMP_Text에서 숫자 또는 연산자 문자열을 가져오고, 버튼의 종류에 따라 서로 다른 이벤트 처리 메서드를 호출하는 방식이다.
숫자 입력과 연산자 입력을 분리하고, E, C, <- 버튼은 각각 계산, 초기화, 삭제 기능을 담당하도록 구성할 계획이다.
3.2 연산자 우선순위 구현
이번 프로젝트에서 가장 중요하게 생각하는 부분이다. 예를 들어 다음과 같은 수식이 입력되었다고 가정하자.
2 + 3 * 4 ^ 2
왼쪽부터 순서대로 계산하는 것이 아니라 연산자의 우선순위를 고려하여 계산해야 한다.
| 우선순위 | 연산자 |
|---|---|
| 1 | ^ |
| 2 | *, /, % |
| 3 | +, - |
위 수식은 거듭제곱, 곱셈, 덧셈 순서로 계산하여 50을 출력해야 한다.
이를 위해 입력된 문자열을 숫자와 연산자로 분리하고, 우선순위에 따라 계산하는 방식으로 일단 생각 중인데 다른 방법도 고안 중이다. 일단 List를 활용하거나 Stack 자료구조를 이용한 수식 계산 방식 중 선택 할 것 같다.
3.3 예외 처리
계산 기능을 구현하면서 다음과 같은 상황도 대응하려고 한다.
- 소수점 중복 입력
- 연산자 연속 입력
- 0으로 나누는 경우
- 불완전한 수식 입력
- 최대 문자 수 초과
- 음수 입력 및 뺄셈 연산자 구분
4. 개발 목표
마감 일을 정하고 개발을 완수하려한다. 목표는 이번 주 토요일로 정하고 기한 내에 완성하려고 결심했다.
우선 숫자와 연산자 입력을 분리하고, 사칙연산과 거듭제곱, 연산자 우선순위까지 구현하는 것을 목표로 한다.
시간이 허락한다면 예외 처리와 UI도 다시 조금 더 손보고 싶다. 유심히 보면 숫자패드와 연산자패드 버튼 사이즈가 조금 다르다.
5. 마무리
파이팅


