SWIFT

    객체 지향 프로그래밍(OOP)에 대하여

    1. 개요 객체 지향 프로그래밍은 OOP(Object-Oriented Programming)라고도 하며, 프로그램을 설계하는 방법 이론 중 하나로 명령형 프로그래밍 패러다임에 속한다. 명령형 프로그래밍이란? 프로그래밍 패러다임 중 하나로 여러 작업들이 순차적으로 처리되는 과정과 방식을 결정하여 프로그램을 설계하는 관점이다. 한 예시로 명령형 프로그래밍에 속하는 순차적 프로그래밍은 명령어를 순차적으로 처리하는 방식으로 프로그램을 설계한다. 객체 지향 프로그래밍 이전에는 절차적 프로그래밍 방식이 지배적이었는데, 절차적 프로그래밍은 프로시저(루틴, 서브루틴, 함수, 메서드)를 순차적으로 호출하여 프로그램을 설계했다. 절차적 프로그래밍은 처리 과정을 하나의 묶음으로 구조화할 수 있어서 모듈화가 쉽고 속도가 빨랐..

    [RxSwift] RxSwift 톺아보기 - 2

    RxSwift를 사용하면서 공부한 내용을 정리한 글입니다. 1. Disposing 1) 개요 Disposable 타입의 dispose() 메서드를 통해 원하는 시기에 Observable Sequence를 종료하고 메모리에 할당된 subscription 리소스를 해제할 수 있다. 그러나 dispose() 메서드를 수동으로 호출하는 것은 좋은 방법이 아니며 DisposeBag 클래스를 사용해 리소스를 정리하는 방법이 있다. 일반적인 Observable Sequence는 completed 또는 error 이벤트를 방출하여 정상적으로 종료됐을 때 메모리에서 해제된다. 하지만 버튼 탭 처럼 자연스럽게 종료되지 않는 Sequence의 경우 직접 리소스를 정리해줘야한다. 2) DisposeBag DisposeBag은..

    [RxSwift] RxSwift 톺아보기 - 1

    RxSwift를 써보면서 공부했던 내용을 간략하게 정리한 글입니다. 1. 소개 1) 왜 RxSwift를 사용하는가? 우리가 앱을 만들기 위해 작성하는 대부분의 코드는 외부 이벤트(UI 컨트롤 등)에 대한 응답을 다룬다. 예를 들어 버튼 터치에 대한 액션 메서드를 작성하거나 기기의 방향 변경에 대한 옵저버를 추가해서 특정 작업을 수행하는 코드를 작성한다. 뿐만 아니라 네트워크 통신으로 받은 응답을 처리하기 위해 클로저 구문을 작성하기도 한다. RxSwift는 이러한 모든 비동기적인 응답 코드들을 처리하는 일관된 시스템이다. 2) 개념 모든 Observable 객체는 Sequence의 인스턴스로 간주된다. Sequence 순차적, 반복적으로 자신의 원소에 접근할 수 있는 타입을 의미하며, for-each 같..

    [IOS] UIGestureRecognizer 사용해서 지도 조작하기

    출시 프로젝트에서 사용한 네이버 지도는 기본적인 제스처가 설정돼있다. 일반적으로 Pan 제스처는 카메라를 상하좌우로 이동시키고, Pinch 제스처는 카메라의 확대 축소를 담당한다. 그런데 사용자 주변의 특정 장소를 찾는다는 앱의 특성 상 사용자의 위치를 중심으로 지도의 카메라가 움직이는 새로운 조작법을 만들고 싶었다. 이 글은 게임 포켓몬고의 제스쳐 액션을 UIGestureRecognizer를 통해 구현한 경험을 정리한 글이다. 1. 분석 포켓몬고의 메인 화면에서 Pan제스처는 카메라의 회전을 담당한다. 캐릭터를 중심으로 원을 그리면서 Panning하면 해당 방향(시계 또는 반시계)으로 카메라가 회전한다. 이 제스처로 사용자 위치 주변을 360도로 둘러볼 수 있다. 또한 포켓몬고의 Pinch 제스처는 카..

    [IOS] Realm 사용해서 데이터 저장하기

    출시 프로젝트 중 API 통신으로 받아온 데이터를 앱 내부에 저장해놓고 사용해야 했는데 Realm SDK를 사용해서 데이터 모델을 설계했던 경험을 정리한 글이다. 1. 클래스 Realm은 DB에 저장할 타입으로 클래스를 사용한다. 구조체를 사용하지 않는 가장 큰 이유는 "live"에 포커스를 맞춰서 그렇다고 한다. Realm DB에 저장하려는 클래스는 Object 클래스를 상속해야하고 내부 프로퍼티에 @Persisted 라는 property wrapper 속성을 사용한다. class Place: Object { @Persisted(primaryKey: true) var contentId: Int @Persisted var image: String } 위의 Place 클래스는 DB에서 하나의 테이블처럼 취..

    [Sesac IOS] 43~44일차 TIL

    43~44일차 수업을 정리한 글입니다. Learned 반응형 프로그래밍 (Reactive Programming) 1) 개요 객체지향, 함수형 프로그래밍 같은 프로그래밍 패러다임 중 하나로서, 데이터의 흐름과 변경사항의 전파에 중점을 둔 선언적 프로그래밍 패러다임임. 한 예시로, 엑셀의 스프레드 시트에서 C=A+B, D=C+A라는 연산을 선언해두고 A 또는 B의 값이 변경되면 변경사항이 전파되어 C 의 값이 자동으로 변하고 그에 따라 D의 값도 변경되는 데이터의 흐름이 만들어짐. 이런 관점을 프로그래밍에 활용해 프로그램을 설계하는 것이 반응형 프로그래밍이고 이 반응형 프로그래밍과 어울리는 아키텍쳐 패턴이 MVVM임. 명령형 프로그래밍 vs 선언적 프로그래밍 명령형 프로그래밍은 시간 순서대로 작업을 처리할 ..

    [Sesac IOS] 39일차 TIL

    39일차 수업 내용을 정리한 글입니다. Learned 높은 성능의 Swift Code를 작성하는 방법 1. 최적화 활성화 Swift는 코드를 최적화하기 위해 설정할 수 있는 3가지 레벨 (optimization level)을 제공하고 있으며 각 레벨마다 최적화의 수준이 다르다. Onone: 최소한의 최적화를 수행하고 모든 디버그 정보를 보존함. 주로 Debug 모드에서 사용됨. O: 대부분의 Release 모드(제품 출시용 코드)에서 사용되는 최적화 레벨로서, 컴파일러가 적극적으로 최적화를 수행하며 디버그 정보가 손실될 수 있음. Osize: 컴파일러가 성능보다 코드의 크기를 우선 시 하여 최적화를 수행함. 2. Whole Module Optimization (WMO) Swift는 기본적으로 각 파일을 ..

    [Sesac IOS] 22일차 TIL

    22일차 수업 내용을 정리한 글입니다. Learned HTTP vs Socket 1) 소켓의 특징 클라이언트의 요청 없이도 데이터를 주고 받을 수 있는 양방향 통신 연결을 계속 유지하기 때문에 상대적으로 리소스를 많이 사용함. 대표적으로 채팅 앱에서 서버가 클라이언트에게 메시지를 전달하는데 사용 2) HTTP 통신 클라이언트의 요청이 있어야 데이터를 주고받을 수 있는 단방향 통신 데이터를 받기 위해서는 반드시 서버에 요청을 보내야함. 요청과 응답을 보낼 때만 연결되기 때문에 상대적으로 리소스를 덜 사용함. (HTTP 통신의 특징 중 비연결성) 3) HTTPS TCP와 HTTP 사이에서 작용하며 데이터 패킷을 암호화하는 역할 URL은 노출되지만 쿼리스트링과 파라미터는 암호화되어 전송 HTTP는 통신 과정..

    [Swift] COW(Copy-on-Write)에 대하여

    mutating 키워드를 찾아보다가 알게된 cow에 대한 개념을 정리한 글입니다. COW (Copy-On-Write) 직역하면 쓰기(Write)에서 복사(Copy) 한다는 뜻이다. 이것을 설명하기 위해 예를 들어보자. 우리가 알고있는 구조체는 값 타입이기 때문에 새로운 변수로 값이 전달될때 값 복사가 일어난다고 알고 있지만 사실은 조금 다르다. Swift에서 기본 데이터 타입(Int, Double, String)과 컬렉션 타입(Array, Dictionary)은 구조체로 구현돼있지만 아래 같은 상황에서 값 복사가 일어나지 않는다. var first = [1, 2, 3, 4, 5] var second = first var third = first 만약 first의 원소 개수가 대략 천만개라면 값을 전달할때..

    [IOS] UIView의 tintColor 프로퍼티에 대하여

    앱의 화면에서 일관된 글자색과 배경색을 적용하기 위해 tintColor 프로퍼티를 사용하면서 공부하고 경험한 내용을 정리한 글입니다. 1. tintColor의 정의 애플의 개발자 문서에서는 다음과 같이 설명하고 있다. The first nondefault tint color value in the view’s hierarchy, ascending from and starting with the view itself. UIView의 틴트 컬러란 자기 자신의 뷰 객체부터 시작하여 뷰 계층을 따라 올라가면서 처음 만나는 default가 아닌 tintColor의 값을 리턴해주는 프로퍼티이다. tintColor는 시스템 UI가 활성화 상태일때 시각적으로 보여지며, system 타입의 UIButton에서 흔히 볼 ..