728x90
반응형
1. 구조체
struct 구조체 이름 {
프로퍼티와 메서드
}
- 프로퍼티와 메서드를 합해서 구조체, 클래스의 멤버라고 한다.
- 멤버 변수 -> 프로퍼티
- 멤버 함수 -> 메서드
구조체 예시
struct User {
var nickname: String
var age: Int
func information() {
print("\(nickname) \(age)")
}
}
var user = User(nickname: "hammii", age: 25) // 구조체 안에 따로 생성자를 선언해두지 않아도, 기본적으로 값을 초기화 할 수 있는 생성자가 만들어진다.
print(user.nickname) // hammii
user.nickname = "하미"
print(user.nickname) // 하미
user.information() // 하미 25
2. 클래스
class 클래스 이름 {
프로퍼티와 메서드
}
클래스 예시
class Dog {
var name: String = ""
var age: Int = 0
init(){
}
func introduce() {
print("name \(name) age \(age)")
}
}
var dog = Dog()
dog.name = "iku"
dog.age = 9
dog.introduce() // name iku age 9
3. 구조체와 클래스의 공통점
- 값을 저장할 프로퍼티를 선언할 수 있다.
- 함수적 기능을 하는 메서드를 선언할 수 있다.
- 내부 값에 .을 사용하여 접근할 수 있다. (subscript)
- 생성자를 사용해 초기 상태를 설정할 수 있다.
- extension을 사용하여 기능을 확장할 수 있다.
- Protocol을 채택하여 기능을 설정할 수 있다.
4. 구조체와 클래스의 차이점
- 구조체
- 값 타입
- 구조체 변수를 새로운 변수에 할당할 때마다 새로운 구조체가 할당된다.
- 즉 같은 구조체를 여러 개의 변수에 할당한 뒤 값을 변경시키더라도 다른 변수에 영향을 주지 않는다. (값 자체를 복사)
- 상속이 불가능
- 클래스
- 참조 타입
- ARC로 메모리를 관리한다. (메모리 stack 영역에는 주소만 할당, heap 영역에 실제 데이터 할당)
- 상속이 가능
- 타입 캐스팅을 통해 런타임에서 클래스 인스턴스의 타입을 확인할 수 있다.
- deinit을 사용하여 클래스 인스턴스의 메모리 할당을 해제할 수 있다.
- 같은 클래스 인스턴스를 여러 개의 변수에 할당한 뒤 값을 변경시키면 모든 변수에 영향을 준다.
class SomeClass {
var count: Int = 0
}
struct SomeStruct {
var count: Int = 0
}
var class1 = SomeClass()
var class2 = class1
var class3 = class1
class3.count = 2
class1.count // 2
class2.count // 2
var struct1 = SomeStruct()
var struct2 = struct1
var struct3 = struct1
struct2.count = 3
struct3.count = 4
struct1.count // 0
struct2.count // 3
struct3.count // 4
출처: [패스트캠퍼스] 30개 프로젝트로 배우는 iOS 앱 개발 with Swift 초격차 패키지 Online.
728x90
반응형