본문 바로가기

Swift/Deep dive!!

(18)
[Swift] enum에서 사용되는 CaseIterable, RawRepresentable protocol 깊게 탐구하기!! 안녕하세요. 오늘은 enum에서 enum type의 모든 case를 Collect해서 배열로 반환할 수 있는 protocol인 CaseIterable을 소개하려고 합니다. 그리고 RawRepresentable도 소개하려고 합니다. Enum 타입으로 case에 rawValue, associated value 뿐 아니라 더 다양하게 활용할 수 있는 protocol이 제공되는 Swift가 정말 좋다고 느껴집니다: ) CaseIterable Protocol CaseIterable은 protocol입니다. Protocol 장점은 상속이 되지 않는 값 타입 자료형인 Enum에 여러 개의 protocol을 채택할 수 있습니다. allCases의 타입은 Self.AllCases입니다. 이는 Collection을 준수하..
[Swift] OOP. ObjectOrientedProgramming의 객체 설계 파해치기!!! | struct vs class | Class 설계 탐구하기 +_+ 안녕하세요! 오랜만에 OOP를 공부하면서 캡슐화, 상속, class vs struct, 다형성, Composition(조합)등의 잠시 잊고 있었던 개념을 머릿속으로 불러오게 되었습니다. 바이시클 카드, 포커 카드 등 다양한 카드의 parent가 될 수 있는 Card클래스를 구현해봤습니다. ObjectiOrientedProgramming 간략하게 OOP(ObjectOrientedProgramming)를 소개하자면 객체라는 기본 단위를 모델링하고 이를 다양한 곳에서 원하는 목적에 맞게 상속받아서 사용하는 것입니다. 모델링이라는 개념은 현실 세계의 개념을 추상화해서 우리가 개발하는 xcode에서 swift 언어로 클래스와 프로퍼티가 있는 객체를 만드는 과정을 의미합니다. (관련 DB 개념 정리 링크) cf. ..
[Swift] CoW(Copy-On-Write) 기법과 String은 값타입일까? 참조타입일까? 안녕하세요. 오늘은 Swift에서 값타입과 참조타입이 어떻게 효율적으로 관리되는지 알 수 있는 CoW기법에 대해 소개하려고 합니다. 그리고 JK iOS 마스터님이 실험한 내용을 살짝 정리해보려고 합니다. 근데 struct는 값에 의한 복사가 일어난다고 하는데 struct는 값 타입일까요? 참조타입 일까요.? String은 값타입인가 참조타입인가? String의 정의 입니다. 흔히 struct하면 떠오르는 것은 값 타입!! 입니다. iOS Master JK님의 타입별 메모리 분석 실험을 봤는데 어.. 이거 예전에 이 글 본 것 같았는데.. 오호. Struct로 정의된 String은 값 타입인지에 대해 실험하는 글인데요. 위 링크의 포스트 중 String 파트에 대해서 정리와 설명을 하려고 합니다. Str..
[Swift] private(set) var vs computed property | Read-Only 프로퍼티는 왜 사용할까? 요즘 열심히 현대자동차 부트캠프에서 주어진 키워드에 대해 공부를 하고 있습니다. 기존에 해왔던 방식으로 임무를 완수하거나 개발하게 된다면 늘 그래왔듯 익숙하고 편하지만 더 많이 배우고 싶어 다양한 시도를 하고 있습니다.. 학습 키워드는 OOP였습니다. 캡슐화는 당연히 필수였고, 늘 하던 방식으로 객체를 선언하다가 문득 든 생각.. private(set) vs computed property(연산 프로퍼티). 우선 read-only에 대해서..Read-Only property란?외부에서 임의대로 값을 변경하지 못하게 클래스나 구조체 내부 변수를 보호할 수 있습니다. Concurrent한 환경에서 concurrecy problems이 발생되지 않음으로 안정합니다. 외부에서 클래스 내부의 read-only 변..
[Swift] 프로토콜 선언시 발생할 수 있는 경고창 Class Delegate Protocol Violation 델리게이트 사용하기 위해 프로토콜을 선언하고 있었는데 Class Delegate Protocol Violation 경고가 나타났습니다. ( swiftLint 적용중입니다.) Delegate 로 설계된 protocol이 클래스 전용으로 선언되지 않았기 때문입니다.. Delegate는 일반적으로 사용하는 쪽에서 옵셔널 타입으로 선언합니다. 그 이유는 약한 참조로 선언해야 delegate가 메모리에서 해제될 때 더 이상 호출되지 않도록 할 수 있기 때문입니다. 서로가 강한 참조를 갖고 있다면 retain cycle이 발생될 수 있습니다. 이렇게 될 경우 한쪽에서만 해제가 된다해도 다른쪽에서 참조를 하고 있기 때문에 메모리에 계속해서 불필요한 인스턴스가 할당되어 있습니다. 이는 memory leak를 발생시킵니..
[Swift] 스위프트로 백준 편하게 시작하기 | 코딩테스트 준비 | readLine() | split(separator:) | map() 탐구 안녕하세요. 이번 글은 Swift로 백준 사이트에서 알고리즘 문제의 입력을 받는 방법에 대해서 소개하려고 합니다. 백준 사이트를 처음 접한 후 어느 문제를 봤을 때, 알고리즘으로 어떻게 풀 지 생각이 떠오르는 것 같은데 입력을 어떻게 받을지 정말 몰랐습니다. C나 C++은 입력받는 다양한 방법을 문법 공부 하자마자 배웠는데.. Swift는 앱 만들때 입력도 텍스트 필드로 받은 기억만 있었습니다. UIKit 컴포넌트 백준 제출 사이트에 추가할 수도 없고,,,, 다른 블로그의 글을 봤을 때, 엄청 낯선 함수들이 많았습니다. readLine()!.split(separator:"").map{...} // 이게 뭐지,, "UIKit으로 앱 만들 때 이런 함수들 한 번도 안 써봤는데" 하면서 뒷걸음질 쳤던 적도 있..
[Swift] where keyword. 언제 사용할 수 있는지 탐구하기!! 안녕하세요. 언젠가 한 번 정리하려고 했던 where키워드를 복습할 겸 정리하려고 합니다. where 키워드를 사용하면 정말 편합니다. Protocol extension에선 특정 프로토콜을 사용하기 위한 준수 조건을 지정하거나, array's extension에서 특정 함수를 추가했을 때 해당 함수를 사용할 수 있는 Element를 한정적으로 제한할 때, 루프, 제너릭, switch case, do-catch, guard 등 다양한 경우에 where 키워드를 사용할 수 있습니다. 그리고 특정 조건에 부합하는 filter 된 값을 받을 수 있습니다. 쉽게 생각하면 if의 조건을 where의 절에 붙인다는 느낌입니다,, 즉, where 키워드를 통해서 조건을 추가합니다. 특정 타입으로 제한하거나, 특정 조건..
[Swift] String과 Character 자료형 개념 뿌수기(unicode scalar, grapheme cluster). Let's d 문자열 알고리즘을 공부하기 전에 한번 복습하면 좋을 것 같아서 String, Character 개념을 정리합니다! String structure String. 문자열 입니다. 정말 많이 사용합니다. Swift에서 제공되는 기본 자료형에 속합니다. Swift's Standard Library에 속합니다. 그래서 import Foundation 없이도 사용할 수 있습니다. String 자료형인 문자열은 Character들로 구성된 컬랙션입니다. 유니코드..? 유니코드란 전 세계 모든 문자를 '컴퓨터'에서 일관되게 표시하고 다룰 수 있도록 특정한 키(숫자 값)로 1대 1 매핑한 표준코드입니다. 영어 한 문자는 1byte입니다. 모든 언어가 1byte면 좋을 텐데 한글은 2byte로 표기합니다. 그렇기 때문에 ..