설계를 간과하지 말자
코드에 집착하기 보다는 설계를 어떻게 할지 깊게 생각하고 꼭 리뷰어에게 설계한 UML에 대한 조언을 구하자!!
class Data {
static var medianNotation: [String] = []
static var postfixNotation: [String] = []
}
기존에는 타입프로퍼티를 활용하여 계산값을 담아서 사용하였습니다.
그런데 이렇게 사용하면 테스트 여러개를 병렬로 수행할 수 없을 것 같다는 생각이 들었습니다.
또한 테스트를 하는 여러 프로그램에서 동시에 같은 주소를 가진 데이터를 참조하므로 데이터의 초기화가 일어나지않는 것 뿐 아니라 지속적으로 충돌이 일어나는 문제를 겪게됩니다.
이렇게 참조의 늪에 빠질 수 있기 때문에 타입프로퍼티 타입을 지양해야겠다 생각하였습니다.
그래서 아래와 같이 코드를 변경 해 봤습니다.
class Data {
var medianNotation: [String] = []
var postfixNotation: [String] = []
}
이렇게 생성한 데이터를 인스턴스로 만들어서 사용하였습니다.
class InputDataValidator {
var data = Data()
}
Data class를 참조하는 변수 data
를 선언 하였습니다.
class Calculator {
func convertToPostfixNotation(_ input: InputDataValidator) {
if Operators.list.contains(input.data.medianNotation.last!) {
input.data.medianNotation.removeLast()
}
for element in input.data.medianNotation {
distinguishOperatorFromOperand(element, input)
}
appendRemainingOperators(input)
}
}
그런 다음 InputDataValidator클래스 타입을 계산기 클래스 메서드의 매개변수
로 받아서 연산을 진행하였습니다.
이제 참조의 늪에 빠질 걱정 없이 연산을 할 수 있게 되었습니다 🤩