VesselWheel

Calculator in playground 본문

Xcode Study

Calculator in playground

JasonYang 2023. 11. 30. 21:04
//
//  ContentView.swift
//  Calculator with class
//
//  Created by t2023-m0006 on 11/29/23.
//
import Foundation

class Calculator {
    /*강제 해제(Force Unwrapping)되지 않는 옵셔널 초기화
      옵셔널 타입을 가진 속성은 선언과 동시에 초기화되거나 나중에 값을 할당할 수 있다.
     */
 var firstNumber : Double?
 var secondNumber : Double?

        //덧셈
        func AddOperation(_ firstNumber: Double, _ secondNumber: Double) -> Double {
            return firstNumber + secondNumber
        }
        
        //뺄샘
        func SubtractOperation(_ firstNumber: Double, _ secondNumber: Double) -> Double {
            return firstNumber - secondNumber
        }
        
        //곱셉
        func MultiplyOperation(_ firstNumber: Double, _ secondNumber: Double) -> Double {
            return firstNumber * secondNumber
        }
        
        //나눗셈
        func DivideOperation(_ firstNumber: Double, _ secondNumber: Double) -> Double? {
            guard secondNumber != 0 else {
                print("0으로 나눌 수 없어요.")
                return nil
            }
            return firstNumber / secondNumber
        }
        /*
        //나머지
        func remain(_ firstNumber: Int, _ secondNumber: Int) -> Int {
            return firstNumber % secondNumber
        } */
    
}
//덧셈 연산 클래스 + 부모 매소드
/*
 - keyword `super`
     - **`super`** 키워드는 자식 클래스에서 부모 클래스의 메서드, 속성 또는 초기화 메서드를 호출할 때 사용됩니다.
     - 부모 클래스의 메서드를 호출하거나 부모 클래스의 초기화 메서드를 호출하는 데 사용됩니다.
     - **`super.method()`** 또는 **`super.property`*와 같이 사용하여 부모 클래스의 기능을 호출할 수 있습니다.
 */
class AddOperation: Calculator {
    
    func operate(_ firstNumber: Double, _ secondNumber: Double) -> Double {
        return super.AddOperation(firstNumber, secondNumber)
    }
}

// 뺄셈 연산 클래스
class SubtractOperation: Calculator {
    func operate(_ firstNumber: Double, _ secondNumber: Double) -> Double {
        return super.SubtractOperation(firstNumber, secondNumber)
    }
}

// 곱셈 연산 클래스
class MultiplyOperation: Calculator {
    func operate(_ firstNumber: Double, _ secondNumber: Double) -> Double {
        return super.MultiplyOperation(firstNumber, secondNumber)
    }
}

// 나눗셈 연산 클래스
class DivideOperation: Calculator {
    func operate(_ firstNumber: Double, _ secondNumber: Double) -> Double? {
        return super.DivideOperation(firstNumber, secondNumber)
    }
}

let calculator = Calculator()


let addOperation = AddOperation()
let addResult = addOperation.operate(45, 23)

let subtractOperation = SubtractOperation()
let subtractResult = subtractOperation.operate(523, 323)

let multiplyOperation = MultiplyOperation()
let multiplyResult = multiplyOperation.operate(532, 2)

let divideOperation = DivideOperation()
let divideResult = divideOperation.operate(100, 2)


print("addResult : \(addResult)")
print("subtractResult : \(subtractResult)")
print("multiplyResult : \(multiplyResult)")
print("divideResult : \(divideResult)")

 

1. 부모 클래스인 Calculator를 옵셔널로 인스턴스를 초기화하고 세부 매소드로 사칙연산을 구현

2. 자식 클래스인 개별 책임으로 각각의 사칙연산 클래스에 부모클래스의 매소드를 super 키워드로 가져와 초기화 매소드를 호출함

3. Calculator() 클래스를 인스턴스화 하기 위해 calculator 매개상수(인스턴스)로 만듬

4. 마찬가지로, 자식클래스(AddOperation(), SubtractOperation(), MultiplyOperation(), DividOperation())들도 각각의 인스턴스화 하여 객체화함

5. 객체화 한 매소드에 동일 operate, 각각의 매소드(부모클래스에서 호출한)에 참조값을 넣어 변환함

'Xcode Study' 카테고리의 다른 글

키오스크 프로그램과 클로져  (0) 2023.12.05
Mutating Keyword  (0) 2023.12.05
Xcode의 StoryBoard가 xml 화면으로 나올 때  (0) 2023.11.24
UITableViewCell  (0) 2023.11.24
고차함수(Map, filter, reduce)  (1) 2023.11.21