Swift
-
Opaque TypeSwift 2022. 9. 21. 17:44
some 키워드 struct CircleImage: View { var body: some View { return Image("turtlerock") } } struct CircleImage_PreView: PreviewProvider { static var preview: some View { CircleImage() } 기본으로 import 되어있는 코드에서 타입 앞에 ‘some’이라는 키워드를 볼 수 있다. swiftui가 아닌 swift 5.1 이상에 구현되어 있는 기능이다. some은 Opaque type으로써 불투명한 타입이다. 불투명 타입? 불투명 타입은 도대체 뭐고 어떻게 왜 사용하는지에 대해 알아보자. Opaque type이란? 아래는 opaque type에 대한 overview이다. ..
-
Swift) 성능 최적화 - Dispatch와 메모리 할당Swift 2022. 8. 30. 22:28
평소에 하던 생각이 있다. '모바일에는 한계가 있다' 하드웨어의 스펙은 나날이 발전한다. 요즘의 아이폰 스펙은 어지간한 pc 못지않다. 게다가 대부분의 어플리케이션은 인터넷을 사용하는 네트워크 통신을 필요로하는 서비스이다. 이때 서비스의 performance를 올릴수 있는 방법은 벡엔드 단에서의 데이터처리이다. 네트워크 기반 서비스는 아무리 로컬에서 구현된 로직이 느려도 네트워크 환경이 좋다면 빠르게 느껴진다. 그럼 정말 클라이언트(앱)에서 할 수 있는게 없을까? 우리가 어떤 앱을 사용할때 이 앱 실행 속도 빠르다 라는 경험을 한 경우가 있을것이다. 그럼 이는 단순히 네트워크 속도가 빨라서일까? 이미지를 처리 하는 어플리케이션이 있다고 가정하자. 사이즈가 매우 커서 네트워크 환경이 아무리 좋아도 받아오는..
-
Swift) URLSession Network LayerSwift 2022. 8. 10. 19:37
iOS를 공부하다 보면 만나는 고민의 벽이 몇 가지 있다. 예를 들면 스토리보드냐 코드 베이스 레이아웃이냐.. 어떤 아키텍쳐를 사용할 것이냐... 컨벤션(줄 바꿈, branch 전략)은 어떤 식이 좋을까...? 지금 이 설계가 오버 엔지니어링은 아닐까? 이와 마찬가지로 고민되는 것이 네트워크의 모듈화. 즉, 네트워크의 레이어를 나누는 것이다. 왜 레이어를 나눠야 하나요? 지금 당장 Network Layer 키워드를 통해서 검색한 결과만 봐도 수많은 방법으로 나눈 레이어들이 존재한다. 프로토콜을 이용하거나, enum을 사용해서 EndPoint를 만든다거나, 심지어 모든 기능을 쪼개어 메서드 단위로 퍼사드 패턴들 적용한 사례도 있다. 이렇게 나누어 놓은 레이어들을 보면 오히려 흐름을 파악하기 어려운 경우도 ..
-
Data(contentsOf:)? URLSession?Swift 2022. 8. 1. 16:26
Data(contentsOf:) 이미지를 받아와서 보여주는 가장 기본적인 예제 중 이런것이 있다. DispatchQueue.global().async { do { let image = try Data(contentsOf: self.imageUrl) DispatchQueue.main.async { self.imageView.image = UIImage(data: image) } } catch { print(error) } } 개인적으로 이런 식의 데이터 통신을 접한 첫 것은 그 유명한 Standford iOS강의 일것이다. 물론 지금 와선 그 의도를 파악 할 수 있지만(빨리 보여줘야 하니까…ㅎㅎ) 처음 접한 방식이 이렇다 보니 당연히 네트워크 통신은 이런식으로 하는줄 알았다. 통신은 무조건 Dispatch..
-
Swift) json 다루기Swift 2021. 6. 16. 15:00
네트워크 통신 표준 포맷 swift의 Dictionary와 유사한 구조 left curly brackets( '{' )로 시작 하고 right curly brackets( '}' )로 짝을 지어 끝난다. key와 value로 구성 key는 문자열 value는 숫자, 문자열 []로 배열 표현 Encoding 기본 인스턴스를 json 형식으로 인코딩 하는 것. 구조체나 클래스의 인스턴스를 encoding해보자. struct Person { var firstName: String var lastName: String var birthDate: Date var address: String? } let p = Person(firstName: "Chul_Su", lastName: "Kim", birthDate: D..
-
Swift) API Design GuidelinesSwift 2021. 6. 10. 17:53
Swift의 공식 Design Guidelines은 코드를 작성하는데 있어서 정해진 합의이다. 언어에는 화법이라는게 있고 말하는 사람마다 다르지만, 기본적으로 문장을 구성하는 요소(문법, 단어)가 합의 되어있는 규칙들이 존재한다. 언어의 이러한 요소들은 다른 사람과의 소통에 있어서 기초적인 역할을 한다. 프로그램 언어 또한 개인의 코딩 스타일이 다르지만, Design Guidelines이라고 하는 공식적으로 정해준 준수 사항이 있다. 물론 따르지 않는다고 해서 프로그램이 작동되는데 있어서 큰 영향을 미치지 않지만, 프로그래머로써 디자인 가이드라인을 준수 한다는 것은 다른 사람과의 협업, 그리고 누군가(자신 포함)가 코드를 이해 하는데 있어서 큰 강점을 가져다 준다. 천천히 살펴보자. 이 포스트는 Swif..
-
Swift) 함수 타입Swift 2020. 11. 18. 18:35
swift에서 함수는 1급 객체(First class Citizen)이다. 1급 객체는 3가지 특징을 가지고 있다. 1. 변수나 상수에 저장할 수 있다. 2. 파라미터로 전달 가능하다. 3. 함수에서 리턴할 수 있다. 위의 세가지를 충족시키기 위해선 자료형이 필요하다. 함수 또한 자료형이 존재한다. Syntax (Parameter Type) -> Return Type 위의 문법은 함수의 자료형을 나타낸다. 보통 함수를 선언 할때 리턴 값이 없다면 생략 가능 하지만 함수 타입에선 생략이 불가능 하다. 기존 언어들에서 사용하는 Void 대신 ()를 통해 없음을 대신 한다. func doSomething() { ... } () -> () // parameter가 없고 return도 없는 함수 타입 위의 doS..
-
Swift) OptionalSwift 2020. 11. 11. 04:22
optional은 무엇인가? 간단히 말해서 optional은 '값이 없음'을 나타냅니다. 들어가기 전, 기존에 C의 null이나 object-C의 nil과 Swift의 nil은 다릅니다. 특히 object-C의 nil은 '존재하지 않는 객체에 대한 포인터'지만 swift의 nil은 포인터가 아닌 값이 없음을 뜻하는 하나의 키워드입니다. 따라서 참조, 값 형식에 구애받지 않고 사용 가능합니다. 우리가 만든 변수 혹은 상수를 사용하기 위해선 반드시 값을 할당 시켜주어야 합니다. (물론 선언만 하는 것은 가능하지만 접근은 불가능합니다.) 초기화를 통해 swift는 변수와 상수의 자료형을 형식 추론합니다. swift는 언어 특성상 변수 혹은 상수에 값을 할당해 형식 추론(Type Inference)을 통해 자료..