스위프트 문법 : (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로 데이터 가져오기
-
CRUD방식 중 하나로 REST API호출하여 데이터 획득
-
획득한 api data를 파싱하여 데이터 획득
-
JSON 객체로 변환(Foundation 프레임 워크에서 제하는 JSONSerialization객체 있음,단 api data가 처음에 객체여서 NSDictionary,NSArray등 다운캐슽이 필요)
-
JSON파일 파싱 (다운캐스팅 유의)
-
VO객체에 저장하며 리스트에 추가
-
Serializzation(직렬화) : 객체의 직렬화는 객체의 내용을 바이트 단위로 변환하여 파일 또는 네트워크를 통해서 스트림(송수신)이 가능하게 하는 것
-
JSON데이터 한글로 있는 경우(EUC-KR형식) URL객체까지 불러온 후 NSString으로 인코딩해야함 EUC-KR >>> UTF
---------------REST란
REST 구성 요소:
- Resources(자원)
URI는 인터넷에 있는 자원을 나타내는 주소를 의미
이때 유일한 ID를 가지는 Resource가 서버에 존재, 이 Resource를 조작하기 위해 요청을 보냄
- Method(행위)
Resource를 조작하는 것을 Method
URI를 이용해서 Resource를 지정하고, 조작하기 위해서 method를 사용
HTTP로 예시를 들면 GET, POST, PUT, DELETE 등이 있다
- Representation of Resources(자원 표현)
REST에서 하나의 Resource는 여러 형태의 Representation으로 나타낼 수 있다.
예시를 들면 JSON, xml, test, rss 등등으로 표현 가능
REST의 특징
HTTP 표준을 기반, HTTP를 지원하는 프로그래밍 언어로 클라,서버를 구현 가능
- Uniform Interface(단일 인터페이스)
URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행, iOS나 Android 등 특정 언어나 기술에 종속되지 않고 HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용 가능
- Stateless (무상태)
작업 상태를 따로 저장하고 관리하지 않음
- Cacheable (캐싱)
HTTP 웹 표준을 사용, HTTP가 가진 캐싱 기능 사용 가능
캐싱이 가능하면 똑같은 데이터를 계속 내려 받을 필요 없음
- Client-Server 구조
자원을 가진 쪽이 Server, 자원을 요청하는 쪽이 Client
서로 간의 의존성을 줄이는 것이 가능
- Self-descriptiveness
REST API의 메세지만 보고도 이해하기 쉬운 표현으로 구성
(PUT, DELETE, POST ...)
- Layered System (계층 구조)
다중 계층으로 구성이 가능, 암호화 계층 등을 추가할 수 있다.
Gateway 네트워크 기반의 중간 매체를 사용할 수 있게 된다.
- Code on Demand(선택사항)
Server로부터 스크립트를 받아서 Client에서 실행할 수 있다.
(선택 사항)
REST 장단점
장점
-
HTTP 프로토콜을 그대로 사용하기 때문에 별도의 인프라 구축 필요 없음
-
서버와 클라이언트 역할을 분리 할 수 있게 해준다.
단점
-
사용 가능한 메소드가 4개(GET,POST,PUT,DELETE)
-
표준이 존재하지 않음
-
HTTP 통신 모델에 대해서만 지원
TDD(테스트 주도 개발)
단위 테스트(Unit Test) = 한 단위(일반적으로 class)만을 테스트하는 것
일반 개발 방식 : 요구사항 분석 > 설계>개발>테스트>배포
일반 개발 방식의 문제점
-
소비자의 요구사항이 처음부터 명확하지 않을 수 있다.
-
따라서 처음부터 완벽한 설계는 어렵다.
-
자체 버그 검출 능력 저하, 소스코드의 품질이 저하
-
자체 테스트 비용이 증가할 수 있다.
즉 이러한 코드들은 재사용이 어렵고 관리가 어려워 유지보수가 어렵다.
TDD 개발 방식 : 디자인 > 테스트 코드 작성 > 개발 > 리팩토링 > 테스트 ㅋ드 작성 > (반복)
테스트 코드를 작성한 뒤 실제 코드를 작성
테스트코드를 작성하는 도중에 발생하는 버그, 수정사항은 테스트 케이스에 추가하고 설계를 개선, 테스트가 통과된 코드만을 실제 코드로 개발.
** 이것을 반복하면 자연스럽게 코드의 버그가 줄고 소스코드가 간결해진다.
Alamofire
'http통신을 하기 위해 사용'
request/resonse 메소드들, JSON파라미터, 응답 직렬화, 인증 등등 기능 제공
Swift로 작성되었고 Objective-C의 AFNetwork의 어떤 것도 상속받지 않음.
Realm
'디바이스에 데이터 저장'(자동 로그인 등 간단하게 저장)
CocoaPods
Swift, Objective-C, 코코아 프로젝트의 종속성 관리자
프로젝트에 필요한 라이브러리 관리