안녕하세요. narvis2 입니다.
이번시간에는 지난 Struct / Class 강의에 이어 Struct과 Class의 선택 기준을 알아보도록 하겠습니다.
🍀 Struct / Class 선택기준
- ✅ 기준
- 1️⃣ 기본적으로
Struct를 사용함- 안전성 측면에서 가능한 한
struct를 사용
- 안전성 측면에서 가능한 한
- 2️⃣
Object-C코드와 연계가 필요하면class를 사용 - 3️⃣
Data의identity를 다뤄야 한다면class를 사용 (참조방식) - 4️⃣
상속이 필요할 경우 👉struct+protocol조합을 사용protocol은class와 달리,sturct,class,enum모두와 상속 관계를 지을 수 있어 선호됨
- 5️⃣ 상속이 필요하지 않고 모델이 크지 않으면
struct사용 - 6️⃣
DB연결 처럼App전체 코드에서 상황을 공유해야 할 때class사용 - 7️⃣
json파싱할 경우struct사용 - 8️⃣
serialize해서 전송하거나 파일로 저장할 일이 있다면class사용
- 1️⃣ 기본적으로
☘️ 기본적으로 struct 사용
- 일반적인 종류의
Data를 보여줄 때struct를 사용하면 됨 Swift에서struct는 다른 언어에서class에게만 허용하는 여러feature들을 사용할 수 있음struct를 사용하면app의 전체 상태를 고려할 필요없이 코드의 일부에 대해 더 쉽게 추론할 수 있음struct는 값 타입 이기 때문에struct의 지역적인 변화는 의도적으로 알리지 않는 한app의 다른 부분에서는 보이지 않음.- ✅ 결과 적으로
code section에서는 인스턴스에 변화를 줄 수 없기에 code의 한 부분에만 집중할 수 있음
참조 타입인class를 사용하는데 만약system이 크고 복잡하다면, 서로를 뒤죽박죽 참조해댈 수도 있고 아무곳에서나Instance를 변경할 수 있기에 코드 전체에 신경을 써야함
☘️ Object-C 코드와 연계가 필요할 경우 class 사용
- 만약
data를 처리하기 위해Objective-C API를 사용해야 한다거나,Objective-CFramework에 “class로 정의된” 타입으로data modeling을 해야 한다면,class와class상속을 사용
☘️ Data의 identity를 다뤄야 한다면 class를 사용 (참조방식)
app간class instance를 공유할 때, 이instance를 변경하면 이를 참조하는 코드의 다른 모든 부분에서도 이 변화가 보이길 원한다면class사용file handles,network connections,shared hardware intermediaries등등..- 만약
local DB연결을 나타내는 타입을 가지고 있다면,DB접근을 관리하는 코드는DB의 상태를 완전히 제어해야함 이 경우class를 사용하는게 적절함
identity를 가지더라도 제어할 필요가 없으면struct를 사용modeling중인data가entity에 대한 정보이며, 이entity에identity가 들어있지만control이 필요없다면struct를 사용
☘️ 상속이 필요할 경우 struct + protocol 조합을 사용
protocol상속 +struct조합으로 상속계층을 만들 수 있음protocol은class,struct,enum모두가 상속에 참여할 수 있도록 허용class상속은class끼리만 가능
- ✅
data를 어떻게modeling할지 고르고 있다면, 우선protocol상속을 쓰고struct가 채택하도록 설정