Swift에서 만나는 포인터

Swift는 타입 안정성, 값 타입의 적극적인 사용, ARC 등으로 안전하면서도 비교적 높은 성능을 뽑아낼 수 있습니다. 하지만 때로는 더 큰 성능을 얻기위해 이러한 안전장치를 벗겨내서 프로그래머가 더 제어권을 가져가고 싶을 수도 있습니다. Swift는 이를 위한 도구들을 제공해주는데, 오늘은 이 도구들에 대해서 알아보겠습니다. 이 도구들은 안전하지 않기 때문에 Unsafe 등의 접두사가... [Read More]

dynamicMemberLookup, dynamicCallable

Swift는 기본적으로 정적인 언어입니다. 강력한 타입시스템을 가지고 컴파일 타임에 많은 것을 강제합니다. 이러한 점은 실제 프로그램을 실행하지 않고도 오류를 어느정도 거를 수 있게 만들어 준다는 점에서 분명한 장점이지만, 일부에서 발생하는 컴파일 에러 때문에 프로그램 전체를 실행하지 못하게 되거나 비정형 데이터 처리가 쉽지 않다는 점에서는 단점 또한 있습니다. 또한 스위프트보다 더... [Read More]
Tags: Swift Apple

Combine 시작하기(1)-Overview

애플은 WWDC 2019에서 Combine이라는 새로운 API를 발표했습니다. 이는 기존에 많이 쓰이고 있던 Rx와 같은 포지션에 있었기 때문에 더욱 더 많은 관심을 끌었습니다. 비록 최소 버전이 iOS 13 이기 때문에 당장 도입하기는 어렵지만, 이후의 변화에 적응하기 위해서 미리 공부를 시작해보고자 합니다. [Read More]

Key-Value Coding(KVC)

Key-Value Coding, 통칭 KVC는 애플 프래임워크에서 중요한 위치를 차지하고 있는 기술입니다. 이번 포스트에서는 이 KVC에 대해서 알아보겠습니다. [Read More]

Swift String 효율적으로 쓰기

Swift의 문자열 타입인 String은 깊은 설계적 고민이 녹아있는 타입입니다. 내부는 굉장히 복잡하지만, 사용하는 입장에서는 내부 구현을 알지 못해도 잘 쓸 수 있습니다. 하지만 C, C++ 등의 문자열과는 그 특성이 다르기 때문에, 이를 숙지해야 효율적인 코드를 짤 수 있습니다. 이번 포스트에서는 이러한 테크닉들을 알아보도록 하겠습니다. [Read More]

Iterator

개발을 할때는 단순한 배열부터 여러 복잡한 트리까지 다양한 자료구조를 사용합니다. 이러한 자료구조들은 내부 구조가 다르기 때문에 사용 방법도 다릅니다. 이렇게 서로 다른 자료구조를 동일한 인터페이스로 순회할 수 있는 방법을 제공해주기 위해 만들어진 것이 반복자(iterator)라는 개념입니다. 반복자는 내부 구조를 노출하지 않고, 원소들을 순차적으로 접근할 수 있도록 만들어줍니다. 이 반복자 개념은 어려... [Read More]

Swift의 타입 캐스팅

타입(Type)은 어떤 데이터를 해석하는 방법입니다. 같은 데이터도 타입에 따라 전혀 다른 의미와 기능을 가지게 할 수 있습니다. 그리고 이러한 타입을 바꾸어 데이터를 해석하는 방법을 바꾸는 것이 타입 캐스팅입니다. Swift에서는 같은 계층구조상에서의 타입 캐스팅을 허용하고 있습니다. 예제를 위해 다음과 같이 클래스를 선언하겠습니다. [Read More]

Message Dispatch

지난 포스트에서 Dispatch 규칙에 대해서 알아보았습니다. 이번 포스트에서는 Swift가 지원하는 또 하나의 Dispatch 방법인 Message Dispatch와 이를 활용하는 방법에 대해서 알아 보겠습니다. [Read More]

Swift의 Dispatch 규칙

지난 포스트에서 Dynamic Dispatch를 피해서 성능 최적화를 하는 방법을 알아보았습니다. 하지만 swift가 Dynamic Dispatch만 사용하는 것은 아닙니다. Swift는 다양한 Dispatch 방식을 사용하는데, 이번 포스트에서는 어떻게 하면 이러한 Dispatch들을 사용하고 조절할 수 있는 지 알아보도록 하겠습니다. [Read More]

Monad와 Swift

Swift는 함수형 패러다임을 적용한 언어입니다. 이 과정에서 함수형 언어의 영향을 많이 받았는데, 그중에서도 하스켈의 영향을 많이 받았습니다. 하스켈이란 언어에서 가장 인상적인 개념을 하나 꼽으라고 한다면 단연 모나드(Monad)를 꼽을 수 있습니다. 이번 포스트에서는 하스켈의 모나드 개념을 최대한 간략히 살펴보고, Swift에서 이것이 어떻게 활용되는 지 알아보도록 하겠습니다. [Read More]

Optional 살펴보기

Swift는 모든 변수가 값을 반드시 가지도록 강제합니다. 변수를 선언만하고 초기화를 하지 않으면 컴파일 단계에서 오류를 발생시키죠. 하지만 때로는 ‘값이 없는 상태’를 표현해야 할 때가 있는데, 이를 위해 Swift는 Optional이라는 기능을 제공합니다. [Read More]

Equatable, Comparable, Hashable

swift에서는 사용자 지정 타입에서도 라이브러리에서 제공하는 여러가지 기능을 사용할 수 있게 만들 수 있습니다. 이러한 기능을 사용하기 위해서는 사용자 지정 타입이 특정 메세지를 처리할 수 있는 지 여부를 알아야 하는데, Swift는 컴파일 타임에 이를 파악할 수 있도록 이를 프로토콜로 만들어 제공합니다. 프로그래머는 이렇게 제공되는 프로토콜을 사용자 지정 타입에서 채택하고 구현하기만... [Read More]

Property Wrapper란?

Swift 5.1버젼부터 Property Wrapper라는 기능이 추가 되었습니다. Property Behaviors, Property Delegate라고도 하는 이 기능이 무엇이고 왜 추가 되었는지, 어떻게 사용하는 지를 알아보도록 하겠습니다. [Read More]

Dynamic Dispatch와 성능 최적화

많은 객체 지향 언어들이 메소드와 프로퍼티들을 오버라이드 할 수 있도록 허용합니다. Swift도 예외는 아닙니다. 그런데 이렇게 오버라이드를 할 경우, 프로그램은 실제 호출할 함수가 어떤 것인지 결정하는 과정이 필요합니다. [Read More]

map, flatMap, compactMap

swift는 Collection 타입에 사용할 수 있는 여러가지 고차 함수를 제공합니다. 이 중에서 이름이 비슷한 함수인 map, flatMap, compactMap에 대해서 알아보도록 하겠습니다. [Read More]

Swift의 메모리 안정성

이번 포스트에서는 swift의 기반에 깔려있는 안전장치들을 살펴보겠습니다. 대부분의 경우 프로그래머들은 이를 신경쓰지 않아도 되지만, 가끔은 필요한 때가 있을 것입니다. 오늘은 이러한 부분들을 알아보겠습니다. [Read More]

5분상식- Self vs self

swift를 코드를 보다보면 self(s가 소문자)가 쓰이는 곳이 있고 Self(S가 대문자)가 쓰이는 곳이 있습니다. 이번 포스트에서는 짧게 둘 사이에 무슨 차이가 있는지 알아보겠습니다. [Read More]

Generic 살펴보기

이번 포스트에서는 Generic에 대해서 알아보고자 합니다. Generic은 Swift의 강력한 기능들 중 하나로, 유연하고 재사용성이 높은 코드를 작성하게 돕습니다. [Read More]

enum 살펴보기 - 사용법

enumeration, 줄여서 enum이라고 하는 것(열거형이라고 번역됩니다.)은 의미상으로 관련된 값들에 특별한 이름을 붙여 모아놓은 것입니다. Swift에서의 enum은 다른 언어에서보다 훨씬 다양한 기능을 가지고 있는데, 오늘은 이 enum을 알아보겠습니다. [Read More]

Subscript를 알아보자

배열이나 딕셔너리 등의 콜렉션 타입을 쓰다보면 [index] 형태의 구문을 많이 쓰게 됩니다. 이러한 것을 Subscript(첨자) 라고 하며, Swift에서는 Subscript를 프로그래머가 이용할 수 있는 간편한 방법을 제공합니다. 오늘은 이 첨자에 대해서 알아보겠습니다. [Read More]

Swift의 메모리 관리법 - ARC

프로그래밍에 있어서 메모리 관리는 핵심적인 요소입니다. 메모리는 프로그램 자체가 돌아가는 공간이며, 프로그램이 필요로 하는 데이터가 사용할 수 있는 상태로 존재할 수 있는 곳이기도 합니다. 하지만 이 공간은 제한 되어 있기 때문에, 잘 관리되지 않으면 프로그램이 비효율적으로 동작하게 되고 최악의 경우 프로그램이 런타임 에러를 내면서 죽기도 합니다. [Read More]

Swift의 접근제어

객체지향을 접하다 보면 중요하게 나오는 키워드가 ‘정보 은닉’과 ‘캡슐화(Encapsulation)’ 입니다. 이는 특정 개념을 나타내는 데이터와 메소드를 하나로 묶어서 손쉽게 사용하게 만들고, 그 상세 구현 내용은 감춤으로써 재사용성을 높이고 잘못된 사용을 방지하는 효과를 가집니다. 이를 위해 사용하는 개념 중 하나가 바로 접근 제어(Access Control)입니다. 접근 제어는 코드의 특정 부분을 다른 코드가... [Read More]

Swift API Design Guidelines 톺아보기 - 기초,이름 짓기

블로그를 만들어야지 생각만 하다가 이번 부스트코스 에이스에 선정이 된 기념으로 진짜 마음먹고 블로그를 시작해보기로 했다. 시작은 복잡한 것을 하기 보담도 Apple의 문서를 읽은 내용을 정리하거나, 프로젝트를 수행하며 해결했던 여러 문제들에 대한 글을 간결하게 써보고자 한다. [Read More]