728x90
안녕하세요:)
오늘은 구조체와 클래스에 대해서 알아보도록 하겠습니다!!!
1. Structure and Class
- 구조체와 클래스는 하나의 큰 코드 블록입니다.
- 구조체와 클래스 내에서 정의된 변수, 상수는 프로퍼티(속성)라는 이름을 가집니다.
- 구조체와 클래스 내에서 정의된 함수는 메소드라는 이름을 가집니다.
- 형식 내부에 구현하는 요소를 멤버라고 합니다.
- 구조체와 클래스는 프로퍼티, 메소드, 서브스크립트, 초기화 블록, 확장, 프로토콜을 선언할 수 있습니다.
- 클래스는 구조체보다 상속, 소멸화 구문, 참조에 의한 전달의 기능을 가지고 있습니다.
struct StructName {
property
method
initializer
subscript
}
class ClassName {
property
method
initilaizer
deinitializer // 소멸자
subscript
}
2. Structure
- 구조체는 인스턴스를 생성하면 스택이라는 메모리 공간에 저장합니다.
- 구조체는 값을 전달할 때마다 복사본을 생성해서 전달합니다. 이를 값 형식이라고 합니다.
- 구조체 인스턴스가 상수에 할당되면 프로퍼티 값을 변경할 수 없습니다.
struct Person {
var name: String
var age: Int
func speak() {
print("Hello, Kims")
}
}
<인스턴스 생성>
let p = Person(name: "dion", age: 27)
// 속성에 접근 -> 인스턴스 이름으로 접근합니다.
p.name
p.age
p.speak() // 메소드 호출
3. Class
- 클래스는 힙이라는 공간에 값을 저장하고 스택에는 값의 주소를 저장합니다.
- 클래스는 메모리 주소 참조에 의한 전달 방식을 사용합니다. 이를 참조 타입이라고 합니다.
class Personclass {
var name = "dion" // 초기값 저장
var age = 27
func speak() {
print("Hello")
}
}
let p1 = Personclass()
p1.name
p1.age
p.speak()
4. 구조체와 클래스 비교
- 구조체와 클래스는 새로운 형식을 만들 때 사용합니다.
- 인스턴스는 생성자 문법으로 생성합니다.
- 구조체와 클래스는 저장 공간을 처리하는 방식에 차이가 있습니다.
- 구조체는 스택이라는 메모리 공간에 값을 저장하고, 값을 전달할 때마다 복사본을 생성합니다. 이를 값 형식이라고 부릅니다.
- 클래스는 힙이라는 공간에 값을 저장합니다.
- 스택에는 힙에 저장되어 있는 값의 주소를 저장합니다. 값을 전달하면 복사본을 생성하지 않고 주소를 전달합니다. 이를 참조 형식이라고 합니다.
- 메모리 관리 방식에도 차이가 있습니다.
- 값 형식의 구조체는 인스턴스가 속한 스코프가 종료되면 메모리에서 자동으로 제거됩니다.
- 참조 형식인 클래스는 스코프에 관계없이 래퍼런스 카운팅을 통해서 메모리를 관리합니다.
728x90
'Swift' 카테고리의 다른 글
Property - 2 (0) | 2020.11.25 |
---|---|
Property - 1 (0) | 2020.11.24 |
Enumeration (0) | 2020.11.22 |
Dictionary (0) | 2020.11.20 |
Array (0) | 2020.11.19 |