본문 바로가기
iOS

[13일차] Structure(구조)와 Class

by 디지털노마더 2020. 7. 30.

일반적으로 Swift에서 객체 구조는 아래와 같다.

 Object = Data + Method

Structure vs Class

Structure Class
Value Types Reference Types
Copy Share
Stack Heap

 

- Structure : 관계 있는 데이터를 모아서 표현할 때 사용 

- Class : 데이터를 모아서 표현하되, 같은 데이터를 참조할 때 사용

 

 

왜 Structure 구조를 사용해야 할까?

위와 같이 첫번째 줄처럼 변수를 일렬로 나열하는 것보다, 두번째 줄처럼 사람이 이해하기 쉬운 구조로 나누어서 변수를 표현해주는 것이

가독성이 좋으며 협업이나 리펙토링 과정에서도 코드파악에 용이하다.

 

아래는 Structure(구조) 형식을 이용하여 "제일 가까운 위치의 배달 가능한 편의점 찾기" 문제 예시

import UIKit

// 문제 : 제일 가까운 위치의 배달 가능한 편의점을 구하라

// Given distance func
func distance(current: Location, target: Location) -> Double {
    // 피타고라스..
    let distanceX = Double(target.x - current.x)
    let distanceY = Double(target.y - current.y)
    let distance = sqrt(distanceX * distanceX + distanceY * distanceY)
    return distance
}


struct Location {
    let x: Int
    let y: Int
}

struct Store {
    let loc: Location
    var name: String
    let deliveryRange = 2.0 // 반경은 2M 이내
    
    func isDeliverable(userLoc: Location) -> Bool {
        let distanceToStore = distance(current: userLoc, target: loc)
        return distanceToStore < deliveryRange
    }
}

// Given stores
let store1 = Store(loc: Location(x: 3, y: 5), name: "gs")
let store2 = Store(loc: Location(x: 4, y: 6), name: "seven")
let store3 = Store(loc: Location(x: 1, y: 7), name: "cu")


// Given printClosestStore func
func printClosestStore(currentLocation: Location, stores: [Store]) {
    var closestStoreName = ""
    var closestStoreDistance = Double.infinity
    var isDeliverable = false
    
    for store in stores {
        let distanceToStore = distance(current: currentLocation, target: store.loc)
        closestStoreDistance = min(distanceToStore, closestStoreDistance)
        if closestStoreDistance == distanceToStore {
            closestStoreName = store.name
            isDeliverable = store.isDeliverable(userLoc: currentLocation)
        }
    }
    print("Closest store: \(closestStoreName) deliverable: \(isDeliverable)")
}

// Set stores and myLocation
let stores = [store1, store2, store3]
let myLocation = Location(x: 2, y: 5)


// Use printClosestStore func to print
printClosestStore(currentLocation: myLocation, stores: stores)

 

* Protocol
 : 지켜야할 약속 (규약)

서비스를 이용할 해야할 일들을 의미

ex) 뮤직 앱 서비스 이용 시 해야할 일은?
 회원가입 / 로그인 / 결제 등등..

 

댓글