SeSAC iOS 데뷔과정 2기

0801 새싹 21회차 정리

Lia's iOS 2022. 8. 1. 22:15
iOS 앱 개발자 데뷔 과정 21회차

 

 

 

 

#0. Memo

- 프로토콜로 Identifier 쉽게 관리하기

여태까지는 리터럴한 문자열 사용을 줄이기 위해, static let을 통해 클래스마다 Identifier를 저장해서 사용했었다.

하지만 이제 여러 문법을 배웠으니 프로토콜과 연산 프로퍼티, 익스텐션을 활용해 더 쉽게 관리할 수 있다.

프로토콜 활용
실제 적용

 

 

 

- 구조체와 열거형의 타입 저장 프로퍼티 활용

만약 enum의 case를 활용해서 StoryboardName을 관리했을 때 어떤 문제가 있을 수 있을까?

우선, StoryboardName은 대문자로 시작하지만 case는 소문자로 적는 것이 보편적이다.

따라서 뒤에 rawValue를 따로 입력하거나, 어쩔 수 없이 case를 대문자로 적을 수도 있다.

그리고 두 방법 모두 실제로 사용할 때에는 rawValue를 꼭 입력해줘야 하기 때문에 코드가 길어질 수 있다.

게다가 enum의 경우에는 rawValue가 case마다 고유해야 하기 때문에, 중복되게 작성할 수 없다는 제약도 있다.

이럴 때에는 타입 저장 프로퍼티를 활용하는 것이 도움이 될 수 있다.

구조체(좌), 열거형(우)

타입 프로퍼티만 존재할 경우 인스턴스를 생성할 수 없도록 private init을 작성하면 더 좋다.

enum은 인스턴스를 생성할 수 없는 타입이니 생략해도 된다.

 

 

 

- 오픈소스를 활용해 서버에서 데이터 받아오기

SwiftyJSON와 Alamofire를 활용해 복권 당첨 번호를 가져오는 코드이다.

해당 코드는 SwiftyJSON.Git Hub의 Work With Alamofire 코드를 참고해서 작성했다.

주의할 점이 하나 있는데, Alamofire가 아닌 AF로 바꿔줘야 에러가 발생하지 않는다.

 

 

 

 

#1. Checklist

- Singleton Pattern

자기 자신의 인스턴스를 타입 프로퍼티 형태로 저장하여, 별도의 인스턴스 생성 없이 공용으로 사용할 수 있다.

싱글톤 패턴

인스턴스를 생성할 필요가 없는 해당 class의 경우, private init을 호출하여 다른 곳에서의 인스턴스 생성을 막을 수 있다.

 

 

 

- Type property in struct vs type property in enum

#0. Memo 구조체와 열거형의 타입 저장 프로퍼티 활용 참고

 

 

 

- enum case vs enum static

#0. Memo 구조체와 열거형의 타입 저장 프로퍼티 활용 참고

 

 

 

- HTTP

Hyper Text Transfer Protocol의 약자로, 인터넷에서 데이터를 주고받을 수 있는 프로토콜을 뜻한다.

메세지를 평문 그대로 전송하기 때문에, 주고 받는 데이터가 공개될 수 있는 여지가 있다.

 

Connectionless (비연결성) 이기 때문에, 모든 클라이언트의 요청에 대해 항상 새롭게 연결하고 해제하는 과정을 거친다.

 

Stateless (무상태) 의 특성을 가지고 있어 Stateless Protocol이라고 불리기도 한다.

무상태란, 서버가 클라이언트의 정보를 기억하고 있지 않아서 클라이언트를 식별할 수 없는 상태를 뜻한다.

웹에서는 쿠키, 세션을 통해 클라이언트를 식별하고, 앱에서는 토큰을 사용하여 클라이언트를 식별한다.

 

 

 

- HTTP Request - HTTP Response

클라이언트의 요청이 있을 때 서버가 응답하는 방식이다.

단방향 통신이기 때문에 서버가 클라이언트에게 먼저 정보를 주지 못한다.

서버의 새로운 정보를 받기 위해서는 클라이언트가 서버에 재요청을 해서 데이터를 갱신받는 방식이기 때문에, 클라이언트의 요청이 없으면 서버의 데이터를 받아올 수 없다.

 

 

- HTTP Status Code

Status Code (상태 코드) 란, 클라이언트와 서버 간 통신의 성공/실패 여부 및 오류 원인을 알려주는 코드이다.

보편적인 상태 코드가 존재하지만 다르게 사용할 수 있고, 서버의 프레임워크 종류에 따라 상태 코드 방식익 다르기 때문에 협업이 필수이다.

 

 

 

 

#2. Assignment

- Lottery API 구현하기

로또 당첨 번호 7개를 레이블에 나타나도록 구현해 보자.

 

 

 

- Bear API 구현하기

버튼을 누르면 맥주를 랜덤으로 추천해주는 앱을 간단히 서버통신 해보자.

결과물(좌), 코드(우)

Insomnia에서 확인해보니 API가 배열 형태였고, 0번째 인덱스에 정보들이 옹기종기 모여 있어서 저렇게 불러왔다.

UIImage를 url로 넣기 위해 Kingfisher 오픈소스를 다운받아 사용했다.

 

 

 

 

# 새로 사용한 오픈소스

Alamofire : https://github.com/Alamofire/Alamofire

Alamofire는 모든 iOS 앱개발자가 사용한다고 해도 과언이 아니다.

 

SwiftyJSON : https://github.com/SwiftyJSON/SwiftyJSON 

Alamofire의 하위호환 비슷한 느낌으로 사용자가 점점 줄어드는 추세이지만, 사용하고 있는 앱도 많기 때문에 익혀야 한다.