728x90
240307
거의 튜터님이 짠 코드나 다름 없지만 그래도 기록 해야지
Lv2 와 비교하여 어떠한 점이 개선 되었는지 생각해 보기라도 하자
class AddOperation {
func add(_ number1: Double, _ number2: Double) -> Double {
return number1 + number2
}
}
class SubstractOperation {
func substract(_ number1: Double, _ number2: Double) -> Double {
return number1 - number2
}
}
class MultiplyOperation {
func multiply(_ number1: Double, _ number2: Double) -> Double {
return number1 * number2
}
}
class DivideOperation {
func divide(_ number1: Double, _ number2: Double) -> Double {
return number1 / number2
}
}
연산자 클래스를 각각 만들라는 조건이 있었는데
단일책임원칙에 의해서 그런 것 같았다
클래스는 한가지의 동작만 수행하는 것
Calculator 클래스 안에 메소드로 구현하던 코드들을 각 클래스로 생성해 주었다
근데 이걸 어떻게 활용 하는데?
class Calculator {
//프로퍼티 초기화
let addOperation: AddOperation
let substractOperation: SubstractOperation
let multiplyOperation: MultiplyOperation
let divideOperation: DivideOperation
init(add: AddOperation,
substract: SubstractOperation,
multiply: MultiplyOperation,
divide: DivideOperation) {
self.addOperation = add
self.substractOperation = substract
self.multiplyOperation = multiply
self.divideOperation = divide
}
여기서 활용 되는 것이 initialization 즉, 초기화 이다
위에서 만든 클래스들을 인스턴스화 하여서 초기화를 한다
프로퍼티 초기화,,,라고는 하는데 사실 프로퍼티가 뭔지 잘 모름
상수로 선언 해주구,, 초기값을 넣어야 하니 init 해줘,,(--> 단어를 모르겠음 init 생성?)
이름 거지 같이 지으면 힘드니까 다르게 지으십시오
// 더하기
func add(_ number1: Double, _ number2: Double) -> Double {
return addOperation.add(number1, number2)
}
// 빼기
func substract(_ number1: Double, _ number2: Double) -> Double {
return substractOperation.substract(number1, number2)
}
// 곱하기
func multiply(_ number1: Double, _ number2: Double) -> Double {
return multiplyOperation.multiply(number1, number2)
}
// 나누기
func divide(_ number1: Double, _ number2: Double) -> Double {
return divideOperation.divide(number1, number2)
}
// 나머지 연산
func remind(_ number1: Double, _ number2: Double) -> Int {
return Int(number1) % Int(number2)
}
}
이전 게시물에서 연산자를 그대로 넣었던 return 에 인스턴스와 각각 클래스의 메소드 명을 넣은 후 괄호 안에 값을 넣을 속성의 이름을 넣어준다
어디서 불러오는 값인지 궁금하다면 클릭 + cmd 를 누르면 드래그 한 것 마냥 뜨니까
어딜 향하고 있는지 알 수 있다
let calculate = Calculator(add: AddOperation(), substract: SubstractOperation(), multiply: MultiplyOperation(), divide: DivideOperation())
//얘는 print 찍을 떄 보기 편하라고
let addResult = calculate.add(1, 2)// 덧셈 연산
let subtractResult = calculate.substract(3, 4)// 뺄셈 연산
let multiplyResult = calculate.multiply(5, 6)// 곱셈 연산
let divideResult = calculate.divide(7, 8)// 나눗셈 연산
let remindResult = calculate.remind(9, 1)//나머지 연산
print("addResult : \(addResult)") // addResult : 3.0
print("subtractResult : \(subtractResult)") //subtractResult : -1.0
print("multiplyResult : \(multiplyResult)") //multiplyResult : 30.0
print("divideResult : \(divideResult)") //divideResult : 0.875
print("remindResult : \(remindResult)") // remindResult : 0
calculate 에 초기화 하고
값을 넣어보면 계산이 잘 되는걸 볼 수 있다
이전 코드와 다른점을 꼽자면 사실 나는 코드만 길어지고 이게 더 좋은건가? 싶었지만,,
단일책임원칙에 따라서 코드를 작성한 것이
만약 덧셈 코드를 바꾸고 싶다면 그 클래스에 메소드만 수정하면 된다는 점이 활용도 면에서 좋다고 생각했다.
지적과 조언은 언제든 환영 입니다 ~
728x90
'iOS Swift > Study' 카테고리의 다른 글
프로그래머스 Swift 자리수 더하기 (1) | 2024.03.12 |
---|---|
프로그래머스 Swift 배열의 평균값 (0) | 2024.03.11 |
프로그래머스 Swift 짝수의 합 (0) | 2024.03.07 |
Swift 계산기 만들기 1탄 (1) | 2024.03.06 |
프로그래머스 Swift 각도기 문제 (0) | 2024.03.06 |
댓글