티스토리 뷰

IOS/swift

[Swift] class & struct

내일도이렇게 2022. 2. 20. 16:49

구조체와 클래스

 데이터를 용도에 맞게 묶어 표현고자 할 때 용이하고 OOP 를 위한 필수 요소로 사용된다.

 

1. 구조체 

  • 인스턴스 생성시 자동으로 멤버와이즈 이니셜라이저가 생성이 된다.
  • 값 타입 
  • 메모리의 스택영역에 저장 ( 인스턴스는 스택 저장) 
  • 메모리의 값이 복사되어 전달
  • 상속 불가능

let으로 선언시 인스턴스 내부의 프로퍼티 값을 변경할 수 없다.

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


var a: Person = Person(name:"jj", age:28)
a.name = "mm" // 변경가능
a.age = 33 // 변경가능

let b: Person = Person(name: "mm", age:30) 
b.name = "hh" // 변경불가능!

2. 클래스 

  • 편의 생성자 존재 
  • 데이터는 메모리의 힙에 저장 , 주소는 스택에 저장 (인스턴스는 힙에 저장 ) 
  • 메모리의 주소를 전달
  • 참조 타입

 

참조타입이므로 클래스의 인스터스를 상수로 선언해도 내부 프로퍼티 값을 변경할 수 있다. 

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


var aa: Person = Person(name:"aa",age:20)
aa.name = "bb" 

let bb: Person = Person(name:"bb",age:23)
bb.name = "cc"

 

간단한 값의 집합을 캡슐화할때, 상속이 필요없을 때 구조체 사용

상속 구조가 필요하거나 참조되는 것이 더 효율적일 때 클래스 사용

 

Reference

https://jinshine.github.io/2018/05/20/Swift/4.%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%99%80%20%ED%81%B4%EB%9E%98%EC%8A%A4/

'IOS > swift' 카테고리의 다른 글

[Swift] Optional  (0) 2022.03.22
[Swift] Codable  (0) 2022.03.22
Property wrapper (UserDefaults 적용)  (0) 2022.03.05
Result Type  (0) 2022.03.03
[Swift] lazy  (0) 2022.03.01
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함