ν‹°μŠ€ν† λ¦¬ λ·°

μ•ˆλ…•ν•˜μ„Έμš”? 

λ„ˆκ΅¬λ¦¬μž…λ‹ˆλ‹€!

 

μ˜€λŠ˜μ€ ν”„λ‘œν† μ½œμ—μ„œ μ΄ˆκΈ°ν™” ꡬ문 μš”κ΅¬μ‚¬ν•­μ— λŒ€ν•΄

μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€!!

 

 

μ΄ˆκΈ°ν™” ꡬ문 μš”κ΅¬μ‚¬ν•­


μ΄ˆκΈ°ν™”κ΅¬λ¬Έλ„ ν”„λ‘œν† μ½œμ—μ„œ

μš”κ΅¬μ‚¬ν•­μœΌλ‘œ 쀄 수 μžˆλŠ”λ°μš”?

 

이전 ν¬μŠ€νŒ…μ„ 보고 μ˜€μ…¨λ‹€λ©΄ μ•„μ‹œκ² μ§€λ§Œ

ν”„λ‘œν† μ½œμ€ κ°€λŠ₯ κ΅¬ν˜„μ€ μ•ˆν•œλ‹€κ³  ν–ˆμ£ ?

 

μ΄ˆκΈ°ν™”κ΅¬λ¬Έ λ˜ν•œ λ©”μ„œλ“œ ν˜•νƒœμ΄λ‹ˆκΉŒ λ©”μ†Œλ“œ μš”κ΅¬μ‚¬ν•­κ³Ό μ •μ˜ν•˜λŠ”κ²ƒμ΄

λΉ„μŠ·ν•΄μš”!

λ°”λ””λ‚˜ μ€‘κ΄„ν˜Έ μ—†λŠ” ν˜•νƒœλ‘œμš”!!

 

λ°”λ‘œ μ½”λ“œλ‘œ μ •μ˜ν•΄λ³Όκ²Œμš”!!

protocol SomeProtocol {
    init(someParameter: Int)
}

κ°„λ‹¨ν•˜μ£ ?γ…Žγ…Ž

 

 

ν”„λ‘œν† μ½œ μ΄ˆκΈ°ν™” ꡬ문 μš”κ΅¬μ‚¬ν•­μ˜  클래슀 κ΅¬ν˜„


λ‹€μŒμ€ μ΄ˆκΈ°ν™” ꡬ문을 담은 ν”„λ‘œν† μ½œμ„ ν΄λž˜μŠ€μ—μ„œ 

μ€€μˆ˜ν•˜λ„λ‘ ν•˜λŠ” λ‚΄μš©μ΄μ—μš”!!

 

 

κΆκΈˆν•˜λ‹ˆκΉŒ λ°”λ‘œ ν΄λž˜μŠ€μ— ν”„λ‘œν† μ½œμ„ μ±„νƒμ‹œμΌœ λ³Όκ²Œμš”!!

근데  requiredλΌλŠ” μˆ˜μ‹μ–΄κ°€ λΆ™μ—ˆμŠ΅λ‹ˆλ‹€!!

μ΄μΉœκ΅¬λŠ” λ­˜κΉŒμš”...?

 

 

κ³΅μ‹λ¬Έμ„œλ₯Ό 확인해보면

required μˆ˜μ‹μ–΄μ™€ ν•¨κ»˜ μ΄ˆκΈ°ν™” ꡬ문 κ΅¬ν˜„μ— ν‘œμ‹œν•΄μ•Όν•œλ‹€.

required μˆ˜μ‹μ–΄λ₯Ό μ‚¬μš©ν•˜λ©΄ μ€€μˆ˜ν•˜λŠ” λͺ¨λ“  ν•˜μœ„ν΄λž˜μŠ€μ— μ΄ˆκΈ°ν™” ꡬ문 μš”κ΅¬μ‚¬ν•­μ˜ λͺ…μ‹œμ  λ˜λŠ” μƒμ†λœ κ΅¬ν˜„μ„ μ œκ³΅ν•˜μ—¬

ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•  수 μžˆλ‹€.

λΌλŠ” λ‚΄μš©μ΄ μžˆλ„€μš”!!

 

 

그런데 κΆκΈˆν•œ 점이 μƒκ²Όμ–΄μš”

λ§Œμ•½ μ΄ˆκΈ°ν™” ꡬ문이 μžˆλŠ” λΆ€λͺ¨ν΄λž˜μŠ€μ™€ μ΄ˆκΈ°ν™” μš”κ΅¬μ‚¬ν•­μ΄ μžˆλŠ” ν”„λ‘œν† μ½œμ„ 

λ™μ‹œμ— μƒμ†ν•˜λ©΄ μ–΄λ–»κ²Œ 될까...?

 

κΆκΈˆν•˜λ‹ˆκΉŒ λ°”λ‘œ ν•΄λ³Όκ²Œμš”!!

μ €λ²ˆ μ‹œκ°„μ— ν™•μΈν•΄λ³Έκ²ƒμ²˜λŸΌ ν΄λž˜μŠ€μ™€ ν”„λ‘œν† μ½œμ„ λ™μ‹œμ— 상속할 λ•Œ

클래슀λ₯Ό λ¨Όμ € λ°°μΉ˜ν•΄ μ€λ‹ˆλ‹€~

그럼 κ·Έλƒ₯ μ—λŸ¬κ°€ λ‚¬λŠ”λ°

음.. 뭐지?

μžλ™μ™„μ„±μ΄ μ—†λ„€?γ…‹γ…‹γ…‹γ…‹γ…‹

 

일단 requiredμˆ˜μ‹μ–΄λ₯Ό μ‚¬μš©ν•΄μ„œ init()λ©”μ†Œλ“œλ₯Ό μž‘μ„±ν•˜λ©΄

overrideμˆ˜μ‹μ–΄λ„ 같이 λ”Έλ €μ˜€λ„€μš”!

이것도 κ³΅μ‹λ¬Έμ„œλ₯Ό 톡해 확인해 λ³΄μ•˜λŠ”λ°μš”~

μ΄λ ‡κ²Œ ν΄λž˜μŠ€μ™€ ν”„λ‘œν† μ½œμ„ 같이 상속받을 경우

required와 overrideμˆ˜μ‹μ–΄λ₯Ό 같이 μž‘μ„±ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€κ³  ν•©λ‹ˆλ‹€!

 

 

νƒ€μž…μœΌλ‘œ ν”„λ‘œν† μ½œ


ν”„λ‘œν† μ½œμ„ νƒ€μž…μœΌλ‘œ μ“΄λ‹€???

 

ν”„λ‘œν† μ½œμ—μ„œλŠ” μ–΄λ– ν•œ κΈ°λŠ₯도 κ΅¬ν˜„ν•˜μ§€ μ•Šμ§€λ§Œ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ‹€ ν•˜λŠ”λ°μš”..

κ³΅μ‹λ¬Έμ„œμ—μ„œλŠ” 

νƒ€μž…μœΌλ‘œ ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜λŠ” 것은 "ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λŠ” νƒ€μž… Tκ°€ μ‘΄μž¬ν•œλ‹€" λΌλŠ” κ΅¬μ ˆμ—μ„œ λΉ„λ‘―λœ 쑴재 νƒ€μž… (existential type) 이라고 ν•©λ‹ˆλ‹€.

 

이거... 뭔말이지...?

이해가 1도 μ•ˆκ°€λ„€μš”..γ… 

κ·Έλž˜μ„œ λ¨Όμ € 예제 μ½”λ“œλ₯Ό λ³΄λ©΄μ„œ 이해해 λ³ΌκΉŒν•©λ‹ˆλ‹€!

μ½”λ“œλŠ” λ§ˆμ°¬κ°€μ§€λ‘œ κ³΅μ‹λ¬Έμ„œμ—μ„œ κ°€μ§€κ³  μ™”μŠ΅λ‹ˆλ‹€!

// μ£Όμ‚¬μœ„ 랜덀 번호 생성 ν”„λ‘œν† μ½œ
protocol RandomNumberGenerator {
    func random() -> Double
}

// ν”„λ‘œν† μ½œ 채택
class LinearCongruentialGenerator: RandomNumberGenerator {
    var lastRandom = 42.0
    let m = 139968.0
    let a = 3877.0
    let c = 29573.0
    // ν”„λ‘œν† μ½œ μ€€μˆ˜
    func random() -> Double {
        lastRandom = ((lastRandom * a + c)
            .truncatingRemainder(dividingBy:m))
        return lastRandom / m
    }
}
// μΈμŠ€ν„΄μŠ€ 생성
let generator = LinearCongruentialGenerator()

// 클래슀 μ •μ˜
class Dice {
    let sides: Int
    // ν”„λ‘œν† μ½œ νƒ€μž…μœΌλ‘œ μ‚¬μš©
    let generator: RandomNumberGenerator
    init(sides: Int, generator: RandomNumberGenerator) {
        self.sides = sides
        self.generator = generator
    }
    func roll() -> Int {
        return Int(generator.random() * Double(sides)) + 1
    }
}

var d6 = Dice(sides: 6, generator: LinearCongruentialGenerator())
for _ in 1...5 {
    print("Random dice roll is \(d6.roll())")
}
// Random dice roll is 3
// Random dice roll is 5
// Random dice roll is 4
// Random dice roll is 5
// Random dice roll is 4

 

ν”„λ‘œν† μ½œ μ •μ˜ -> ν”„λ‘œν† μ½œ 채택 및 μ€€μˆ˜ ν•˜λŠ” ν΄λž˜μ„œ μ •μ˜ -> 클래슀 μΈμŠ€ν„΄μŠ€(generator) 생성 -> ν”„λ‘œν† μ½œ νƒ€μž… ν”„λ‘œνΌν‹°λ₯Ό κ°€μ§€λŠ” μ£Όμ‚¬μœ„ ν΄λž˜μ„œ μ •μ˜ -> μ£Όμ‚¬μœ„ ν΄λž˜μ„œ μΈμŠ€ν„΄μŠ€ 생성 ν›„ generator둜 ν”„λ‘œν† μ½œ νƒ€μž… ν”„λ‘œνΌν‹° μ΄ˆκΈ°ν™”

 

이런 ν”Œλ‘œμš°λ‘œ μ˜ˆμ œκ°€ κ΅¬μ„±λ˜μ–΄ μžˆλŠ”λ°μš”!

예제λ₯Ό λ³΄λ‹€λ³΄λ‹ˆκΉŒ λ¬΄μŠ¨λ§μΈμ§€ μ•Œκ² λ„€μš”!!

 

ν”„λ‘œν† μ½œμ€ 아무 κΈ°λŠ₯을 μ •μ˜ν•  수 μžˆμ§€λ§Œ ν”„λ‘œν† μ½œμ„ μ±„νƒν•œ ν΄λž˜μŠ€λ‚˜ ꡬ쑰체 λ˜λŠ” μ—΄κ±°ν˜•μ—μ„œ

ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λ„λ‘ κΈ°λŠ₯을 μ •μ˜ν•˜κ³ 

이것을 μΈμŠ€ν„΄μŠ€λ‘œ μƒμ„±ν•˜μ—¬ νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•œλ‹€λ©΄!!!!

νƒ€μž…μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλ„€μš”!!

 

μ—­μ‹œ κΈ€λ‘œ 이해λͺ»ν•˜λ©΄ μ½”λ“œλΆ€ν„° ν™•μΈν•˜μž!!!

 

그럼 μ•žμ„œ λ§ν–ˆλ˜ "ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λŠ” νƒ€μž… Tκ°€ μžˆλ‹€."λΌλŠ” 문ꡬ가

무슨 μ˜λ―Έμ—μ„œ μ–ΈκΈ‰λœ 것인지 λ°”λ‘œ 이해가 λ˜λ„€μš”!!

 

 

 

 

 

 

 

 

 

휴 였늘 ν”„λ‘œν† μ½œμ— λŒ€ν•΄ μ •λ¦¬ν•˜λŠ” 글을 λ§ˆλ¬΄λ¦¬ν•  수 μžˆμ—ˆλŠ”λ°μš”!!

사싀 ν”„λ‘œν† μ½œμ— λŒ€ν•΄ 더 κΆκΈˆν•œκ²Œ μžˆλŠ”λ° 이건 λ²ˆμ™Έλ‘œ κ³΅λΆ€ν•΄λ³ΌκΉŒ ν•΄μš”!

λΆ€λΆ„λΆ€λΆ„ κΆκΈˆν•œκ²Œ μžˆμ–΄μ„œγ…Žγ…Ž

 

ν˜Ήμ‹œ ν‹€λ¦° λΆ€λΆ„μ΄λ‚˜ μˆ˜μ •ν•΄μ•Όν•  뢀뢄이 μžˆλ‹€λ©΄ μ•Œλ €μ£Όμ‹œλ©΄ 

큰 도움이 λ κ²ƒκ°™μ•„μš”~~γ…Žγ…Ž

 

 

μ˜€λŠ˜λ„ κΈ€ μ½μ–΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

 

 

 

 

 

λŒ“κΈ€
곡지사항
μ΅œκ·Όμ— 올라온 κΈ€
μ΅œκ·Όμ— 달린 λŒ“κΈ€
Total
Today
Yesterday
링크
Β«   2026/03   Β»
일 μ›” ν™” 수 λͺ© 금 ν† 
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
κΈ€ 보관함