Skip to content

Latest commit

 

History

History
197 lines (105 loc) · 6.21 KB

TIL211222.md

File metadata and controls

197 lines (105 loc) · 6.21 KB

Daily to do list

스위프트 문법 : (o)
타입 캐스팅과 타입 검사 (어제 못했던 옵셔널 체이닝)


HIG : (o)
Launching


CS : (x)


코딩테스트 : (x)


오늘의 회고

3일차 오늘도 회사에서 쉬는시간마다 정리해놨던 내용을 붙여넣으려 한다.. 뭔가 허전해 보이기도 하지만 그래도 내가 조금씩 써놓은 메모를 나중에 본다면 이런 생각을 했구나 다시 생각을 할 수 있지 않을까.. 주말에는 디자인 패턴하고 파이썬으로만 풀었던 코테 문제랑 cs공부한 걸 블로그에 올려야겠다..

211222

옵셔널 체이닝 :

체인처럼 연쇄적으로 옵셔널에 접근하는 방법이다.

코드가 매우 간결하게 작성할 수 있다.

옵셔널 구조체가 있을 경우

my.name >>> my?.name

이렇게 ?를 붙여서 부를 경우 변수가 nil이라면 nil을 반환 아니면 제 값을 반환

옵셔널 바인딩 + 옵셔널 체이닝

옵셔널을 추출하는 방법

if let my_email = my?.contacts.email{

print("check (my_email)")

}

이런식으로 체이닝과 바인딩을 동시에

만약에 my_email이 nil이라면 값이 할당되지 않으며 else로 빠짐

RESTful, TCP/IP Socket

http로 받을 경우 ATS보안 설정 필요

ATS : 어플과 웹 서비스 사이에 보안 향상을 위한 기능.

iOS 9.0 macOS 10.11부터 적용 가능, 2016년부터 새롭 만들어지는 어플은 반드시 ATS 사용

URLSession, CFURL, NSURL Connection API를 이용해 데이터를 주고받을 때 ATS 기능을 기본적으로 사용해야 한다. ATS가 활성화되어 있을 때는 HTTP 통신을 할 수 없다.

TLS(전송 계층 보안) : 암호 프로토콜, HTTPS: TLS를 사용해 암호화된 연결을 하는 HTTP

REST API로 데이터 가져오기

  1. CRUD방식 중 하나로 REST API호출하여 데이터 획득

  2. 획득한 api data를 파싱하여 데이터 획득

  3. JSON 객체로 변환(Foundation 프레임 워크에서 제하는 JSONSerialization객체 있음,단 api data가 처음에 객체여서 NSDictionary,NSArray등 다운캐슽이 필요)

  4. JSON파일 파싱 (다운캐스팅 유의)

  5. VO객체에 저장하며 리스트에 추가

  • Serializzation(직렬화) : 객체의 직렬화는 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해서 스트림(송수신)이 가능하게 하는 것

  • JSON데이터 한글로 있는 경우(EUC-KR형식) URL객체까지 불러온 후 NSString으로 인코딩해야함 EUC-KR >>> UTF

---------------REST란

REST 구성 요소:

  1. Resources(자원)

URI는 인터넷에 있는 자원을 나타내는 주소를 의미

이때 유일한 ID를 가지는 Resource가 서버에 존재, 이 Resource를 조작하기 위해 요청을 보냄

  1. Method(행위)

Resource를 조작하는 것을 Method

URI를 이용해서 Resource를 지정하고, 조작하기 위해서 method를 사용

HTTP로 예시를 들면 GET, POST, PUT, DELETE 등이 있다

  1. Representation of Resources(자원 표현)

REST에서 하나의 Resource는 여러 형태의 Representation으로 나타낼 수 있다.

예시를 들면 JSON, xml, test, rss 등등으로 표현 가능

REST의 특징

HTTP 표준을 기반, HTTP를 지원하는 프로그래밍 언어로 클라,서버를 구현 가능

  1. Uniform Interface(단일 인터페이스)

URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행, iOS나 Android 등 특정 언어나 기술에 종속되지 않고 HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용 가능

  1. Stateless (무상태)

작업 상태를 따로 저장하고 관리하지 않음

  1. Cacheable (캐싱)

HTTP 웹 표준을 사용, HTTP가 가진 캐싱 기능 사용 가능

캐싱이 가능하면 똑같은 데이터를 계속 내려 받을 필요 없음

  1. Client-Server 구조

자원을 가진 쪽이 Server, 자원을 요청하는 쪽이 Client

서로 간의 의존성을 줄이는 것이 가능

  1. Self-descriptiveness

REST API의 메세지만 보고도 이해하기 쉬운 표현으로 구성

(PUT, DELETE, POST ...)

  1. Layered System (계층 구조)

다중 계층으로 구성이 가능, 암호화 계층 등을 추가할 수 있다.

Gateway 네트워크 기반의 중간 매체를 사용할 수 있게 된다.

  1. Code on Demand(선택사항)

Server로부터 스크립트를 받아서 Client에서 실행할 수 있다.

(선택 사항)

REST 장단점

장점

  • HTTP 프로토콜을 그대로 사용하기 때문에 별도의 인프라 구축 필요 없음

  • 서버와 클라이언트 역할을 분리 할 수 있게 해준다.

단점

  • 사용 가능한 메소드가 4개(GET,POST,PUT,DELETE)

  • 표준이 존재하지 않음

  • HTTP 통신 모델에 대해서만 지원

TDD(테스트 주도 개발)

단위 테스트(Unit Test) = 한 단위(일반적으로 class)만을 테스트하는 것

일반 개발 방식 : 요구사항 분석 > 설계>개발>테스트>배포

일반 개발 방식의 문제점

  1. 소비자의 요구사항이 처음부터 명확하지 않을 수 있다.

  2. 따라서 처음부터 완벽한 설계는 어렵다.

  3. 자체 버그 검출 능력 저하, 소스코드의 품질이 저하

  4. 자체 테스트 비용이 증가할 수 있다.

즉 이러한 코드들은 재사용이 어렵고 관리가 어려워 유지보수가 어렵다.

TDD 개발 방식 : 디자인 > 테스트 코드 작성 > 개발 > 리팩토링 > 테스트 ㅋ드 작성 > (반복)

테스트 코드를 작성한 뒤 실제 코드를 작성

테스트코드를 작성하는 도중에 발생하는 버그, 수정사항은 테스트 케이스에 추가하고 설계를 개선, 테스트가 통과된 코드만을 실제 코드로 개발.

** 이것을 반복하면 자연스럽게 코드의 버그가 줄고 소스코드가 간결해진다.

Alamofire

'http통신을 하기 위해 사용'

request/resonse 메소드들, JSON파라미터, 응답 직렬화, 인증 등등 기능 제공

Swift로 작성되었고 Objective-C의 AFNetwork의 어떤 것도 상속받지 않음.

Realm

'디바이스에 데이터 저장'(자동 로그인 등 간단하게 저장)

CocoaPods

Swift, Objective-C, 코코아 프로젝트의 종속성 관리자

프로젝트에 필요한 라이브러리 관리