적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

반응형

분류 전체보기 592

[Swift] Initialization + Convenience init 이란?

Swift에서는 super class에서 상속받은 프로퍼티들을 포함하여, 모든 저장 프로퍼티가 초기 값을 가질 수 있도록 Class 유형에 대해 두 가지 종류의 초기화를 정의한다. 그 두가지가 바로 흔히 init으로 사용하는 기본 Designated init, 그리고 Convenience init. init 에서는 모든 저장 프로퍼티가 반드시 초기화되어야하는데, Convenience init은 init의 파라미터 중 일부를 임의의 기본값으로 설정해서 오류가 나지 않도록 도와주는 보조 이니셜라이저. * init의 보조이기 때문에 미리 선언한 init을 활용해서 사용해야 한다. convenience init 딱히 필요성을 잘 모르겠어서 왜 쓰나 싶었다. custom collectionView cell 만들때..

[Swift] Copy On Write 동작 방식

Copy-on-write란 컴퓨터 프로그래밍에서 리소스의 복제를 효율적으로 구현하기 위한 리소스 관리 기술로, Swift에서는 Collection Type을 복사해서 사용할 때, Value Type의 성능을 최적화하기 위해 COW를 사용한다. 실제 수정이 이뤄질 때 값을 복사해서 메모리에 할당하고, 그 전에는 참조를 통해 불필요한 복사 및 메모리 사용을 줄이고자 하는 것. Copy-On-Write (COW) 란? Copy-on-write (COW), sometimes referred to as implicit sharing or shadowing, is a resource-management technique used in computer programming to efficiently implement..

[Swift] Class의 성능을 향상시킬 수 있는 방법

성능에 영향을 미치는 3가지 Memory Allocation: Stack or Heap Reference Counting: No or Yes Method dispatch: Static or Dynamic (메서드를 호출할 때 메모리를 할당할 때 스택에 value type 의 특징 변수 할당 시 stack에 값 전체가 저장됨 다른 변수에 할당될 때 전체 값이 복사됨 (copy by value) -> 하나를 변경해도 다른 것에 영향 없음 Heap을 안 쓰며 따라서 Reference Counting도 필요 없음 Heap 할당의 문제 할당 시에 빈 곳을 찾고 관리하는 것은 복잡한 과정 무엇보다 그 과정이 thread safe 해야 한다는 점이 가장 큰 문제 (다른 스레드 끼리 충돌이 없어야 되기 때문에 lock..

[Swift] Optional 옵셔널이란?

Swift 언어의 안정성에서 중요한 요소 중 하나가 Optional 개념. type casting이나 nil check 등에 있어서 중요한 역할을 한다. + 종류 Optional 옵셔널이란? 값이 있을 수도 있고, 없을 수도 있다 (nil 값을 가질 수 있도록) (내부적으로는 열거형으로 처리가 되어 있음) 임시 타입이기 때문에 사용 시에 optional을 벗겨서 사용해야한다. (unwrapping) 언래핑 Unwrapping : 옵셔널로 초기 설정을 해준 값은 값이 존재하더라도 계속 Optional( ) 로 wrapping 되어져 있다. 이 optional wrapping을 벗겨주어 할당된 값을 그대로 사용할 수 있도록 해주는 것. 언래핑 하는 방법 Forced Unwrapping : ! 를 사용해서 강..

[Swift] Codable - CodingKey

CodingKey A type that canbe used as a key for encoding and decoding. 인코딩 및 디코등을 위한 키로 사용될 수 있는 타입 protocol CodingKey : CustomDebugStringConvertible, CustomStringConvertible, Sendable CodingKey 사용하는 경우 Swift에서는 변수나 상수를 선언할 때 카멜케이스를 사용한다. 그런데 예를 들어 JSON 에서 스네이크 케이스를 사용하는 경우, 다음과 같이 내려받은 JSON 키 "actual_price" 와 Items 구조체에서 선언해준 "actualPrice" 키가 일치하지 않을 수 있다. 이런 경우 CodingKey를 사용하여 키를 변환(?) 연결(?) 해주면..

SceneDelegate에서 code base로 화면 진입점 설정하는 법

스토리보드 없이 코드로 화면 진입점 설정하는 법 xcode 11 부터 멀티 윈도우를 지원하기 위해 SceneDelegate가 추가되었다. SceneDelegate 지우고 그냥 기존처럼 AppDelegate만 설정해줘도 되지만, SceneDelegate에서 code base로 화면 진입점을 설정해보았다. 방법은 비슷하다 1. Storyboard 삭제 2. Info.plist 에서 Storyboard Name 삭제 3. TARGETS - General - Deployment Info - Main Interface 에서 "Main" 지워주기 4. SceneDelegate에서 화면 진입점 설정 func scene(_ scene: UIScene, willConnectTo session: UISceneSession..

클린 아키텍처 Clean Architecture

보통 기능 개발이 중요하다고 생각하지만 프로젝트 규모가 커질수록 구조가 더 중요해진다 ex) 정리가 되지 않은 방 좋은 아키텍처란? 아키텍처가 왜 중요한가? 필요한 시스템을 만들고 유지보수하는 데 투입되는 인력을 최소화 하는 것- by 로버트 C. 마틴 ㅠㅠ 기능이 있기만 하면 되는 것이 아니라 기능을 계속 더하고 뺄 때 구조가 굉장히 중요해진다. 많은 기능들이 있지만 나름의 질서가 있어서 그 구조를 파악하기 어렵지 않은 상태를 추구해야. 아키텍처 패턴 계층형 아키텍처 Layered Architecture (영속성에 의존하게 되어) 영속성에 대해 먼저 정의를 하고 데이터베이스 주도 설계를 유도하게 되는 단점 클린 아키텍처 로버트 C. 마틴이 좋은 아키텍처들의 특징 공통점을 모아 하나로 합친 것? 도메인이..

Trend 2022.11.21
728x90
반응형