조앤의 기술블로그
[Swift] Structures and Classes (구조체와 클래스) 본문
구조체와 클래스에 대해 알아보겠습니다. 우선, Swift의 Programming Paradigm에 대해 알아보겠습니다.
[Swift의 Programming Paradigm]
1) Object-Oriented Programming
2) Protocol-Oriented Programming
3) Functional Programming
간단하게 비교해보자면,
OOP에서 Abstraction의 개념이 등장하고, 이때 Class가 주요 역할을 합니다. Class는 추상화의 결과로서, 객체 생성의 설계도 역할을 합니다. 이때 결과로 생성된 것을 instance라고 합니다.
Structure는 비교적 작은 데이터를 저장하고, 값 형식이 필요할 때 사용합니다. Class와 마찬가지로 설계도 역할을 하지만, 객체는 아닙니다. 함수형 패러다임에서 역할을 합니다.
Structure와 Class를 하나씩 생성해보겠습니다.
[Structure]
Struct Person {
var name: String
var age: Int
func speak() {
print("Hello!")
}
}
let p = Person(name: "Jin", age: 29)
p.name
p.age
p.speak()
가장 큰 특징은 구조체는 '값 형식' 이라는 것입니다.
[Class]
Class Person {
var name = "Tae Tae"
var age = 26
func speak() {
print("Good boy")
}
}
let p = Person()
클래스에서는 선언과 동시에 초기값을 지정해주거나 생성자를 만들어 주어야 에러가 나지 않습니다.
class Person {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
}
let p2 = Person(name: "JK", age: 24)
[비교]
Structure | Class | |
Property | ✔️ | ✔️ |
Method | ✔️ | ✔️ |
Initializer | ✔️ | ✔️ |
Subscript | ✔️ | ✔️ |
Extension | ✔️ | ✔️ |
Protocol | ✔️ | ✔️ |
Type | Value Type | Reference Type |
Deinitializer | X | ✔️ |
Inheritance | X | ✔️ |
Reference Counting | X | ✔️ |
(Value Type - Stack에 저장, Reference Type - Heap에 저장)
가장 큰 차이점은 구조체는 값형식(Value Type)이고, 클래스는 참조 형식(Reference Type)이라는 것입니다. 따라서 구조체는 상속이 불가하고, 상속이 필요할 때는 클래스를 이용해야 합니다.
* 참고
[Value Type vs. Reference Type]
값 형식 | 참조 형식 |
Structure Enumeration |
Class Closure |
Value Types | Reference Types |
새로운 복사본을 전달 |
똑같은 대상(원본). 메모리 주소를 전달 |
상대적으로 적은 값. 상속이 없을 때 사용. 연관된 상수 그룹 - 열거형 |
OOP - Class |
참고: KxCoding.com
'Study > Swift' 카테고리의 다른 글
Functions #1 (function, return type, parameter) (0) | 2020.02.18 |
---|---|
[Swift] guard Statement (guard문) (0) | 2020.02.16 |
[Swift] 클로저 (Closure) (0) | 2020.02.16 |
[Swift] 옵셔널 체이닝 (Optional Chaining) (0) | 2020.02.15 |
[Swift] 옵셔널 바인딩 (Optional Binding) (1) | 2020.02.14 |