๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Swift/๋ฌธ๋ฒ•

Swift์—์„œ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•๋“ค

๐Ÿคจ UI ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ํด๋กœ์ €๋กœ ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ?

์ด ๊ธ€์€ ์œ„ ๊ถ๊ธˆ์ฆ์œผ๋กœ ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•ฑ์„ ๊ฐœ๋ฐœํ•  ๋•Œ UI์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ViewController์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค.

class ViewController: UIViewController {
    
    // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ ์ดˆ๊ธฐํ™”
    let label1 = UILabel()
    
    func configureUI() {
        label1.text = "Hello, World!"
        label1.textColor = .black
        label1.textAlignment = .center
        label1.font = .boldSystemFont(ofSize: 20)
    }
    // ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ ์ดˆ๊ธฐํ™”
    let label2: UILabel = {
        let label = UILabel()
        label.text = "Hello, World!"
        label.textColor = .black
        label.textAlignment = .center
        label.font = .boldSystemFont(ofSize: 20)
        return label
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        configureUI() // ์†์„ฑ ์ดˆ๊ธฐํ™”
    }
}

 

์ œ๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋‘๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

1. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ ์ดˆ๊ธฐํ™”

2. ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ ์ดˆ๊ธฐํ™”

 

๋‘ ๊ฐœ์˜ ์ธ์Šคํ„ด์Šค๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์ดˆ๊ธฐํ™” ์‹œ์ ๋งŒ ๋‹ค๋ฅผ๋ฟ ํฐ ์ฐจ์ด๋Š” ์—†์–ด๋ณด์ž…๋‹ˆ๋‹ค.

๋‹ค๋งŒ ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ์˜๋ฌธ์ด ๋“ค๊ฒŒ๋˜๋Š”๋ฐ์š” ํ•œ๋ฒˆ ์ •๋ฆฌํ•ด๋ด…์‹œ๋‹ค

 

๐Ÿง ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ ํ›„ ์†์„ฑ์„ ์ดˆ๊ธฐํ™” ํ•  ๋•Œ ๊ผญ ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ๋งŒ ํ• ๋‹นํ•ด์•ผํ• ๊นŒ?

์ฒซ๋ฒˆ์งธ ์ดˆ๊ธฐํ™”๋ฐฉ๋ฒ•์—์„œ ์™œ configureUI() ๋ฉ”์„œ๋“œ ์•ˆ์—์„œ ์†์„ฑ์„ ํ• ๋‹นํ•ด์•ผ๋งŒ ํ• ๊นŒ์š”?

์•„๋ž˜์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.

class ViewController: UIViewController {
    
    let label = UILabel()
    label.text = "Hello, World!" // ์ปดํŒŒ์ผ ์—๋Ÿฌ
    label.textColor = .black
    label.textAlignment = .center
    label.font = .boldSystemFont(ofSize: 20)

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

์˜ค๋ฅ˜๋ฅผ ๋ฒˆ์—ญํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 

โ›”๏ธ 1. Consecutive declarations on a line must be separated by ';'

-  ํ•œ ์ค„์— ์—ฐ์†๋œ ์„ ์–ธ์€ ';' ๋กœ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

โ›”๏ธ 2. Expected '(' in argument list of function declaration

- ํ•จ์ˆ˜ ์„ ์–ธ์˜ ์ธ์ˆ˜ ๋ชฉ๋ก์— '(' ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

โ›”๏ธ 3. Expected 'func' keyword in instance method declaration

- ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ ์„ ์–ธ์— 'func' ํ‚ค์›Œ๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

 

โ›”๏ธ 4.Expected declaration / Invalid redeclaration of 'label()'

- ์˜ˆ์ƒ ์„ ์–ธ / 'lable()'์˜ ์ž˜๋ชป๋œ ์žฌ์„ ์–ธ

 

fix๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ๋„ ์—๋Ÿฌ๋Š” ๊ณ ์ณ์ง€์ง€ ์•Š์•˜๋Š”๋ฐ์š”.

์˜ค๋ฅ˜๋“ค์„ ์ข…ํ•ฉํ•ด๋ณด๋‹ˆ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ž˜๋ชป๋œ ๋ฒ”์œ„์—์„œ ์ด๋ฃจ์–ด์กŒ๋‹ค๊ณ  ๋ณด์ž…๋‹ˆ๋‹ค.

์ด๋Š” Class์•ˆ์—์„œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ง์ ‘ ์‹คํ–‰ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

Swift์—์„œ ํด๋ž˜์Šค๋Š” ํ•˜๋‚˜์˜ ์ฒญ์‚ฌ์ง„(blueprint)

Swift๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํด๋ž˜์Šค๋Š” ์‹คํ–‰์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ํ•˜๋‚˜์˜ ์„ค๊ณ„๋„๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

ํด๋ž˜์Šค๋งŒ ์ƒ์„ฑํ•ด์„œ๋Š” ์‹คํ–‰ํ•  ์ˆ˜ ์—†๊ณ  ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•ด์•ผ๋งŒ์ด ํด๋ž˜์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜ค๊ณ  ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ์‹คํ–‰์ด ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ์„ค๊ณ„๋„ ๋‚ด๋ถ€์—์„œ๋Š” ํ”„๋กœํผํ‹ฐ, ๋ฉ”์„œ๋“œ, ์ƒ์„ฑ์ž ๋“ฑ "ํด๋ž˜์Šค ๊ตฌ์„ฑ์š”์†Œ์˜ ์ •์˜"๋งŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๐Ÿง ํด๋กœ์ €๋„ ์ต๋ช…ํ•จ์ˆ˜์ธ๋ฐ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ์‹คํ–‰์‹œํ‚จ๊ฑฐ ์•„๋‹Œ๊ฐ€์š”? 

let label: UILabel = {
        let label = UILabel()
        label.text = "Hello, World!"
        label.textColor = .black
        label.textAlignment = .center
        label.font = .boldSystemFont(ofSize: 20)
        return label
}()

์œ„ ํ•จ์ˆ˜๋ฅผ ๋œฏ์–ด๋ณด๋ฉด label ํ”„๋กœํผํ‹ฐ์˜ ํƒ€์ž…์€ UILabel์ด๊ณ , ์ด๋Š” ํด๋กœ์ €๋‚ด๋ถ€์—์„œ ๋ฆฌํ„ด๋œ label์œผ๋กœ ์ดˆ๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. 

์†Œ๊ด„ํ˜ธ ()๊ฐ€ ์—†๋‹ค๋ฉด ํด๋กœ์ €๋งŒ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ด๊ณ  ์œ„ ์ฝ”๋“œ๋Š” ํด๋กœ์ € ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ์‹คํ–‰์‹œํ‚ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํด๋กœ์ €๋ฅผ ๋ถ„๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜ ์ฝ”๋“œ์™€ ๋น„์Šทํ•ฉ๋‹ˆ๋‹ค.

let configureLabel: () -> UILabel = {
    let label = UILabel()
    label.text = "Hello, World!"
    label.textColor = .black
    label.textAlignment = .center
    label.font = .boldSystemFont(ofSize: 20)
    return label
}

let label: UILabel = configureLabel()

 

 

ํด๋กœ์ €์™€ ํ•จ๊ป˜ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ํด๋กœ์ € ๊ตฌํ˜„ ๋ฐ ์‹คํ–‰๋ถ€๋ถ„์€ ํด๋ž˜์Šค์˜ ๋ฒ”์œ„๊ฐ€ ์•„๋‹ˆ๋ผ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ์˜ ๋ฒ”์œ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ปดํŒŒ์ผ๋Ÿฌ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

๐Ÿง ํด๋กœ์ €๋ž‘ ๋ฉ”์„œ๋“œ๋„ ๊ตฌํ˜„๋งŒ ํ•ด๋†“๊ณ  ์ธ์Šคํ„ด์Šค ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€ ์•Š๋‚˜์š”?

class ViewController: UIViewController {
    
    let configureLabelClosure: () -> UILabel = {
        let label = UILabel()
        label.text = "Hello, World!"
        label.textColor = .black
        label.textAlignment = .center
        label.font = .boldSystemFont(ofSize: 20)
        return label
    }
    
    func configureLabelMethod() -> UILabel {
        let label = UILabel()
        label.text = "Hello, World!"
        label.textColor = .black
        label.textAlignment = .center
        label.font = .boldSystemFont(ofSize: 20)
        return label
    }
    // ์ปดํŒŒ์ผ ์—๋Ÿฌ โ›”๏ธ
    let label1: UILabel = configureLabelMethod()
    let label2: UILabel = configureLabelClosure()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

์œ„ ์ฝ”๋“œ๋Š” UILabel์„ ๋ฆฌํ„ดํ•˜๋Š” ๋‘๊ฐœ์˜ ํด๋กœ์ €์™€ ๋ฉ”์„œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„๋ถ€์™€ ์ƒ์„ฑ๋ถ€๋ถ„์„ ๋‚˜๋ˆ„์–ด ๋ณด์•˜๋Š”๋ฐ ์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

 

โ›”๏ธ Cannot use instance member 'configureLabelMethod' within property initializer; property initializers run before 'self' is available

- ์†์„ฑ ์ดˆ๊ธฐํ™” ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์ธ์Šคํ„ด์Šค ๋ฉค๋ฒ„ 'configureLabelMethod'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์†์„ฑ ์ดˆ๊ธฐํ™” ํ”„๋กœ๊ทธ๋žจ์€ 'self'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ์ „์— ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 

์ด ๋œป์€ ViewControllerํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ์ธ configureLabelMethod๋Š” ViewController๊ฐ€ ์ดˆ๊ธฐํ™”๋œ ํ›„์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ด๋‹น ์ดˆ๊ธฐํ™” ์‹œ์ ์€ ViewController์˜ ์ดˆ๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ์— ViewController์˜ ์ดˆ๊ธฐํ™”๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ์•„์˜ˆ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ๊ตฌ์กฐ์ผ๊นŒ์š”?

์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ํด๋ž˜์Šค๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํด๋ž˜์Šค๊ฐ€ ๋ชจ๋‘ ์ดˆ๊ธฐํ™” ๋œ ํ›„ ์‹คํ–‰๋˜๋„๋ก ๋ช…์‹œํ•˜๋Š” lazyํ‚ค์›Œ๋“œ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class ViewController: UIViewController {
    
    let configureLabelClosure: () -> UILabel = {
        let label = UILabel()
        label.text = "Hello, World!"
        label.textColor = .black
        label.textAlignment = .center
        label.font = .boldSystemFont(ofSize: 20)
        return label
    }
    
    func configureLabelMethod() -> UILabel {
        let label = UILabel()
        label.text = "Hello, World!"
        label.textColor = .black
        label.textAlignment = .center
        label.font = .boldSystemFont(ofSize: 20)
        return label
    }
    // ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™
    lazy var label1: UILabel = configureLabelMethod()
    lazy var label2: UILabel = configureLabelClosure()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

 

 

์ถ”๊ฐ€์ ์œผ๋กœ...

๐Ÿง .init() ์œผ๋กœ๋„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋˜๋ฐ์š”?

์œ„ ๋‘๊ฐ€์ง€ ๊ฒฝ์šฐ ๋ง๊ณ ๋„ .init() ์œผ๋กœ๋„ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class ViewController: UIViewController {
    
    let label: UILabel = .init()
    let customView: UIView = .init()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

 

์ด๋Š” label ํƒ€์ž…์ด UILabel์œผ๋กœ ์ถ”๋ก ๋˜๋ฏ€๋กœ UILabel.init()์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ ์ถ”๋ก ๋œ๋‹ค๋ฉด init ํ˜ธ์ถœ ์•ž์˜ ํ•ด๋‹น ํƒ€์ž…์ด ์ƒ๋žต๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// label ํƒ€์ž…์ด UILabel๋กœ ๋ช…์‹œ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ•ด๋‹น ํด๋ž˜์Šค์˜ init์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.
let label: UILabel = .init()
let label: UILabel = UILabel.init()

// โ›”๏ธ ํ•ด๋‹น ์ฝ”๋“œ๋Š” ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ init์„ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค.
let label = .init()

 

UILabel.init()์€ ๋งˆ์น˜ ์ •์ ๋ฉ”์„œ๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š”๊ฒƒ๊ณผ ๋น„์Šทํ•ด๋ณด์ž…๋‹ˆ๋‹ค.

struct Person {
    let name: String
    let age: Int
    
    static func configurePerson() -> Person {
        return Person(name: "Cheolsun", age: 7)
    }
}

// ๋™์ผํ•˜๊ฒŒ ์ž‘๋™
let person: Person = Person.configurePerson()
let person: Person = .configurePerson()

 

 

 

๐Ÿง  ์ƒ์„ฑ์ž๋Š” ์ •์ (static) ํ•จ์ˆ˜์ธ๊ฐ€์š”?

์ •๋‹ต์€ NO์ž…๋‹ˆ๋‹ค.

์ƒ์„ฑ์ž๋Š” ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“œ๋Š” ํŠน์ˆ˜ํ•œ ๋ฉค๋ฒ„ํ•จ์ˆ˜์ด์ง€๋งŒ ์ •์ ํ•จ์ˆ˜์ฒ˜๋Ÿผ ๋น„์Šทํ•˜๊ฒŒ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.

 

 

 

 

๋‹ค์‹œ ๋ณธ๋ก ์œผ๋กœ ๋Œ์•„์™€

๐Ÿคจ UI ์ปดํฌ๋„ŒํŠธ ์ธ์Šคํ„ด์Šค๋ฅผ ํด๋กœ์ €๋กœ ์ƒ์„ฑํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ?

ํด๋กœ์ €๋กœ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜, ๋ฉ”์„œ๋“œ๋‚˜ ์ƒ์„ฑ์ž๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๊ตฌํ˜„๋ฐฉ์‹์˜ ์ฐจ์ด๋Š” ์žˆ์ง€๋งŒ ์ธ์Šคํ„ด์Šค์˜ ์‚ฌ์šฉ๋ฐฉ์‹์—๋”ฐ๋ผ ์„ ํƒํ•˜๋Š” ๋ฐฉ์‹์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

ํด๋กœ์ €๋กœ ์ƒ์„ฑํ•œ๋‹ค๋ฉด ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ๊ณผ ํ•จ๊ป˜ ์†์„ฑ์ด ์ดˆ๊ธฐํ™”๋˜๋Š” ์žฅ์ ์ด ์žˆ์ง€๋งŒ

์†์„ฑ์ด ์ž์ฃผ ๋ณ€ํ•œ๋‹ค๋ฉด ์ดˆ๊ธฐํ™” ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๋ณ€ํ•˜๋Š” ์‹œ์ ์— ํ˜ธ์ถœํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

'Swift > ๋ฌธ๋ฒ•' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Swift์˜ ํƒ€์ž…๋“ค Types  (0) 2025.03.26
ARC dive deep  (0) 2025.03.21
ํ›„ํ–‰ ํด๋กœ์ €  (0) 2025.03.21
enum์˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ๋ฐฉ๋ฒ•  (0) 2025.03.14
Swift Protocols  (0) 2025.03.11