πŸ’» 개발/iOS

[iOS / Swift] 상속 VS μ΅μŠ€ν…μ…˜

2022. 9. 27. 23:44
λͺ©μ°¨
  1. πŸ”— μ°Έκ³ ν•œ 것

μ΅μŠ€ν…μ…˜

μŠ€μœ„ν”„νŠΈμ˜ κ°•λ ₯ν•œ κΈ°λŠ₯으둜, ꡬ쑰체, 클래슀, μ—΄κ±°ν˜•, ν”„λ‘œν† μ½œ νƒ€μž…μ— μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  수 있게 ν•΄μ€€λ‹€. κΈ°λŠ₯을 μΆ”κ°€ν•˜λ €λŠ” νƒ€μž…μ˜ κ΅¬ν˜„λœ μ†ŒμŠ€ μ½”λ“œλ₯Ό μ•Œμ§€ λͺ»ν•˜λ”라도 νƒ€μž…λ§Œ μ•Œκ³  μžˆλ‹€λ©΄ κΈ°λŠ₯을 ν™•μž₯ν•  수 μžˆλ‹€.

 

μ΅μŠ€ν…μ…˜μœΌλ‘œ νƒ€μž…μ— μΆ”κ°€ν•  수 μžˆλŠ” κ²ƒλ“€μ—λŠ”

  • μ—°μ‚° νƒ€μž… ν”„λ‘œνΌν‹° / μ—°μ‚° μΈμŠ€ν„΄μŠ€ ν”„λ‘œνΌν‹°
  • νƒ€μž… λ©”μ„œλ“œ / μΈμŠ€ν„΄μŠ€ λ©”μ„œλ“œ
  • μ΄ˆκΈ°ν™”
  • μ„œλΈŒμŠ€ν¬λ¦½νŠΈ
  • 쀑첩 νƒ€μž…
  • νŠΉμ • ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•  수 μžˆλ„λ‘ κΈ°λŠ₯ μΆ”κ°€

 

μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•  μˆ˜λŠ” μžˆμ§€λ§Œ 기쑴에 μ‘΄μž¬ν•˜λŠ” κΈ°λŠ₯을 μž¬μ •μ˜(override)λŠ” λΆˆκ°€λŠ₯ν•˜λ‹€. 이것이 λ°”λ‘œ μƒμ†κ³Όμ˜ 차이이닀.

 

상속 VS μ΅μŠ€ν…μ…˜

상속 - 클래슀 νƒ€μž…μ— ν™œμš© - 수직적으둜 ν™•μž₯ - μž¬μ •μ˜ κ°€λŠ₯

μ΅μŠ€ν…μ…˜ - 클래슀, ꡬ쑰체, μ—΄κ±°ν˜•, ν”„λ‘œν† μ½œ λ“± λͺ¨λ“  νƒ€μž…μ— ν™œμš© - μˆ˜ν‰μ μœΌλ‘œ ν™•μž₯ - μž¬μ •μ˜ λΆˆκ°€λŠ₯

 

μ•žμ„œ λ§ν–ˆλ˜ κ²ƒμ²˜λŸΌ κ΅¬ν˜„λœ μ†ŒμŠ€ μ½”λ“œλ₯Ό μ•Œμ§€ λͺ»ν•˜λ”라도 νƒ€μž…λ§Œ μ•Œκ³  μžˆλ‹€λ©΄ κΈ°λŠ₯을 ν™•μž₯ν•  수 μžˆμ–΄ μ΅μŠ€ν…μ…˜μ€ 맀우 μœ μš©ν•œ κΈ°λŠ₯이닀.

 

κ΅¬μ‘°λŠ” μ•„λž˜μ™€ κ°™κ³  μ‚¬μš©λ²•μ„ κ°„λ‹¨ν•˜κ²Œ μž‘μ„±ν•΄λ³΄μ•˜λ‹€.

extension νƒ€μž… 이름 {
	// νƒ€μž…μ— 좔가될 μƒˆλ‘œμš΄ κΈ°λŠ₯
}

extension νƒ€μž… 이름: μ€€μˆ˜ν•  ν”„λ‘œν† μ½œ {
	// ν”„λ‘œν† μ½œ μš”κ΅¬ 사항 κ΅¬ν˜„
}

 

1. μ—°μ‚° ν”„λ‘œνΌν‹°

extension Double { // Double νƒ€μž…μ— 두 개의 μ—°μ‚° ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€
	var squared: Double {
		return self * self
	}
	
	var cubed: Double {
		return self * self * self
	}
}

let myValue: Double = 3.0
print(myValue.squared)

// λ¦¬ν„°λŸ΄μ— κ·ΈλŒ€λ‘œ ν˜ΈμΆœν•˜λŠ” 것도 κ°€λŠ₯
print(3.0.squared)

 

2. λ©”μ†Œλ“œ

extension Double {
	func multiply(n: Double) -> Double {
		return self * n
	}
}

let myValue: Double = 3.0
print(myValue.multiply(5.0))

 

3. μ΄ˆκΈ°ν™”

extension String {
    init(int: Int) {
        self = "\\(int)"
    }

    init(double: Double) {
        self = "\\(double)"
    }
}

let stringFromInt: String = String(int: 100) 

 

μ§€μ • μ΄ˆκΈ°ν™” (Designed Initializer)

  • 클래슀의 κΈ°λ³Έ μ΄λ‹ˆμ…œλΌμ΄μ €
  • λͺ¨λ“  ν”„λ‘œνΌν‹°λ₯Ό μ΄ˆκΈ°ν™”ν•˜κ³  μ μ ˆν•œ 수퍼 클래슀의 μ΄λ‹ˆμ…œλΌμ΄μ €λ₯Ό 호좜
  • ν΄λž˜μŠ€λŠ” λ°˜λ“œμ‹œ ν•˜λ‚˜ μ΄μƒμ˜ μ§€μ • μ΄ˆκΈ°ν™”λ₯Ό κ°€μ§€κ³  μžˆμ–΄μ•Ό 함
class Person {
	var name: String
	var age: Int
    
	init() {	
		self.name = ""
		self.age = 0
    }

	init(name: String, age: Int) {
		self.name = name
		self.age = age
	}
}

 

편의 μ΄ˆκΈ°ν™” (Convenience Initializer)

  • λ‹€λ₯Έ μ΄λ‹ˆμ…œλΌμ΄μ €λ₯Ό μ§€μ›ν•˜λŠ” 보쑰 μ΄λ‹ˆμ…œλΌμ΄μ €
  • μ§€μ • μ΄ˆκΈ°ν™”μ˜ 일뢀 맀개 λ³€μˆ˜λ₯Ό κΈ°λ³Έ κ°’μœΌλ‘œ μ„€μ •ν•˜μ—¬ 호좜
  • μ§€μ • μ΄ˆκΈ°ν™”μ™€ λ‹€λ₯΄κ²Œ λ°˜λ“œμ‹œ κ°€μ§ˆ ν•„μš”λŠ” μ—†μŒ
class Person {
	// ... μƒλž΅
	convenience init(name: String) {
		self.init(name: name, age: 25)
	}
}

λ˜ν•œ μŠ€μœ„ν”„νŠΈμ—μ„œλŠ” μ§€μ • μ΄ˆκΈ°ν™”μ™€ 편의 μ΄ˆκΈ°ν™”μ˜ 관계λ₯Ό λͺ…ν™•ν•˜κ²Œ ν•˜κΈ° μœ„ν•΄ 클래슀 μœ ν˜•μ— λŒ€ν•œ μ΄ˆκΈ°ν™” μœ„μž„ κ·œμΉ™μ„ μ •μ˜ν–ˆλ‹€.

 

  1. κ·œμΉ™ 1 - μ§€μ • μ΄ˆκΈ°ν™”λŠ” λΆ€λͺ¨ ν΄λž˜μŠ€μ—μ„œμ˜ μ§€μ • μ΄ˆκΈ°ν™”λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.
  2. κ·œμΉ™ 2 - 편의 μ΄ˆκΈ°ν™”λŠ” λ™μΌν•œ 클래슀의 λ‹€λ₯Έ μ΄ˆκΈ°ν™”λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.
  3. κ·œμΉ™ 3 - 편의 μ΄ˆκΈ°ν™”λŠ” ꢁ극적으둜 μ§€μ • μ΄ˆκΈ°ν™”λ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€.

ν•œ μ€„λ‘œ 정리해보면 μ§€μ • μ΄ˆκΈ°ν™”λŠ” 항상 λΆ€λͺ¨ ν΄λž˜μŠ€μ— μœ„μž„ν•΄μ•Ό ν•˜κ³ , 편의 μ΄ˆκΈ°ν™”λŠ” 항상 μ§€μ • μ΄ˆκΈ°ν™”μ— μœ„μž„ν•΄μ•Ό ν•œλ‹€λŠ” μ˜λ―Έμ΄λ‹€.

 

좜처 : Swift 곡식 λ¬Έμ„œ

 

μœ„μ˜ 도식도λ₯Ό 보면 μžμ‹ 클래슀의 μ§€μ • μ΄ˆκΈ°ν™”λŠ” λΆ€λͺ¨ 클래슀의 μ§€μ • μ΄ˆκΈ°ν™”μ— μœ„μž„ν•˜κ³  있고, 편의 μ΄ˆκΈ°ν™”λŠ” λ™μΌν•œ 클래슀의 μ§€μ • μ΄ˆκΈ°ν™”μ— μœ„μž„ν•˜κ³  μžˆλŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

λ˜ν•œ 클래슀λ₯Ό μ •μ˜ν•  λ•Œ μ˜΅μ…”λ„μ΄ μ•„λ‹Œ ν”„λ‘œνΌν‹°κ°€ κΈ°λ³Έ 값이 μžˆλŠ” 경우 μžλ™μœΌλ‘œ κΈ°λ³Έ μ΄ˆκΈ°ν™”(μƒμ„±μž)λ₯Ό μ œκ³΅ν•œλ‹€.

class Person {
	var name: String?
	var age: Int = 25
}

let p1 = Person() // 컴파일 OK!
let p2 = Person(name: "kodo", age: 25) // 컴파일 Error! -> ν•΄λ‹Ή λ§€κ°œλ³€μˆ˜λ₯Ό κ°–λŠ” μ΄ˆκΈ°ν™”(μƒμ„±μž)κ°€ μ—†κΈ° λ•Œλ¬Έ

 

ν•˜μ§€λ§Œ μ˜΅μ…”λ„μ΄ μ•„λ‹ˆλ©΄μ„œ κΈ°λ³Έ 값이 μ—†λŠ” 경우 컴파일 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

class Person {
	var name: String
	var age: Int = 25
}

let p1 = Person() // 컴파일 Error!

 

κ·Έλ ‡μ§€λ§Œ κ΅¬μ‘°μ²΄λŠ” λ‹€λ₯΄λ‹€. κΈ°λ³Έ 값이 μ—†λŠ” κ²½μš°μ—λ„ λ§€κ°œλ³€μˆ˜λ‘œ ν”„λ‘œνΌν‹°μ— λŒ€ν•œ 값을 λ„˜κ²¨μ£Όλ©΄ μΈμŠ€ν„΄μŠ€κ°€ μ •μƒμ μœΌλ‘œ μƒμ„±λœλ‹€.

struct Person {
	var name: String
	var age: Int
}

let p1 = Person() // 컴파일 OK!

 

πŸ”— μ°Έκ³ ν•œ 것

 

Initialization β€” The Swift Programming Language (Swift 5.7)

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

 

μ΅μŠ€ν…μ…˜ - yagom's blog

yagom's blog μ΅μŠ€ν…μ…˜

blog.yagom.net

 

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'πŸ’» 개발 > iOS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[iOS / Swift] lim ν΄λ‘œμ € -> 0 (ν΄λ‘œμ €, κ·Ήν•œμœΌλ‘œ 쀄여보기)  (0) 2022.10.05
[iOS / Swift] ν΄λ‘œμ €μ™€ ν”„λ‘œνΌν‹°, κ°€λ³κ²Œ μ•Œμ•„λ³΄κΈ°  (0) 2022.10.02
[TIL] 22.08.25  (0) 2022.08.25
[TIL] 22.08.24  (0) 2022.08.24
[TIL] 22.06.03  (0) 2022.06.03
  1. πŸ”— μ°Έκ³ ν•œ 것
'πŸ’» 개발/iOS' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
  • [iOS / Swift] lim ν΄λ‘œμ € -> 0 (ν΄λ‘œμ €, κ·Ήν•œμœΌλ‘œ 쀄여보기)
  • [iOS / Swift] ν΄λ‘œμ €μ™€ ν”„λ‘œνΌν‹°, κ°€λ³κ²Œ μ•Œμ•„λ³΄κΈ°
  • [TIL] 22.08.25
  • [TIL] 22.08.24
kodo_o
kodo_o
iOS κΏ€μžΌ!
kodo_o
🍎🍏
kodo_o
전체
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (149)
    • πŸ”¨ ν”„λ‘œμ νŠΈ (0)
      • TP 1 (0)
      • WhiteHCCTV (0)
      • FootPrint (0)
    • πŸ’» 개발 (63)
      • iOS (30)
      • Android (6)
      • Kotlin (4)
      • Flutter (9)
      • Node.js (5)
      • Architecture (1)
      • 였늘의 μ‚½μ§ˆ (7)
      • μ—λŸ¬μ™€μ˜ 동침 (1)
    • ✏️ μ•Œκ³ λ¦¬μ¦˜ (6)
      • Graph (6)
      • String (0)
      • Sort (0)
    • ✍️ μ½”ν…Œ μ€€λΉ„ (44)
      • Math (1)
      • Implementation (3)
      • String (3)
      • Brute Force (5)
      • Back Tracking (7)
      • Greedy (0)
      • Dynamic Programming (13)
      • Binary Search (1)
      • DFS, BFS (5)
      • Shortest Path (2)
      • Two Pointer (4)
      • MST (0)
    • πŸ“š CS (6)
      • Operating System (6)
    • ⛹️ 라이프 (30)
      • 2020 κ²¨μšΈλ°©ν•™ λͺ¨κ°μ½”(개인) (12)
      • 2021 여름방학 λͺ¨κ°μ½”(개인) (6)
      • μ½”λ”© ν…ŒμŠ€νŠΈ (1)
      • 회고 (10)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • κΉƒν—ˆλΈŒ

인기 κΈ€

졜근 κΈ€

졜근 λŒ“κΈ€

hELLO Β· Designed By μ •μƒμš°.
kodo_o
[iOS / Swift] 상속 VS μ΅μŠ€ν…μ…˜
μƒλ‹¨μœΌλ‘œ

ν‹°μŠ€ν† λ¦¬νˆ΄λ°”

단좕킀

λ‚΄ λΈ”λ‘œκ·Έ

λ‚΄ λΈ”λ‘œκ·Έ - κ΄€λ¦¬μž ν™ˆ μ „ν™˜
Q
Q
μƒˆ κΈ€ μ“°κΈ°
W
W

λΈ”λ‘œκ·Έ κ²Œμ‹œκΈ€

κΈ€ μˆ˜μ • (κΆŒν•œ μžˆλŠ” 경우)
E
E
λŒ“κΈ€ μ˜μ—­μœΌλ‘œ 이동
C
C

λͺ¨λ“  μ˜μ—­

이 νŽ˜μ΄μ§€μ˜ URL 볡사
S
S
맨 μœ„λ‘œ 이동
T
T
ν‹°μŠ€ν† λ¦¬ ν™ˆ 이동
H
H
단좕킀 μ•ˆλ‚΄
Shift + /
⇧ + /

* λ‹¨μΆ•ν‚€λŠ” ν•œκΈ€/영문 λŒ€μ†Œλ¬Έμžλ‘œ 이용 κ°€λŠ₯ν•˜λ©°, ν‹°μŠ€ν† λ¦¬ κΈ°λ³Έ λ„λ©”μΈμ—μ„œλ§Œ λ™μž‘ν•©λ‹ˆλ‹€.