๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
โŒจ๏ธ Language/swift

[Swift] ํด๋ž˜์Šค์™€ ๊ตฌ์กฐ์ฒด

by hyebin (Helia) 2024. 3. 19.
๋ฐ˜์‘ํ˜•

ํด๋ž˜์Šค VS ๊ตฌ์กฐ์ฒด

๊ณตํ†ต์ 

  • ๊ฐ’์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํผํ‹ฐ ์ •์˜
  • ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์†Œ๋“œ ์ •์˜ 
  • subscript ๋ฌธ๋ฒ•์„ ์ด์šฉํ•ด ํŠน์ • ๊ฐ’์„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” subscript ์ •์˜
  • ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” initializer ์ •์˜
  • ๊ธฐ๋ณธ ๊ตฌํ˜„์—์„œ ๊ธฐ๋Šฅ ํ™•์žฅ
  • ํŠน์ •ํ•œ ์ข…๋ฅ˜์˜ ํ‘œ์ค€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ ์ˆœ์‘(conform)

์ฐจ์ด์ (ํด๋ž˜์Šค๋งŒ ๊ฐ€๋Šฅ)

  • ์ƒ์† (Inheritance): ํด๋ž˜์Šค์˜ ์—ฌ๋Ÿฌ ์†์„ฑ์„ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ๋ฌผ๋ ค ์คŒ
  • ํƒ€์ž… ์บ์ŠคํŒ… (Type casting): ๋Ÿฐํƒ€์ž„์— ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ํƒ€์ž…์„ ํ™•์ธ
  • ์†Œ๋ฉธ์ž (Deinitializers): ํ• ๋‹น๋œ ์ž์›์„ ํ•ด์ œ(free up) ์‹œํ‚ด
  • ์ฐธ์กฐ ์นด์šดํŠธ (Reference counting): ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์— ํ•˜๋‚˜ ์ด์ƒ์˜ ์ฐธ์กฐ๊ฐ€ ๊ฐ€๋Šฅ

๊ตฌ์กฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

  • ์ฃผ ๋ชฉ์ ์ด ๊ด€๊ณ„๋œ ๊ฐ„๋‹จํ•œ ๊ฐ’์„ ์บก์Аํ™”(encapsulate) ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ธ ๊ฒฝ์šฐ
  • ๊ตฌ์กฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค๊ฐ€ ์ฐธ์กฐ๋˜๊ธฐ ๋ณด๋‹ค ๋ณต์‚ฌ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๊ตฌ์กฐ์ฒด์— ์˜ํ•ด ์ €์žฅ๋œ ์–ด๋– ํ•œ ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ฐธ์กฐ๋˜๊ธฐ ๋ณด๋‹ค ๋ณต์‚ฌ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฒฝ์šฐ
  • ๊ตฌ์กฐ์ฒด๊ฐ€ ํ”„๋กœํผํ‹ฐ๋‚˜ ๋ฉ”์†Œ๋“œ ๋“ฑ์„ ์ƒ์†ํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ

 

ํด๋ž˜์Šค

ํด๋ž˜์Šค ์„ ์–ธ ๋ฌธ๋ฒ•

class VideoMode {
    var resolution = Resolution()  // Resolution ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

ํด๋ž˜์Šค ์ด๋ฆ„ ๋’ค์— () ๋นˆ ๊ด„ํ˜ธ ๋ถ™์ด๋ฉด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

let someVideoMode = VideoMode()    // ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

์  ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ํด๋ž˜์Šค ์ธ์Šคํ„ด์Šค์˜ ํ”„๋กœํผํ‹ฐ์™€ ํ•˜์œ„๋ ˆ๋ฒจ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ

print(\\(someVideoMode.frameRate)")
// 0.0 ์ถœ๋ ฅ

์  ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’ ํ• ๋‹น ๊ฐ€๋Šฅ

someVideoMode.resolution.width = 1280

print("The width of someVideoMode is now \\(someVideoMode.resolution.width)")
// "The width of someVideoMode is now 1280" ์ด ์ถœ๋ ฅ

ํด๋ž˜์Šค๋Š” ์ฐธ์กฐ ํƒ€์ž…

โญ ์ฐธ์กฐ ํƒ€์ž…์ด๋ž€?

 

๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜์— ๊ฐ’์„ ํ• ๋‹น์„ ํ•˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜์— ์ธ์ž๋กœ ์ „๋‹ฌํ•  ๋•Œ ๊ทธ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์ง€ ์•Š๊ณ  ์ฐธ์กฐ(๊ทธ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋‹ค)๋จ

let tenEighty = VideoMode()

tenEighty.resolution = hd
tenEighty.interlaced = true
tenEighty.name = "1080i"
tenEighty.frameRate = 25.0

let alsoTenEighty = tenEighty

alsoTenEighty.frameRate = 30.0

print("The frameRate property of tenEighty is now \\(tenEighty.frameRate)")
// "The frameRate property of tenEighty is now 30.0" ์ถœ๋ ฅ
  • let alsoTenEighty = tenEighty ๊ตฌ๋ฌธ์—์„œ alsoTenEighty์ƒ์ˆ˜๊ฐ€ tenEighty ์ธ์Šคํ„ด์Šค๋ฅผ ๋ณต์‚ฌํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ฐธ์กฐํ•œ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์ค‘์— 30์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฐ’์œผ๋กœ ์ถœ๋ ฅ๋จ
  • ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋ฐ”๋ผ๋ณด๊ณ  ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ

์‹๋ณ„ ์—ฐ์‚ฐ์ž

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

  • === : ๋‘ ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ™์€ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์ฐธ
  • !== : ๋‘ ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์ฐธ

 

๊ตฌ์กฐ์ฒด

๊ตฌ์กฐ์ฒด ์„ ์–ธ ๋ฌธ๋ฒ•

struct Resolution {
    var width = 0
    var height = 0
}

๊ตฌ์กฐ์ฒด

์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

๊ตฌ์กฐ์ฒด ์ด๋ฆ„ ๋’ค์— () ๋นˆ ๊ด„ํ˜ธ ๋ถ™์ด๋ฉด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

let someResolution = Resolution()    // ๊ตฌ์กฐ์ฒด ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

print("The width of someResolution is \\(someResolution.width)")
// "The width of someResolution is 0" ์ถœ๋ ฅ

 

๊ตฌ์กฐ์ฒดํ˜•์˜ ๋ฉค๋ฒ„ ์ดˆ๊ธฐํ™”

  • ๋ชจ๋“  ๊ตฌ์กฐ์ฒด๋Š” ์ดˆ๊ธฐํ™” ํ•  ๋•Œ ํ”„๋กœํผํ‹ฐ๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋Š” ์ดˆ๊ธฐ์ž๋ฅผ ์ž๋™ ์ƒ์„ฑํ•ด ์ œ๊ณต
  • ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ ๊ตฌ์กฐ์ฒด ์•ˆ์— width์™€ heightํ”„๋กœํผํ‹ฐ๋งŒ ์ •์˜ํ–ˆ๋‹ค๋ฉด ์ž๋™์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
let vga = Resolution(width: 640, height: 480)

 

๊ตฌ์กฐ์ฒด์™€ ์—ด๊ฑฐํ˜•์€ ๊ฐ’ ํƒ€์ž…

โญ ๊ฐ’ ํƒ€์ž…์ด๋ž€?

 

ํ•จ์ˆ˜์—์„œ ์ƒ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์— ์ „๋‹ฌ๋  ๋•Œ ๊ทธ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์„œ ์ „๋‹ฌ๋จ

let hd = Resolution(width: 1920, height: 1080)

var cinema = hd
๋ฐ˜์‘ํ˜•

'โŒจ๏ธ Language > swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Swift] ๋ฉ”์„œ๋“œ  (0) 2024.03.21
[Swift] ํ”„๋กœํผํ‹ฐ  (0) 2024.03.20
[Swift] ํด๋กœ์ €  (1) 2024.03.18
[Swift] ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์™€ ํ•จ์ˆ˜  (4) 2024.03.17
[Swift] ์กฐ๊ฑด/๋ฐ˜๋ณต๋ฌธ  (1) 2024.03.17