[TIL] Cocoa Touch Framework, MVC

남보경·2023년 8월 23일
0

TIL

목록 보기
9/10
post-thumbnail

1. Cocoa Touch Framework

Cocoa Touch Framework
Apple 기기에서 구동되는 App을 개발하기 위해 사용되는 통합 프레임워크
(별도로 MacOS 개발 시에는 Cocoa Framework를 사용한다고 한다.)

1) URL Session

Apple이 제공하는 Foundation framework에서 제공하는 API로 HTTP 요청을 보내고 받는 기능을 제공한다.
비동기적인 방식으로 동작하기 때문에 백그라운드에서 작업이 이루어질 수 있다!

  • 여기서 비동기적인 방식이란 다른 task의 결과가 나오기 이전이라도 즉, 실행되는 와중이라도 실행되는 방식임을 의미한다. 우리가 음악을 틀고 웹 서핑을 하거나 다른 어플을 켜도 노래가 끊기지 않는 이유는 비동기 방식이기 때문!

  • 특징: 다양한 네트워크 통신 프로토콜을 제공(HTTP, HTTPS, FTP)하며 파일을 업로드하고 다운로드 하는 기능을 제공한다. Authentication, Vookie, Cache 등의 웹의 기본적인 데이터에 대한 기능들도 같이 제공한다.

class URLManager {
    static let shared = URLManager()
    //dummy url
    let url = URL(string: "https://jsonplaceholder.typicode.com/todos")!
    private init() {}

    func getJsonData(path: String, completion: @escaping (Result<Data, Error>) -> Void) {
        // Result type을 가진 completion handler를 정의
        // URLSession에 접근할 때는 shared를 사용해서 접근
        // dataTask라는 함수는 url에 대한 결과값을 가져오게 함
        let task = URLSession.shared.dataTask(with: url.appending(path: path))
// 여기서 path란 DNS 주소 뒤에 붙는 값을 칭함 
// url의 값 뒤에 path를 appending 함으로써 결과값을 task에 할당
{ data, response, error in
            if let error { // 에러 발생 시
                print("Error")
				completion(.failure(NetworkError.emptyResponse)
                return
            }
            guard let data = data else {
                print("Error: no data")
                completion(.failure(NetworkError.emptyResponse))
                return
            }
            completion(.success(data))
        }
        task.resume()
		//data task에 대한 내용을 실행하는 resume 함수
    }
}
enum NetworkError: Error {
    case emptyResponse
}

// 뷰컨에서 사용할 때
class ViewController: UIViewController {
	override func viewDidLoad() {
		super.viewDidLoad()
		URLManager.shared.getJasonData(path: "1") { result in switch result
        // completion handler로 지정한 값
			case .success(let data):
				print("success", data)
			case .failure(_):
				print("fail")
			}
		}
	}
}

//결과 success 83 bytes

2. MVC Architecture

Architecture
앱의 구성요소들의 역할과 책임을 분리하여 유지보수를 용이하게 하여 협업을 손쉽게 만들고 확장성을 높이는 방법

Architecture의 종류는 다양한 종류가 있지만 오늘은 iOS 개발에서 자주 쓰인다고 하는 MVC Architecture에 대해서 정리해보고자 한다.

그림의 내용을 이해하기 쉽도록 순서대로 정리해보자면 다음과 같다!

<Model을 빼고 생각해보자>

a. view를 통해서 (button or textfield 등) user의 action을 받아서 수행
b. controller는 이 action을 탐지하고 update가 가능한 정보를 감지한 경우 이를 view에 update

<Model을 끼워서 생각해보자>

a. view를 통해서 (button or textfield 등) user의 action을 받아서 수행
b. controller는 이 action을 탐지하고 update가 가능한 정보를 감지, 만약 action을 통해 입력된 정보가 Model에 있는 data라면 update가 가능한 경우 이를 Model로 전달
c. Model이 update 완료 후 Controller에게 notify
d. 변경된 정보를 토대로 Controller가 View에 update

코드로 적용 시 막연하게 잘 이해가 되지 않을 수 있다. 좀 더 간단하게 생각해보자!
M: Model은 Data를 저장할 수 있는 구조를 만든다!(네트워크든 swift 문법을 이용한 것이든!)
V: View는 Model에서 구축한 data를 띄울 수 있어야 한다.
C: Controller는 View의 action을 감지해 Model의 변화를 View에 전달한다.

profile
꿈꾸자 그리고 그것을 이뤄내자

0개의 댓글