글 작성자: HEROHJK

일반적으로 계산기는 문자를 파싱해서 중위표기된 식을 후위표기된 식으로 변환 후


각 문자를 판별해서 연산을 합니다.


제가 만드려는 계산기는 미리 데이터를 정의해서, 그 데이터의 값이 연산자인지, 값인지를 판별하여


후에 있는 수고를 조금 덜어주는 방식으로 만듭니다.


구조는 다음과 같습니다.



type -> 값의 타입을 정의합니다.(계산기 열거형)

value -> 값을 저장합니다.(문자열)


오직 생성자만 있는 구조체입니다.


계산기 열거형의 종류는 다음과 같습니다.


value -> 값입니다. 계산기이므로 수가 들어갑니다.

dot -> 점입니다. 소수점인경우입니다.

operator -> 순서대로 곱셈,나눗셈,덧셈,뺄셈 기호입니다.

Paren -> 왼쪽괄호, 오른쪽 괄호입니다.

delimiter -> 구분자입니다

etc -> 디폴트값입니다.


스위프트에서 구현된 코드는 다음과 같습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import Swift
 
//계산기 열거형
enum CalculatorEnumeration{
    //값(숫자)
    case value
    //소수점
    case dot
    //연산자들
    case operatorMultiple
    case operatorDivide
    case operatorPlus
    case operatorMinus
    //왼쪽괄호
    case lParen
    //오른쪽괄호
    case rParen
    //구분자
    case delimiter
    //그외
    case etc
}
 
//계산기 데이터
struct CalculatorData{
    public var value: String
    public var type: CalculatorEnumeration
    
    public init(_ dataType : CalculatorEnumeration, _ str : String){
        value=str
        type=dataType
    }
}
cs


순수하게 값만 보관하고, 데이터 내부적인 연산은 일체 없습니다.


반응형