✏️ TIL

[ TIL ] μ‹€νŒ¨λŠ” μ„±κ³΅μ˜ μ–΄λ¨Έλ‹ˆλΌκ³  ν–ˆλ‹€.. ( μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ… ) / 24λ…„ 3μ›” 6일

EarthSea 2024. 3. 7. 21:52

μ˜€λŠ˜λ„ 9μ‹œκ°€ λ„˜μ–΄μ„œμ•Ό TIL을 μž‘μ„±ν•˜κ΅¬ μžˆλ„€μš”..!

λ„ˆλ¬΄ 집쀑이 μ•ˆλ˜μ„œ 컀피 μˆ˜ν˜ˆμ„ 쑰금 ν–ˆλŠ”λ°..

심μž₯이 μΏ΅! μΎ…! μΏ΅! μΎ…! κ³Όλ‹€ 카페인 μ„­μ·¨λ₯Ό ν•œ κ±° κ°™μ•„μš”..

λͺΈμ΄ μ•„μ£Ό λ¬΄λ¦¬λ°μŠ€λ„€

κ·Έλ ‡κ²Œ 였늘 저녁은 νŒ¨μŠ€μž…λ‹ˆλ‹€μš”..

 


 

λ‹€μš΄μΊμŠ€νŒ… Error

과제λ₯Ό ν’€λ‹€κ°€ λ‹€μš΄ μΊμŠ€νŒ…μ„ μ‚¬μš©ν•΄μ„œ κΈ°κΉ”λ‚˜κ²Œ λ§ˆλ¬΄λ¦¬ν•˜λ €κ³  ν–ˆλŠ”λ°.. 반볡적으둜 μƒκΈ°λŠ” 였λ₯˜!

λŒ€μ²΄ 뭐가 λ¬Έμ œμΈμ§€ λͺ¨λ₯΄κ² μ–΄μ„œ ꡬ글링을 κ±°μ³μ„œ λ‹€μš΄ μΊμŠ€νŒ…κ³Ό μ—… μΊμŠ€νŒ…λΆ€ν„° λ‹€μ‹œ κ³΅λΆ€ν•©λ‹ˆλ‹€.

 

μ—…μΊμŠ€νŒ…(Upcasting)κ³Ό λ‹€μš΄μΊμŠ€νŒ…(Downcasting)

두 단어 λͺ¨λ‘ 클래슀의 상속과 κ΄€λ ¨λœ μš©μ–΄λ‘œ λΆ€λͺ¨ν΄λž˜μŠ€μ™€ μžμ‹ν΄λž˜μŠ€ μ‚¬μ΄μ˜ νƒ€μž… λ³€ν™˜μ„ μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

 

μ—…μΊμŠ€νŒ…μ΄λž€?
ν•˜μœ„ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό μƒμœ„ 클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것
  • [ν•˜μœ„ 클래슀의 μΈμŠ€ν„΄μŠ€] as [μƒμœ„ 클래슀]
  • μ•ˆμ „ν•˜κ²Œ 진행할 수 μžˆμ–΄ λ”°λ‘œ 검사가 ν•„μš”ν•˜μ§€ μ•Šλ‹€.

 

λ‹€μš΄μΊμŠ€νŒ…μ΄λž€?
μƒμœ„ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό ν•˜μœ„ 클래슀 νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•˜λŠ” 것

 

λ‹€μš΄μΊμŠ€νŒ…μ€ 항상 μ•ˆμ „ν•˜κ²Œ 진행될 수 μ—†κΈ° λ•Œλ¬Έμ— 였λ₯˜κ°€ 생길 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

μ˜΅μ…”λ„ 바인딩을 ν•˜λŠ” 것과 같이 μΊμŠ€νŒ…ν•˜λŠ” 방법이 두 가지 μ‘΄μž¬ν•©λ‹ˆλ‹€.

 

 

1. as! (κ°•μ œ λ‹€μš΄ 캐슀트)

  • [μƒμœ„ 클래슀의 μΈμŠ€ν„΄μŠ€] as! [ν•˜μœ„ 클래슀]
  • κ°•μ œλ‘œ μ—…λž˜ν•‘μ„ ν•˜λŠ” κ±°λ‹€ λ³΄λ‹ˆ λŸ°νƒ€μž„ μ‹œμ μ—μ„œ λ‹€μš΄ 캐슀트λ₯Ό μ„±κ³΅ν•˜μ§€ λͺ»ν–ˆλ‹€λ©΄ μ—λŸ¬κ°€ λ‚©λ‹ˆλ‹€.

2. as? (μ•ˆμ „ν•œ λ‹€μš΄ 캐슀트)

  • [μƒμœ„ 클래슀의 μΈμŠ€ν„΄μŠ€] as? [ν•˜μœ„ 클래슀]
  • λŸ°νƒ€μž„ μ‹œμ μ—μ„œ λ‹€μš΄ μΊμŠ€νŒ…μ„ μ§„ν–‰ν•˜λŠ”λ° μ„±κ³΅ν•˜μ§€ λͺ»ν–ˆλ‹€λ©΄ nil을 λ°˜ν™˜> μ˜΅μ…”λ„ νƒ€μž…μœΌλ‘œ 지정해주어야함!

 

ν•΄κ²°

μ œκ°€ μ—λŸ¬κ°€ λ‚œ 뢀뢄을 λ‹€μ‹œ ν™•μΈν•΄λ³΄λ‹ˆ μ €λŠ” κ°•μ œ λ‹€μš΄ 캐슀트λ₯Ό 진행을 ν–ˆλŠ”λ° λŸ°νƒ€μž„ μ‹œμ μ—μ„œ μ„±κ³΅ν•˜μ§€ λͺ»ν•΄μ„œ μ—λŸ¬κ°€ λ‚¬μŠ΅λ‹ˆλ‹€.

  • 클래슀 μ„ μ–ΈλΆ€
class AbstractOperation {
    func calculate(_ firstNumber: Int ,_ secondNumber: Int) -> Double {
        return 0.0
    }
}

class AddOperation4: AbstractOperation {
    override func calculate(_ firstNumber: Int ,_ secondNumber: Int) -> Double {
        return Double(firstNumber + secondNumber)
    }
}

class SubtractOperation4: AbstractOperation {
    override func calculate(_ firstNumber: Int ,_ secondNumber: Int) -> Double {
        return Double(firstNumber - secondNumber)
    }
}

class MultiplyOperation4: AbstractOperation {
    override func calculate(_ firstNumber: Int ,_ secondNumber: Int) -> Double {
        return Double(firstNumber * secondNumber)
    }
}

class DivideOperation4: AbstractOperation {
    override func calculate(_ firstNumber: Int ,_ secondNumber: Int) -> Double {
        return Double(firstNumber) / Double(secondNumber)
    }
}

class ModulusOperation4: AbstractOperation {
    override func calculate(_ firstNumber: Int ,_ secondNumber: Int) -> Double {
        return Double(firstNumber % secondNumber)
    }
}
  • λ‹€μš΄μΊμŠ€νŒ…ν•˜μ—¬ μœ„μ˜ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό ν™œμš©ν•˜λ €λŠ” 클래슀
class Calculator4 {

    var firstNumber: Int = 0
    var secondNumber: Int = 0
    var op: Character?

    init(firstNumber: Int, secondNumber: Int, op: Character? = nil) {
        self.firstNumber = firstNumber
        self.secondNumber = secondNumber
        self.op = op
    }

    func calculate() -> Double {

        var operation = AbstractOperation()

        // 🚨Error
        if op == "+" { operation as! AddOperation4 }
        else if op == "-" { operation as! SubtractOperation4 }
        else if op == "/" { operation as! DivideOperation4 }
        else if op == "*" { operation as! MultiplyOperation4 }
        else if op == "%" { operation as! ModulusOperation4 }
        else { return 0.0 }

        return operation.calculate(firstNumber, secondNumber)
    }
}
  • Calculator4의 μΈμŠ€ν„΄μŠ€λ₯Ό λ§Œλ“€μ–΄ ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό μ΄μš©ν•΄ κ°’ 좜λ ₯
let calculator4 = Calculator4(firstNumber: 30, secondNumber: 6, op: "+")
let addResult = calculator4.calculate()
print("addResult : \(addResult)")

 

μœ„μ˜ μ½”λ“œλŠ” addResultμ—μ„œ " error: execution was interrupted, reason: signal sigabrt. the process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation. " 이런 μ—λŸ¬κ°€ λ‚˜λ”λΌκ΅¬μš”. κ°•μ œ λ‹€μš΄ μΊμŠ€νŒ…μ— μ‹€νŒ¨ν–ˆμ„ λ•Œ λœ¨λŠ” μ—λŸ¬λΌκ³  ν•©λ‹ˆλ‹€.

μš°μ„  μ—…μΊμŠ€νŒ…κ³Ό λ‹€μš΄μΊμŠ€νŒ…μ„ κ³΅λΆ€ν•˜κ³  λ‹€μ‹œ λ΄€λ”λ‹ˆ μ œκ°€ λ‚œ 였λ₯˜λŠ” λ‹¨μˆœνžˆ λ‹€μš΄ μΊμŠ€νŒ…λ•Œλ¬Έμ— λ‚œ 였λ₯˜κ°€ μ•„λ‹ˆλ”λΌκ΅¬μš”.. κ°œλ…μ μœΌλ‘œ ν’€ 수 μ—†λŠ” λ°©λ²•μœΌλ‘œ ν’€λ €κ³  μ‹œλ„ν–ˆλ”λ‹ˆ μ•ˆλ˜μ§€..

κ·Έλž˜λ„ ν˜Ήμ‹œλ‚˜ ν˜Ήμ‹œλ‚˜ κ°€λŠ₯ν•  μˆ˜λ„ μžˆμœΌλ‹ˆ 내일 νŠœν…¨λ‹˜κ»˜ μ§ˆλ¬Έμ„ κΌ­ ν•΄λ΄μ•Όκ² μ–΄μš”!

Calculator4의 calculate() λ©”μ„œλ“œλ₯Ό μ΄λ ‡κ²Œ κ³ μ³€λ”λ‹ˆ 해결이 λ˜μ—ˆμŠ΅λ‹ˆλ‹€!

func calculate() -> Double {

// 		  🚨Error
//        var operation = AbstractOperation()
//        if op == "+" { operation as! AddOperation4 }
//        else if op == "-" { operation as! SubtractOperation4 }
//        else if op == "/" { operation as! DivideOperation4 }
//        else if op == "*" { operation as! MultiplyOperation4 }
//        else if op == "%" { operation as! ModulusOperation4 }
//        else { return 0.0 }

        guard let op = op else { return 0.0 }

        switch op {
        case "+" :
            return AddOperation4().calculate(firstNumber, secondNumber)
        case "-" :
            return SubtractOperation4().calculate(firstNumber, secondNumber)
        case "/" :
            return DivideOperation4().calculate(firstNumber, secondNumber)
        case "*" :
            return MultiplyOperation4().calculate(firstNumber, secondNumber)
        case "%" :
            return ModulusOperation4().calculate(firstNumber, secondNumber)
        default :
            print("계산기에 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” μ—°μ‚°μžμž…λ‹ˆλ‹€.")
            return 0.0
        }
    }

 

 

[ 내일 ν•΄κ²°ν•΄μ•Ό ν•  문제 ]

❎ ν•œκ°€μ§€μ˜ λ³€μˆ˜μ— λΆ€λͺ¨ 클래슀의 μΈμŠ€ν„΄μŠ€λ₯Ό λŒ€μž…ν•˜κ³ , κ·Έ λ³€μˆ˜λ₯Ό μžμ‹ 클래슀둜 λ‹€μš΄μΊμŠ€νŒ…ν•˜μ—¬ λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λ €κ³  ν•  λ•Œ, κ²½μš°μ— 따라 λ‹€λ₯Έ λ‹€μš΄ μΊμŠ€νŒ…μ„ ν•˜μ—¬ μ§„ν–‰ν•˜λ©΄ μ•ˆλ˜λŠ”μ§€.. μ•ˆλœλ‹€λ©΄ μ™œ μ•ˆλ˜λŠ”μ§€..!!!!

 

 

μ°Έκ³ ν•œ λΈ”λ‘œκ·Έ πŸ“„ https://babbab2.tistory.com/127