분류 전체보기
함수형 프로그래밍에 대하여
1. 개요 함수형 프로그래밍은 프로그래밍 패러다임의 일종으로 선언형 프로그래밍에 속한다. 수학적 함수인 순수 함수의 조합으로 프로그램을 설계하는 관점을 의미한다. 명령형 프로그래밍 vs 선언형 프로그래밍 명령형은 프로그램이 동작하는 과정과 방식(어떻게)을 결정하여 프로그램을 설계한다면, 선언형은 처리할 작업(무엇을)을 결정(선언)하여 프로그램을 설계하는 방법이다. 선언형에는 대표적으로 함수형 프로그래밍, 반응형 프로그래밍이 있다. 함수형 프로그래밍 이전의 패러다임은 절차적 프로그래밍에서 객체 지향 프로그래밍으로 변화했다. 하지만 시간이 지나면서 점점 프로그램의 규모가 커지고 복잡해짐에 따라 문제가 발생하게 됐다. 명령형 프로그램은 부작용(또는 부수효과라고 한다)을 이용하여 프로그램을 동작하게 만들기 때문..
Git과 Github에 대하여 (feat. Merge VS Rebase)
1. Git이란? Git은 코드나 소스파일을 버전별로 관리할 수 있는 버전 관리 시스템(VCS) 중 하나이다. Git은 자신이 관리하는 영역의 모든 파일들의 변경사항을 추적한다. Git은 변경사항 뿐 아니라 작업한 사람, 날짜 등을 추적할 수 있어서 협업 시 효과적으로 코드를 관리할 수 있으며 여러 사람들과 동기화가 가능하다는 장점이 있다. 코드와 소스파일을 버전별로 관리하기 때문에 특정 시점(버전)으로 롤백이 가능해서 자유롭게 기능을 개발하고 테스트 할 수 있다. 무엇보다 파일에 문제가 발생했을 때 원인을 파악하고 해결하는 대에 매우 편리하다. 2. Git의 구성 요소 1) Working Directory Git이 관리하는 파일들이 존재하는 영역으로 .git 디렉토리를 제외한 모든 파일들이 포함된다. ..
애자일(Agile)에 대하여
1. 개념 애자일은 소프트웨어 개발 방법 이론 중 하나로 신속한 반복 작업을 통해 소프트웨어를 개발하고 변화를 적극 수용하여 소프트웨어를 지속적으로 개선해나가는 방법을 의미한다. 애자일은 소프트웨어를 개발하기 위한 어떤 규칙을 제공하는 것이 아니라 개발에 필요한 가치를 제공하는 가치 체계이자 업무를 바라보는 관점이다. 따라서 애자일(Agile)은 단어의 뜻 그대로 기민하게 소프트웨어를 개발하기 위한 모든 방법을 포함한다. 애자일 방식의 개발 프로세스에는 XP, Scrum, TDD 등이 있다. 2. 배경 애자일은 전통적인 개발 방법인 워터풀 방식의 문제점을 해결하고자 등장했다. 공장 생산 라인의 제조 방법에서 파생되어 소프트웨어 개발에 적용된 워터풀 방식은 체계적인 절차와 세부적인 계획을 통해서 최초 사양..
RESTful API에 대하여
1. RESTful API란? 1) API의 정의와 역할 API는 Application Programming Interface의 약자로, 서로 다른 프로그램 또는 시스템 사이의 상호작용을 위해 정해놓은 규칙(인터페이스)을 의미한다. UI가 사용자와 프로그램 사이의 중개자라면 API는 프로그램과 프로그램 사이의 중개자로서, 주로 프로그램의 기능을 간접적으로 외부에 제공하고자 할 때 정의하여 사용한다. API 중에서도 네트워크 통신을 사용하는 웹 API는 양쪽 프로그램을 서버와 클라이언트로 나누고 중간에서 게이트웨이 역할을 한다. 웹 API 용어 리소스(Resource): 이미지, 동영상, 텍스트, 사운드 등 모든 유형의 데이터 클라이언트(Client): 리소스에 접근을 요청하는 사용자 또는 프로그램 서버(..
객체 지향 프로그래밍(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에서 하나의 테이블처럼 취..
[IOS] API 통신에서 겪은 SSL 인증서 및 ATS 관련 이슈에 대하여
출시 프로젝트에서 공공데이터포털의 투어 API를 사용했다. HTTPS를 지원하는 API 서비스였기 때문에 출시 과정에서 문제없이 ATS를 사용할 수 있을 거라고 생각했지만 결국 보안 관련 이슈를 겪게됐고 문제의 원인과 해결 방법을 작성한 글이다. 1. 이슈를 겪게된 과정 나는 공공데이터포털에서 제공하는 오픈 API 서비스를 출시 앱에 사용하기 위해서 Alamofire를 통해 제공되는 URL로 네트워크 요청을 시도했는데 아래 콘솔 메시지가 출력됐다. Result : FAIL Error : Error Domain=NSURLErrorDomain Code=-1200 "An SSL error has occurred and a secure connection to the server cannot be made." ..