์๋
ํ์ธ์, ํ๋ผ์
๋๋ค~
์ค๋์ Convenience initializer๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ฒ ์ต๋๋ค!
์ด๋์
๋ผ์ด์ ๋ ํฌ๊ฒ 2๊ฐ์ง๋ฅผ ์ดํด๋ณผ ์ ์์ต๋๋ค.
Designated initializer, Covenience initializer
์ฐจ๋ก๋๋ก ์ง์ ์ด๋์
๋ผ์ด์ , ํธ์ ์ด๋์
๋ผ์ด์ ๋ผ๊ณ ํด์ํด๋ณผ ์ ์๋๋ฐ,
์ง์ ์ด๋์
๋ผ์ด์ ๋ ํด๋์ค(๊ตฌ์กฐ์ฒด)๋ด์ ๋ชจ๋ ํ๋กํผํฐ๊ฐ ์ด๊ธฐํ๋ ์ ์๋๋ก ํด์ฃผ๋ ์ด๋์
๋ผ์ด์ ์ด๊ณ ,
ํธ์ ์ด๋์
๋ผ์ด์ ๋ ์ถ๊ฐ์ ์ธ ์์
์ ํ ์ ์๋๋ก ํด์ฃผ๋ ๋ณด์กฐ ์ด๋์
๋ผ์ด์ ์
๋๋ค.
Designated init ์ ํ๋ผ๋ฏธํฐ ์ผ๋ถ๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํด์ Convenience init ์์์ Designated init ์ ํธ์ถํด์ ์ธ ์ ์์ต๋๋ค.
์ค์ํ ํฌ์ธํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Convenience init ์ ๊ฐ์ ํด๋์ค์์ ๋ค๋ฅธ ์ด๋์ ๋ผ์ด์ ๋ฅผ ํธ์ถํด์ผ ํ๋ค.
์์ 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: "๋ค")
์ปค์คํ ํด๋์ค๋ฅผ ๋ง๋ค๋ฉด์ ์ด๋์ ๋ผ์ด์ ์ ๋ํ ์ดํด๋ฅผ ํด๋ณด์์ต๋๋ค.
๋ ํผ๋ฐ์ค
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] Typealias, ํ์ ๋ณ์นญ ์ฌ์ฉํ๊ธฐ (3) | 2021.09.02 |
---|---|
[iOS] ํ ์คํธ์ ํฌํจ๋์ด ์๋ HTMLํ๊ทธ ์ ๊ฑฐํ๊ธฐ (0) | 2021.08.28 |
[iOS] frame๊ณผ bounds (0) | 2021.08.20 |
[iOS] ์ต์ ๋, Optional (0) | 2021.08.18 |
iOS Issue(1) - Build input file cannot be found (0) | 2021.07.30 |