Potato
์•ˆ๋…•ํ•˜์„ธ์š”, ๊ฐ์žก๋‹ˆ๋‹ค?๐Ÿฅ” ^___^ ๐Ÿ˜บ github ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘‰๐Ÿป

Swift/UIKit

[UIKit] init(frame: ), init(coder: ) ์ด๋‹ˆ์…œ๋ผ์ด์ €

๊ฐ์ž ๐Ÿฅ” 2022. 7. 10. 14:45
๋ฐ˜์‘ํ˜•

 

UIKit์„ ์‚ฌ์šฉํ•ด์„œ ์•ฑ์„ ๋งŒ๋“ค ๋•Œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ•„์ˆ˜์ ์œผ๋กœ ์ ์–ด์•ผ๋งŒ ํ•œ๋‹ค. ๊ณผ์—ฐ ์ด ์ฝ”๋“œ๊ฐ€ ์˜๋ฏธํ•˜๋Š”๊ฒŒ ๋ญ๊ณ  ์™œ ์ ์–ด์•ผํ• ๊นŒ?

 

๐ŸŸฃ ์˜ˆ์‹œ์ฝ”๋“œ

init(frame: CGRect, data: Data) {
    self.data = data
    super.init(frame: frame)
}
required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
  • ์—ฌ๊ธฐ์„œ ์ง€์ •ํ•ด์ค€ init์€ ๋ญ˜๊นŒ?

๐ŸŸฃ init(frame: )

https://developer.apple.com/documentation/uikit/uiview/1622488-init

 

Apple Developer Documentation

 

developer.apple.com

 

๐ŸŸช ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜๋˜์–ด ์žˆ๋‹ค.

๐Ÿ‘‰๐Ÿป Initializes and returns a newly allocated view object with the specified frame rectangle.

→ ์ง€์ •๋œ ํ”„๋ ˆ์ž„ ์ง์‚ฌ๊ฐํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ ํ• ๋‹น๋œ ๋ทฐ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

๐ŸŸช ์„ค๋ช…

์ฝ”๋“œ๋กœ UIView Class์˜ View ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ง€์ •๋œ ์ด๋‹ˆ์…œ๋ผ์ด์ €

→ Frame rectangle์„ ๊ฐ€์ง€๊ณ  ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๋ทฐ์˜ ์ค‘์‹ฌ๊ณผ ๊ฒฝ๊ณ„์„ ์„ ์ง€์ •ํ•ด์ค€๋‹ค. ์Šคํ† ๋ฆฌ๋ณด๋“œ, xib, nib ๊ฐ™์€ ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฝ”๋“œ๋กœ UIView Calss์˜ View object๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ง€์ •๋œ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋‹ค.


๐ŸŸฃ init(coder: )

https://developer.apple.com/documentation/foundation/nscoding/1416145-init

 

Apple Developer Documentation

 

developer.apple.com

 

๐ŸŸช ๊ณต์‹๋ฌธ์„œ๋ฅผ ๋จผ์ € ์‚ดํŽด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜๋˜์–ด ์žˆ๋‹ค.

๐Ÿ‘‰๐Ÿป Returns an object initialized from data in a given unarchiver.

→ ์ง€์ •๋œ unarchiver์˜ ๋ฐ์ดํ„ฐ์—์„œ ์ดˆ๊ธฐํ™”๋œ ๊ฐœ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

 

๐ŸŸช unarchaiver๊ฐ€ ๋ญ˜๊นŒ?

UIKit์—์„œ๋Š” storyboard์™€ xib๋ฅผ ํ™œ์šฉํ•ด์„œ view๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. ์ด ํˆด์„ ํ™œ์šฉํ•˜๋ฉด ๋ณ„๋„์˜ ์ฝ”๋“œ ์ž‘์„ฑ ์—†์ด ์•ฑ์˜ ์†์„ฑ์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์„ unarchiving ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์ด ํˆด๋“ค์€ (interface builder) ์ฝ”๋“œ๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ฑ์„ ์ปดํŒŒ์ผ ํ•˜๋Š” ์‹œ์ ์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ธ์‹ํ•  ์ˆ˜ ์—†๊ณ  ์ด๋ฅผ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” unarchiving ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. → ์ด ๊ณผ์ •์—์„œ ๋ฐ”๋กœ init(coder: )๊ฐ€ ํ•„์š”ํ•˜๋‹ค!

 

๐ŸŸช init(coder: )

ํŒŒ๋ผ๋ฏธํ„ฐ coder๋ฅผ ํ†ตํ•ด์„œ NSCoder ํƒ€์ž…์˜ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋œ๋‹ค. ์ „๋‹ฌ๋œ NSCoderํƒ€์ž…์˜ ๊ฐ์ฒด๊ฐ€ decoding๋˜์–ด ์ดˆ๊ธฐํ™”๋œ ํ›„ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ๊ฒŒ decoding๋œ ์ž๊ธฐ์ž์‹ (self)์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ž‘์—…์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

์ง์ ‘ ๊ตฌ์„ฑํ•œ View์˜ ์ƒํƒœ๋ฅผ ์•ฑ์˜ disk์— ์ €์žฅํ•˜๋Š” ๊ณผ์ •์„ serialize๋ผ๊ณ  ํ•œ๋‹ค. deserialize๋Š” ๋ฐ˜๋Œ€๋กœ disk์— ์ €์žฅ๋œ ์ƒํƒœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ž‘์—…์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค. NSCoding์ด๋ผ๋Š” ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ด serialize์™€ deserialize ์ž‘์—…์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

์ฆ‰ ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 โœ… Storyboard๋ผ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋นŒ๋”๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ทฐ์˜ ์ƒํƒœ๋ฅผ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ serialization ์ž‘์—…์„ Xcode๊ฐ€ init(coder:)๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์•ฑ ๋‚ด ๋ทฐ ์ž‘์—…์„ ์ €์žฅํ•˜๊ณ  ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ž‘์—…์„ ํ•ด์ค€๋‹ค.

 

๐ŸŸช requiered๋กœ ์„ ์–ธ๋œ ์ด์œ ?

UIView ์„ ์–ธ๋ถ€๋ฅผ ๋ณด๋ฉด NSCoding ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๊ณ  ์žˆ๋Š”๋ฐ NSCoding ์„ ์–ธ๋ถ€๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์‹คํŒจ๊ฐ€๋Šฅํ•œ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ๋˜์–ด์žˆ๋‹ค.

ํ”„๋กœํ† ์ฝœ์„ ์ค€์ˆ˜ํ•˜๋Š” ํด๋ž˜์Šค์—์„œ ํ”„๋กœํ† ์ฝœ์—์„œ ์š”๊ตฌํ•˜๋Š” ์ด๋‹ˆ์…œ๋ผ์ด์ € ์š”๊ตฌ์‚ฌํ•ญ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด required ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์–ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ฅผ ์ƒ์†๋ฐ›์€ ์ปค์Šคํ…€๋ทฐ์™€ ๊ฐ™์€ ํด๋ž˜์Šค์—์„œ๋Š” ์Šคํ† ๋ฆฌ๋ณด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š์ง€๋งŒ init?(coder:)๋ฅผ ๊ตฌํ˜„ํ•ด์ค˜์•ผ ํ•˜๊ณ  ์•ž์— ๊ผญ required๋ฅผ ๋ถ™์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค.  ๐Ÿ‘‰  code-base ์ธ๋ฐ init(coder: )๊ฐ€ ํ•„์š”ํ•œ ์ด์œ 


๐Ÿ“– Reference

https://leeari95.tistory.com/63?category=961651 

 

[iOS/UIKit] init(frame:)์™€ init(coder:)

UIView ์š”์†Œ๋ฅผ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์ปค์Šคํ…€ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค๋˜ ์™€์ค‘์— override ์ด๋‹ˆ์…œ๋ผ์ด์ €์™€ required ์ด๋‹ˆ์…œ๋ผ์ด์ €, ์ด 2๊ฐœ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ฅผ ์ •์˜ํ•ด์•ผํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋˜์—ˆ๋‹ค. override init(frame: CGRec

leeari95.tistory.com

https://velog.io/@inwoodev/iOS-initframe-initcoder

 

[iOS] init(frame:), init(coder:)

์Šคํ† ๋ฆฌ๋ณด๋“œ ์—†์ด ์•ฑ์„ ๋งŒ๋“ค๋‹ค ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ override init(frame:) ๊ณผ required init?(coder:) ์ด ํ•„์š”ํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.๋‹จ์ˆœํžˆ ํ•„์š”ํ•ด์„œ ์ป์—ˆ์ง€ ์™œ ํ•„์š”ํ•œ์ง€๋Š” ์ œ๋Œ€๋กœ ์•Œ์•„๋ณด์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์•„์„œ ๊ณต๋ถ€ํ•œ

velog.io

 

๋ฐ˜์‘ํ˜•