๐ŸŽ iOS & Swift

[iOS] Convenience init(ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €)

taeeekki 2021. 8. 22. 00:58

Convenience init Thumbnail

์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœ๋ผ์ž…๋‹ˆ๋‹ค~
์˜ค๋Š˜์€ Convenience initializer๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!

์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Designated initializer, Covenience initializer

 

์ฐจ๋ก€๋Œ€๋กœ ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €, ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ผ๊ณ  ํ•ด์„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ,

์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ํด๋ž˜์Šค(๊ตฌ์กฐ์ฒด)๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ด๋‹ˆ์…œ๋ผ์ด์ €์ด๊ณ ,
ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ณด์กฐ ์ด๋‹ˆ์…œ๋ผ์ด์ €์ž…๋‹ˆ๋‹ค.


Designated init ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ผ๋ถ€๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์„œ Convenience init ์•ˆ์—์„œ Designated init ์„ ํ˜ธ์ถœํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

Convenience init ์€ ๊ฐ™์€ ํด๋ž˜์Šค์—์„œ ๋‹ค๋ฅธ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

ํ•ญ์ƒ ๋ ์ง€์ ์€ Designated initializer์—ฌ์•ผ ํ•œ๋‹ค.

 

์˜ˆ์‹œ 1

์ดํ•ด๋ฅผ ํ•ด๋ณด๋ฉด ์—ฌ๋Ÿฌ ์กฐ๊ฑด์— ๋”ฐ๋ผ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์นœ๊ตฌ์ž…๋‹ˆ๋‹ค.
์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋„˜๊ธฐ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ œํ•œํ•ด์ค„ ์ˆ˜ ์žˆ์–ด์š”.

 

์˜ˆ๋ฅผ ๋“ค์–ด์„œ ์ƒ์„ฑ ์‹œ์ ์— name๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ธฐ๊ณ  ์‹ถ๊ณ , capacity๋Š” ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ผ๊ณ  ํ•œ๋‹ค๋ฉด

2๋ฒˆ์งธ ์ฝ”๋“œ ์˜ˆ์‹œ์˜ 3๋ฒˆ์งธ ์ค„๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

convenience init()์„ ํ†ตํ•ด ์ด๋ฏธ ์ดˆ๊ธฐํ™” ์ž‘์—…์„ ๋งŒ๋“ค์–ด ๋†“์•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ด์ฃ ~!

 

class Beverage {
  var name: String
  var capacity: Int
  // ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ € - ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์˜ ์ €์žฅ ํ”„๋กœํผํ‹ฐ ๊ฐ’ ์ดˆ๊ธฐํ™”(ํ• ๋‹น)
  init(name: String, capacity: Int) {
    self.name = name
    self.capacity = capacity
  }
  // ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ € - ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”
  convenience init(name: String) {
    self.init(name: name, capacity: 330)
  }
  // ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ € - ๋‹ค๋ฅธ ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ํ†ตํ•ด ์ธ์Šคํ„ด์Šค ์ดˆ๊ธฐํ™”
  convenience init() {
    self.init(name: "Fanta")
  }
}

 

์˜ˆ์‹œ 2

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ปค์Šคํ…€ ๋ทฐ๋ฅผ ๋งŒ๋“ค ๋•Œ, convenience init()์„ ํ†ตํ•ด ์ดˆ๊ธฐ ์„ค์ • ๊ฐ’๋„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

import UIKit

class CustomButton: UIButton {
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        configure()
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    convenience init(backgroundColor: UIColor, title: String) {
        self.init(frame: .zero)
        self.backgroundColor = backgroundColor
        self.setTitle(title, for: .normal)
    }
    
    private func configure() {
        layer.cornerRadius = 10
        titleLabel?.font = UIFont.systemFont(ofSize: 20, weight: .semibold)
        setTitleColor(.white, for: .normal)
        translatesAutoresizingMaskIntoConstraints = false
    }
}
// MARK: - Usage
let button1 = CustomButton(backgroundColor: .systemRed, title: "์•„๋‹ˆ์˜ค")
let button2 = CustomButton(backgroundColor: .systemGreen, title: "๋„ค")

 

 

์ปค์Šคํ…€ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ์ด๋‹ˆ์…œ๋ผ์ด์ €์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

์ด๋‹ˆ์…œ๋ผ์ด์ € ์‚ฌ์šฉํ•ด์„œ ๋ฒ„ํŠผ ๋งŒ๋“ค๊ธฐ

 

 

๋ ˆํผ๋Ÿฐ์Šค

 

GitHub - TTOzzi/Question-Archive: iOS ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ์งˆ๋ฌธ๋“ค์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.

iOS ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์ž์ฃผ ๋‚˜์˜ค๋Š” ์งˆ๋ฌธ๋“ค์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Contribute to TTOzzi/Question-Archive development by creating an account on GitHub.

github.com

 

Initialization — The Swift Programming Language (Swift 5.5)

Initialization Initialization is the process of preparing an instance of a class, structure, or enumeration for use. This process involves setting an initial value for each stored property on that instance and performing any other setup or initialization t

docs.swift.org

 

Swift ) init๊ณผ convenience init์˜ ์ฐจ์ด

์•ˆ๋…•ํ•˜์„ธ์š” :) ์˜ค๋Š˜์€ Swift์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €! init๊ณผ convenience init์˜ ์ฐจ์ด์ ์„ ๋ณผ๊ฑฐ์—์š”. ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹คXD Designated init๊ณผ convenience init์˜ ์ฐจ์ด ๋‹ค๋“ค ์•„์‹œ๋‹ค์‹œํ”ผ, Designated init์€ Swift์˜ ์ดˆ๊ธฐ..

zeddios.tistory.com