-
Notifications
You must be signed in to change notification settings - Fork 0
π νΈλ¬λΈ μν
// LinkedList
struct LinkedList<T: CalculateItem> {
class Node<T: CalculateItem> {
fileprivate var value: T
fileprivate var next: Node?
fileprivate init(_ value: T, next: Node? = nil) {
self.value = value
self.next = next
}
}
}
// CalculatorItemQueue
struct CalculatorItemQueue<T: CalculateItem> {
private var list: LinkedList<T> = LinkedList<T>()
}
λ¬Έμ π»
-
LinkedList
νμ μ μΈλΆμμ μ§μ μ μΌλ‘ μ κ·Όνλ μν©μ λ°©μ§νκ³ μ μλνλ₯Ό μν΄CalculatorItemQueue
νμ μlist
νλ‘νΌν°μLinkedList
νμ μ μ κ·Όμ μ΄λ₯Ό νλ €κ³ νμμ΅λλ€. νμ§λ§ TDD ν μ€νΈ μμλLinkedList
νμ μ μ κ·Όμ΄ λΆκ°λ₯ν λ¬Έμ κ° λ°μνμμ΅λλ€.
ν΄κ²° π«
-
CalculatorItemQueue
νμ μLinkedList
νμ μlist
νλ‘νΌν°λ₯Ό κ°μ§κ³ μκ³ ,CalculatorItemQueue
νμ μ λ©μλλlist
νλ‘νΌν°λ‘ μ€νκ°λ₯ν λ©μλ(LinkedList
νμ μμ μ μλ μΈμ€ν΄μ€ λ©μλ)λ₯Ό νΈμΆνκ³ μμμ΅λλ€. - μ΄λ° κ²½μ°,
CalculatorItemQueue
νμ μ λ©μλλ§μ ν μ€νΈ ν΄λ κ·Έ λ©μλκ° νΈμΆνλ λ©μλκΉμ§ test coveregeκ° μ±μμ§λ€λ κ²μ μκ² λμμ΅λλ€. - κ²°κ΅,
CalculatorItemQueue
νμ λ§μ ν μ€νΈ ν΄λ coveregeμλ λ¬Έμ κ° μκΈ° λλ¬ΈμLinkedList
νμ μ λ€μ μ κ·Όμ μ΄ νλ κ²μΌλ‘ ν΄κ²°νμμ΅λλ€.
extension String {
private var numberFormatter: NumberFormatter {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.usesSignificantDigits = true
numberFormatter.maximumSignificantDigits = 20
return numberFormatter
}
func addComma() -> String {
guard Double(self) != nil, let result = numberFormatter.string(for: Double(self)) else { return self }
return result
}
func addCommaInteger() -> String {
let components: [String] = self.components(separatedBy: ExpressionText.dot)
guard let integerPart = numberFormatter.string(for: Double(components[0])) else { return self }
if components.count >= 2 {
return integerPart + ExpressionText.dot + components[1]
} else {
return integerPart
}
}
}
λ¬Έμ π»
- λλ² ν¬λ§·ν°λ₯Ό μ¬μ© μ체λ μ΄λ ΅μ§ μμμ΅λλ€. νμ§λ§ νΌμ°μ°μλ₯Ό μ λ ₯ν λ μ λ ₯κ°μ λ°λ‘ λλ² ν¬λ§·ν°λ₯Ό μ μ©νλ©΄ μμμ λ°μΌλ‘ 0μ μ°μμΌλ‘ μ λ ₯ν μ μλ΅ν΄λ²λ¦¬λ λ¬Έμ κ° μμκ³ , μ΄λ₯Ό μ μ©νμ§ μμΌλ©΄ μ λ ₯κ°μ μ½€λ§(,)κ° μ°νμ§ μλ λ¬Έμ κ° μμμ΅λλ€.
ν΄κ²° π«
- μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄, λ°λ‘ λλ² ν¬λ§·ν°λ₯Ό μ μ©νλ λ©μλμ μμ«μ λ·λΆλΆμ λλ² ν¬λ§·ν°λ₯Ό μ μ©νμ§ μκ³ μλΆλΆλ§ μ μ©ν ν ν©μΉλ λ©μλλ₯Ό κ°κ° ꡬννμ¬ ν΄κ²°νμμ΅λλ€.
λ¬Έμ π»
- λ³ν© μμ μ μ§ννλ©΄μ, ν μ€νΈ νμΌμ μ΄λ»κ² μ²λ¦¬ν΄μΌ νλμ§ μ νλ¨μ΄ μμ§ μμμ΅λλ€. κ°μμ λ‘μ§μ λ§κ² ν μ€νΈ νμΌμ μμ±νλ€λ³΄λ λ³ν©νλ κ³Όμ μμ ν μ€νΈλ₯Ό λ€μ μμ ν΄μΌ νλ κ²½μ°κ° λ§μ΄ λ°μνμμ΅λλ€.
ν΄κ²° π«
-
ν μ€νΈ μΌμ΄μ€μ ꡬνμ΄ μλ ν μ€νΈμ λͺ©μ μ μ§μ€νκΈ°λ‘ νμ΅λλ€. ν μ€νΈμ λͺ©μ μ΄ κ°λ€λ©΄ κ·Έ ν μ€νΈ λ΄λΆμ ꡬνμ΄ λ€λ₯Ό μ μμ΄λ λͺ©μ μ κ°κΈ°μ μ’ λ κ°λ μ±μ΄λ λ‘μ§μ΄ κΉλν μ¬λμ ν μ€νΈλ₯Ό μ¬μ©νκΈ°λ§ νλ©΄ λμμ΅λλ€.
-
μ΄λ° λ°©ν₯μ±μ κ°μ§κ³ ν μ€νΈμ½λμ λ³ν©μ μ§ννμκ³ , μλ‘μ΄ ν μ€νΈ μΌμ΄μ€κ° νμν μ ν μ€νΈμ½λλ₯Ό μΆκ°νλ λ°©μμΌλ‘ μ§ννμ¬ λ¬Έμ λ₯Ό ν΄κ²°νμμ΅λλ€.
λ¬Έμ π»
-
ViewController
μ κ²½μ°, νλ‘μ νΈμμ λ°λ‘ UMLμ μ μνμ μμμ΅λλ€. - κ·Έ κ²°κ³Ό, κ°μμ λ°©λ²κ³Ό μκ°μΌλ‘ ꡬνλμ΄ λ€μ΄λ° 컨벀μ , λ‘μ§, λ©μλλ νλ‘νΌν°μ μ¬μ©μ μμ΄μ κ°μμ λ°©λ²μ΄ λ Ήμλ€μ΄ μλ μ½λκ° μμ±λμμ΅λλ€.
- μ΄ κ°μμ μκ°μ΄ λ
Ήμμ Έ μλ
ViewController
λ₯Ό λ³ν©νκΈ° μν΄ ν΅μΌλ νλμ κΈ°μ€μ΄ νμνμ΅λλ€.
ν΄κ²° π«
-
μ ν¬κ° μ 리ν κΈ°μ€μ λ€μκ³Ό κ°μμ΅λλ€.
- νλμ λ©μλκ° νλμ μμ μ μννλλ‘ κΈ°λ₯λΆλ¦¬κ° μ λμ΄μμ κ².
- μμΈμ²λ¦¬κ° κ°λ μ± μ’κ² μ μ΄λ£¨μ΄μ Έ μμ κ².
- λ³ν© κ³Όμ μμ μμΈμ²λ¦¬μ μ€λ₯κ° μκΈ°μ§ μλλ‘ ν κ².
- μμ€νμΌμ μΆκ°νκ±°λ μ κ±°ν κ²½μ°, μΆκ° νΉμ μ κ±°μ μ¬μ΄λ μ΄ν©νΈκ° μ κ² μΌμ΄λκ³ , μ μ¬νλ€μ΄ μ μ§μΌμ§λ λ°©ν₯μΌλ‘ μνν κ².
- μ€λ³΅λλ λ©μλμ κ²½μ°, μ μ¬νλ€μ΄ μ μ§μΌμ§λ λ‘μ§μ μ±ννκ±°λ λ μ½λμ λ‘μ§μ ν©μΉλ 리ν©ν λ§μ μ§νν΄ μ μ¬νλ€μ λ§μ‘±νλ λ©μλλ₯Ό μ±νν κ².
-
λ€μκ³Ό κ°μ κΈ°μ€μ κ°μ§κ³ λ³ν©μ μ§ννμκ³ , λ³ν©μ μμ΄μ λΉ λ₯΄κ² μ·¨μ¬μ νμ ν μ μμμ΅λλ€.