전체 글 25

[iOS] RealmSwift 라이브러리 사용해보기

Realm? 오픈소스로 제공되는 모바일 데이터베이스 관리 라이브러리. 클래스 단위로 Table이 생성되고, 객체 단위로 row가 구성된다. RealmSwift 우선 pod 'RealmSwift', '5.3.3' 으로 Pods에 프레임워크 생성해주고, import RealmSwift 해서 쓰면 끝이다. 우선 Realm 상에 저장할 객체 클래스를 생성한다. 여기서 주의할 점은 Realm에서 column 형태로 사용하려면, @objc dynamic 을 반드시 붙여줘야 한다 class Cat: Object { @objc dynamic var name: String? @objc dynamic var color: String? @objc dynamic var gender: String? } 그리고 Realm 객체를..

iOS 2020.10.06

[카카오] 실패율

문제 설명 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스테이지 차이가 너무 큰 것이 문제였다. 이 문제를 어떻게 할까 고민 한 그녀는 동적으로 게임 시간을 늘려서 난이도를 조절하기로 했다. 역시 슈퍼 개발자라 대부분의 로직은 쉽게 구현했지만, 실패율을 구하는 부분에서 위기에 빠지고 말았다. 오렐리를 위해 실패율을 구하는 코드를 완성하라. 실패율은 다음과 같이 정의한다. 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 수 / 스테이지에 도달한 플레이어 수 전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변..

기타 2020.10.01

[카카오] 오픈채팅방

문제 설명 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오픈 채팅방을 개설한 사람을 위해, 다양한 사람들이 들어오고, 나가는 것을 지켜볼 수 있는 관리자창을 만들기로 했다. 채팅방에 누군가 들어오면 다음 메시지가 출력된다. [닉네임]님이 들어왔습니다. 채팅방에서 누군가 나가면 다음 메시지가 출력된다. [닉네임]님이 나갔습니다. 채팅방에서 닉네임을 변경하는 방법은 다음과 같이 두 가지이다. 채팅방을 나간 후, 새로운 닉네임으로 다시 들어간다. 채팅방에서 닉네임을 변경한다. 닉네임을 변경할 때는 기존에 채팅방에 출력되어 있던 메시지의 닉네임도 전부 변경된다. 예를 들어, 채팅방에 Mu..

기타 2020.10.01

[카카오] 크레인 인형뽑기 게임

문제 설명 게임개발자인 죠르디는 크레인 인형뽑기 기계를 모바일 게임으로 만들려고 합니다. 죠르디는 게임의 재미를 높이기 위해 화면 구성과 규칙을 다음과 같이 게임 로직에 반영하려고 합니다. 게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자이며 위쪽에는 크레인이 있고 오른쪽에는 바구니가 있습니다. (위 그림은 5 x 5 크기의 예시입니다). 각 격자 칸에는 다양한 인형이 들어 있으며 인형이 없는 칸은 빈칸입니다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지하며 격자의 가장 아래 칸부터 차곡차곡 쌓여 있습니다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올릴 수 있습니다. 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 ..

기타 2020.10.01

[프로그래머스] 스택/큐 - 프린터

문제 설명 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, B, C, D)가 순서대로 인쇄 대기목록에 있고 중요도가 2 1 3 2 라면 C D A B 순으로 인쇄하게 됩니다. 내가 인쇄를 요청한 문서가 몇 번째로 인쇄되는지 ..

기타 2020.10.01

[프로그래머스] 해시 - 위장

문제 설명 스파이들은 매일 다른 옷을 조합하여 입어 자신을 위장합니다. 예를 들어 스파이가 가진 옷이 아래와 같고 오늘 스파이가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야 합니다. 종류 이름 얼굴 동그란 안경, 검정 선글라스 상의 파란색 티셔츠 하의 청바지 겉옷 긴 코트 스파이가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서로 다른 옷의 조합의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 clothes의 각 행은 [의상의 이름, 의상의 종류]로 이루어져 있습니다. 스파이가 가진 의상의 수는 1개 이상 30개 이하입니다. 같은 이름을 가진 의상은 존재하지 않습니다. cloth..

기타 2020.10.01

[iOS] RxSwift, ReactorKit를 이용한 MVVM 구조

RxSwift - 비동기 처리를 쉽게 처리할 수 있게 해주는 라이브러리. - 강력한 Operator. https://cocoapods.org/pods/RxSwift RxSwift RxSwift is a Swift implementation of Reactive Extensions cocoapods.org ReactorKit - 단방향 데이터 흐름을 가진 반응형 앱을 위한 프레임워크. https://cocoapods.org/pods/ReactorKit ReactorKit A framework for reactive and unidirectional Swift application architecture cocoapods.org (ReactorKit 기본 개념) * Action View에서 나타나는 Acti..

iOS 2020.09.25

[iOS] Xcode 업로드 오류 해결법 (App Store Connect 업로드 불가)

최근 MacOS 업데이트 후, Xcode로 Archive > Upload 과정을 거치고 있었다. 그런데 분명 App Store Connect로 Upload 성공이 떴는데 막상 App Store Connect에 가서 확인해보면 아래 사진처럼 빌드목록에 안보이다가 3.3.9 버전이 아예 사라지는 현상이 반복되었다. build 버전을 바꿔가며 여러번 업로드를 시도해봤지만 3.3.9가 App Store Connect에 뜨지 않는 현상이 발생했다. Transporter 앱을 이용해 ipa파일을 직접 App Store Connect에 올려 해결할 수 있었다. Transporter 사용법은 꽤 간단하다. (아래 참고) 1 Mac의 App Store에서 Transporter을 검색해 다운받고, Apple 개발자 계정으..

iOS 2020.09.21

[Firebase] Firebase Cloud Messaging (FCM)

Apple Notification - 앱 이름, 작은 앱 아이콘, 텍스트 형식의 메시지 정보를 포함 ​- 사용자는 받은 푸시 메시지를 상호작용(Tab/Swipe)하면, 해당 푸시메시지는 화면에서 지워지고, 해당 앱을 열어 관련된 정보를 보여줍니다. - 텍스트를 제외한 기타 소스(이미지, gif, 표 등등)의 경우 url의 형태로 추가 가능, 사용자가 푸시받은 메시지를 탭한 경우에만 화면에 띄울 수 있습니다. (iOS 10 이상 부터 지원) - android와 달리 ios는 notification이 왔을 때, 사용자가 해당 푸시를 tab하지 않으면, 상호작용을 할 수 없다! (notification으로 온 데이터를 앱내에 자동 저장하거나 그런기능을 지원하지 않음!) FCM(iOS) 적용 1. Firebas..

iOS 2020.08.16

[iOS] 메모리 구조 및 관리(MRC, ARC)

RC Reference Counting (Retain Count) - 애플에서 사용하는 메모리를 관리 방식 - 각각의 객체에 리퍼런스 카운트값을 부여해 해당 객체가 몇번 참조 되고 있는지를 판단할 수 있다 - 객체의 RC값으로 메모리 해제 시점을 파악 참조시 해당 객체의 RC는 1 증가한다 참조 해제시 해당 객체의 RC는 1 감소한다 객체의 RC 값이 0이 되는 즉시 해당 객체를 메모리에서 해제시킨다 * RC 증감 함수 * -------------------- RC (+1) ---------------------- - alloc : 객체 생성과 동시에 메모리 할당하는 함수 - new : new = alloc + init - copy, mutableCopy : 객체의 복사본을 만든 후, 복사본의 RC를 증..

iOS 2020.08.16