[Swift] O(1)로 제곱 수인지 확인하기
·
Swift/개념 & 응용
숫자가 x의 제곱 수인지 확인하기 특정 수가 x의 제곱 수인지 확인하는 방법은 많습니다. 가장 대표적으로 반복문을 이용하는 것이죠. while number >= 3 { if number % 3 != 0 { return false } number /= 3 } 이번 포스팅에서는 O(n)이 아닌 O(1)로 숫자가 x의 제곱 수인지 확인하는 방법에 대해 알아보려고 합니다. (알고리즘 문제를 풀다 알게 된 방법이에요! ㅎㅎ) n이 3의 제곱 수인지 판단한다고 가정합시다. 9는 3의 제곱수입니다. -> 9 % 3 == 0 27은 3의 제곱수입니다 -> 27 % 3 == 0, 27 % 9 == 0 ... 이 패턴을 살펴보면 (더 큰 3의 제곱수 % 작은 3의 제곱수) 값은 항상 0 입니다. 이는 "더 큰 3의 제곱수..
[iOS] 작심삼일 개발 일지 - 4 (스토리보드 분리)
·
iOS 프로젝트/작심삼일
서론 작심삼일은 학업과 새로운 프로젝트로 인해 신규 기능 개발은 잠시 접어둔 상태입니다 그렇지만 코드 정리는 꾸준히 해야할 거 같아서 오랜만에 프로젝트를 열어보았는데요. 최근 알아본 스토리보드 최적화를 작심삼일 프로젝트에 적용하려고 합니다. 전에 비해 굉장히 쾌적(?)해져서 정말 뿌듯하더라고요 ㅎㅎ 오늘 사용할 스토리보드 레퍼런스 포스팅은 https://jeong9216.tistory.com/535 에서 볼 수 있습니다. 기존 스토리보드 구성 기존에는 Main 스토리보드에 모든 화면이 존재했습니다. 화면 자체가 많은 앱이 아니라 불편한 점은 없었지만 화면마다 따로 협업할 경우 문제가 생길 수 있습니다. 그래서 스토리보드 레퍼런스를 이용해 여러 개의 스토리보드 파일로 분리하기로 결정했습니다. 스토리보드 레..
[Swift] isMultiple(of:) 소개
·
Swift/개념 & 응용
isMultiple(of:) 알고리즘을 풀다 isMultiple(of:)를 알게 되어 소개드리기 위해 포스팅을 작성합니다. 간단한 메서드지만 매우 편리하다고 느꼈거든요. isMultiple(of:)는 배수인지 판단하는 메서드입니다. 두 정수 a와 b에 대하여, a = q*b인 세 번째 정수 q가 존재한다면, a는 b의 배수이다. 예를 들어 6 = 2*3이므로 6은 3의 배수입니다. 0은 임의의 정수 x에 대해 0 = 0*x이므로 모든 것의 배수이다. 애플 공식 문서에 나와있는 isMultiple의 Declaration입니다. 메서드 정의를 통해 정수형만, 그중에서도 FixedWidthInteger 프로토콜을 준수한 정수형만 취급한다는 것을 알 수 있습니다. 예제 코드도 살펴봅시다. let number =..
[Swift] WWDC16 - Understanding Swift Performance (3)
·
WWDC/Swift
이전 글 Understanding Swift Performance (2) Generic drawACopy는 Generic을 이용해 매개변수 제약 조건을 주고 있습니다. 이는 프로토콜 타입과 무엇이 다를까요? 제네릭 코드는 매개변수 다형성이라고도 하는 보다 정적(static) 형태의 다형성을 지원합니다. 함수 foo는 Generic으로 만들어졌고 Drawable만 받을 수 있습니다. Point는 Drawable 프로토콜을 준수했으니 foo의 파라미터로 사용할 수 있습니다. 이 foo 함수가 실행되면면 Swift는 제네릭 타입 T를 Point 타입에 바인딩 합니다. 함수 foo가 바인딩과 함께 실행될 때 bar가 호출되면 local 변수는 직전에 사용한 타입인 Point를 가지게 됩니다. 타입은 매개변수를 ..
[Swift] WWDC16 - Understanding Swift Performance (2)
·
WWDC/Swift
이전글 [Swift] Understanding Swift Performance (1) 지난 시간 지난 시간의 핵심은 최적화를 진행하는 방법이었습니다. 내 인스턴스가 스택과 힙 중 어디에 할당되는지, 인스턴스를 전달할 때 오버헤드가 얼마나 발생하는지, 인스턴스 메서드를 호출하면 어떤 디스패치로 동작하는지 고려해야 합니다. 구조체를 사용하여 다형성 코드를 작성하는 방법은 프로토콜 지향 프로그래밍입니다. Protocol Types 프로토콜 타입을 알아보면서 프로토콜 타입 및 제네릭(Generic) 코드를 어떻게 구현해야 하는지 알아봅시다. 또, 프로토콜 타입의 변수가 저장되고 복사되는 방식과 메서드 디스패치가 작동하는 방식을 살펴봅시다. 이전 포스팅에서 다뤘던 Point와 Line을 프로토콜로 구현했습니다. ..
[Swift] WWDC16 - Understanding Swift Performance (1)
·
WWDC/Swift
WWDC 16의 Understanding Swift Performance 세션을 이제서야 보았습니다. 2편에 걸쳐 나눠서 정리해보려고 합니다. (해당 포스팅의 사진은 https://developer.apple.com/wwdc16/416 의 프레젠테이션 슬라이드에서 가져왔습니다.) 참고로 해당 포스팅에서는 메서드와 함수를 구분하여 표현하고 있습니다. 발표도 Method와 Function을 명확하게 구분해서 말하고 있더라고요. 두 개의 차이는 https://jeong9216.tistory.com/472 를 참고해 주세요. Dimensions of Performance 추상화를 만들고 추상화 메커니즘을 선택할 때 세 가지를 고려해야 합니다. 인스턴스가 스택에 할당되는지 힙에 할당되는지 인스턴스를 전달할 때 참..
[iOS] 스토리보드 분리 - 스토리보드 레퍼런스(Storyboard Reference)
·
iOS/개념 & 개발
스토리보드 스토리보드는 장점과 단점이 명확한 UI 개발 방법입니다. 스토리보드는 아래와 같은 장점을 가집니다. ViewController 간 이동을 한 눈에 볼 수 있음 ViewController의 모습을 시각적으로 표현해줘서 이해하기 쉬움 View를 드래그 & 드랍으로 편하게 생성할 수 있음 단점은 이렇습니다. Git Merge 시 스토리보드에서 충돌(conflict)이 발생함 스토리보드가 여러 개가 되면 파일을 여는 속도가 느려짐 이러한 단점을 해결하기 위해 스토리보드를 사용하지 않고 100% 코드로 구현하거나, 스토리보드 레퍼런스를 이용해 스토리보드를 화면 별로 분리해서 관리합니다. 저는 코드로 UI를 작성하는 것을 선호하는데요. 알고 안 쓰는 것과 몰라서 못 쓰는건 아예 다르니, 오늘은 스토리보드..
[iOS] UITextView 원하는 문자에만 색상 넣기(여러 개도 OK)
·
iOS/개념 & 개발
기능 설명 UITextView의 텍스트에 색상을 넣어야 하는 작업을 해야 했습니다. 모든 글자가 아니라 특정 키워드에만 색상을 적용하는건데요. 이 키워드는 여러 개가 될고 텍스트에 키워드가 여러 번 나올 수 있습니다. 예를 하나 들어봅시다. UITextView에 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세 무궁화 삼천리 화려강산 대한 사람 대한으로 길이 보전하세 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세 무궁화 삼천리 화려강산 대한 사람 대한으로 길이 보전하세 ... 텍스트가 들어있다고 합시다. 색상을 바꿔야 하는 키워드는 "동해물", "백두산", "하느님" 이라고 할 때, 이렇게 되어야 하는거죠. 기존 코드의 문제 인터넷에 떠도는 코드로 시도를 해보았습니다. l..
[서초구 맛집] 느린마을 양조장 교대점 리뷰 / 막걸리 맛집 / 교대 맛집
·
🐱 정주는 쉬는 중 :]/맛집
기본 정보 가게 이름 느린마을 양조장 교대점 위치 서울 서초구 반포대로28길 56-3 한라빌딩 2층 메뉴 & 가격 [술] 느린마을 막걸리(봄, 여름, 겨울) 1병 당 10,000원 느린마을 소주(16.9) 1병 5,000원 민들레대포(약주) 9,000원 [안주] 매콤한 차돌박이 숙주 볶음 24,000원 떠먹는 치즈감자전 18,000원 해물알탕 25,000원 순살치킨 & 감자튀김 9,900원 주먹밥 3,500원 느린마을 양조장 교대점 느린마을 양조장 교대점의 내부 인테리어는 상당히 고급졌습니다. 막걸리 집은 투박하다는 편견이 있었는데 굉장히 세련되고 화장실도 깨끗했어요. 메뉴판 느린마을 양조장의 느린마을 양조장은 4계절로 막걸리를 분류합니다. 봄, 여름, 가을, 겨울 순으로 숙성 시간이 길고 도수도 높아요..
[Swift] 공식 문서 - Memory Safety
·
Swift/Swift 가이드
새로 배운 점 Swift는 특정 메모리 공간을 수정하는 코드가 그 메모리의 소유권을 가지도록 요구함으로써 동일한 메모리 영역을 동시에 접근할 때 충돌하지 않도록 해줍니다. 메모리 액세스의 지속시간은 instantaneous(순간적) 또는 long-term(장시간)일 수 있습니다. 만약 액세스가 끝나기 전에 다른 코드가 실행될 가능성이 없다면 이 액세스는 순간적(instantaneous)입니다. 다른 코드의 실행에 걸쳐서 메모리에 액세스하는 여러 방법들이 있는데, 이를 장기간(long-term) 액세스라고 합니다. 오버랩(overlap)이란 장기간 액세스가 시작된 후 종료되기 전에 다른 코드가 실행되는 것입니다. 장기간 액세스는 다른 장기간 액세스 또는 순간적 액세스와 오버랩 될 수 있습니다. 함수는 모든..
유정주
'분류 전체보기' 카테고리의 글 목록 (20 Page)