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

iOS/TIL

22.07.13 ใ…ฃ Class & Struct

 

 

Class 

 

- ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ 

 

Class ๋ฅผ ๊ฐ„๋‹จํžˆ ๋น„์œ ํ•˜์ž๋ฉด ์‹ํŒ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ํŒ์—๋Š” ๋ฐฅ์„ ๋‹ด๋Š” ๊ณณ, ๊ตญ์„ ๋‹ด๋Š” ๊ณณ, ๋ฐ˜์ฐฌ์„ ๋‹ด๋Š” ๊ณณ์ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, Class ์—๋„ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ํ”„๋กœํผํ‹ฐ๋ž€ ํด๋ž˜์Šค ๋‚ด๋ถ€์— ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๊ณ  ๋ฉ”์„œ๋“œ๋ž€ ํ•จ์ˆ˜๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋”ฉํ•˜๋Š” ๊ฒƒ์„ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. iOS UIKit Framework๋Š” ๋Œ€๋ถ€๋ถ„ ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

 

- ์ธ์Šคํ„ด์Šค 

 

๊ทธ๋Ÿฌ๋ฉด ์ด ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ํด๋ž˜์Šค๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด๋•Œ ์ด ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 

 

์ด๋ ‡๊ฒŒ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ธ์Šคํ„ด์Šค๋ฅผ ํ†ตํ•ด ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. 

 

 

- ์ƒ์† 

 

 

์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์†์„ฑ์„ ์ƒ์†๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ twin ์€ me ์˜ ์ž์‹ ํด๋ž˜์Šค(SubClass) ๊ฐ€ ๋˜๊ณ , me๋Š” twin์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค(SuperClass)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ƒ์†๋ฐ›์ง€ ์•Š๋Š” ํด๋ž˜์Šค๋Š” ๊ธฐ๋ฐ˜ํด๋ž˜์Šค(BaseClass)๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ twin์ด๋ผ๋Š” ํด๋ž˜์Šค๋Š” me๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ์ƒ์†๋ฐ›์•„, ๋˜‘๊ฐ™์€ ์†์„ฑ์„ ๊ฐ€์ง€๋ฉด์„œ ์ถ”๊ฐ€๋œ clothesColor๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. 

 

 

- ์žฌ์ •์˜ 

 

์˜ˆ๋ฅผ ๋“ค์–ด twin์˜ ์ธ์Šคํ„ด์Šค์ธ kate๊ฐ€ ๋’ค๋กœ๋„ ๊ฑธ์–ด๊ฐ€๊ฒŒ ํ•˜๊ณ  ์•ž์œผ๋กœ๋„ ๊ฑธ์–ด๊ฐ€๊ฒŒ ํ•˜๊ณ  ์‹ถ์œผ๋ฉด ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ์š”? ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด 

์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋œน๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๋•Œ ํ•„์š”ํ•œ ๊ฒƒ์ด override ์ž…๋‹ˆ๋‹ค. 

 

 

 

์‚ฌ์šฉ๋ฒ•์€ ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ ์•ž์— override๋ฅผ ์จ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ, ๋ถ€๋ชจํด๋ž˜์Šค์˜ ์†์„ฑ๋„ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด super.move()์™€ ๊ฐ™์ด ๊ธฐ์กด ๋ฉ”์„œ๋“œ ์•ž์— super๋งŒ ๋ถ™์—ฌ์ฃผ๋ฉด ๊ธฐ์กด์˜ "์•ž์œผ๋กœ ๊ฑธ์–ด๊ฐ€" ์™€ "๋’ค๋กœ ๊ฑธ์–ด๊ฐ€"๋ฅผ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

 

- initializer 

 

๋ณ€์ˆ˜๋งŒ ์„ ์–ธํ•ด ๋‘๊ณ  ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด, nil์ด ๋ฐœ์ƒํ•ด ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด ๋ชจ๋‘ ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐํ™”๊ฐ€ ์ œ๋Œ€๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์ง€ ์•Š์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด ์•ฑ์„ ๋นŒ๋“œํ•  ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ดˆ๊ธฐํ™”๋ฅผ ์ž˜ ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š”๋ฐ, Class ์™€ ๋‹ฌ๋ฆฌ Struct๋Š” ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ตฌ๋ฌธ์„ ์ž๋™์œผ๋กœ XCode์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ Struct๋ณด๋‹ค๋Š” Class ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์กฐ๊ธˆ ๋” ์ดˆ๊ธฐํ™”์— ์‹ ๊ฒฝ์จ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

์ดˆ๊ธฐํ™”๋ฅผ ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ, ์ฒซ ๋ฒˆ์งธ๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•จ๊ณผ ๋™์‹œ์— ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ์ดˆ๊ธฐํ™” ๋งค์„œ๋“œ ๋‚ด์—์„œ ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. 

 

๋งค์„œ๋“œ ๋‚ด์—์„œ ํ”„๋กœํผํ‹ฐ์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์ง€์ •ํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•

 

 

Struct

 

๊ทธ๋ ‡๋‹ค๋ฉด struct๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๊ตฌ์„ฑ์€ class ์™€ ๋น„์Šทํ•˜์ง€๋งŒ, ์ƒ์†์ด ๋˜์ง€ ์•Š๋Š” ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ struct๋Š” ๊ฐ’ ํƒ€์ž…์ด์ง€๋งŒ, class ๋Š” ์ฐธ์กฐํƒ€์ž…์ด๋ผ๋Š” ์ฐจ์ด์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์„ค๋ช…์€ ํ›„๋ฐ˜๋ถ€์—์„œ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

 

 

 

 

๊ฐ’ ํƒ€์ž… vs ์ฐธ์กฐ ํƒ€์ž…

 

์ผ๋ฐ˜์ ์œผ๋กœ Class๋Š” ์ฐธ์กฐ ํƒ€์ž…, Struct๋Š” ๊ฐ’ ํƒ€์ž…์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ ์–ด๋–ค ์›๋ฆฌ๋กœ ์ด๋ ‡๊ฒŒ ๋˜๋Š” ๊ฑธ๊นŒ์š”? 

 

 

์ฝ”๋“œ์ƒ์œผ๋กœ ๋ดค์„ ๋•Œ๋Š” ๋ถ„๋ช… kate์˜ ํ”„๋กœํผํ‹ฐ๋งŒ ๋ณ€๊ฒฝ์ด ๋˜์—ˆ๋Š”๋ฐ, ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ˜ธ์ถœ๋œ ๊ฐ’์„ ๋ณด๋ฉด sarah์˜ ํ”„๋กœํผํ‹ฐ๋„ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” Class๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ์ •๋ณด๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’์ด ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณณ์„ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ kate์˜ ํ”„๋กœํผํ‹ฐ๋งŒ ๋ณ€๊ฒฝํ–ˆ์Œ์—๋„, ์ด ํ”„๋กœํผํ‹ฐ๋“ค์€ ๋…๋ฆฝ์ ์ด์ง€ ์•Š์€ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜์–ด sarah์™€ ๊ฐ™์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ข…์ ์œผ๋กœ๋Š” sarah์˜ ๊ฐ’๋„ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด Struct์˜ ๊ฒฝ์šฐ๋Š” ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ์š”?

 

 

 

Struct์˜ ๊ฒฝ์šฐ Class ์™€ ๋‹ฌ๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Kate์˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์–ด๋„ Sarah์˜ ๊ฐ’์—๋Š” ์ „ํ˜€ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์กฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ๋˜ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•˜์—ฌ๋„, ์ด๋Š” ์ธ์Šคํ„ด์Šค์˜ ๋ณต์‚ฌ๋กœ ์ƒˆ๋กœ์šด ๊ฐ’์˜ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ณ€๊ฒฝ ๋˜์–ด๋„ ์„œ๋กœ ์˜ํ–ฅ์„ ๋ฏธ์น˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.