본문 바로가기

전체 글

(207)
mutating mutating을 본격적으로 공부하기 위해서는 구조체에 대해서 제대로 알고 있어야 합니다. Swift에서 클래스는 참조 타입이고 구조체, 열거형은 값 타입입니다. 값 타입인 구조체에서는 인스턴스 메소드 내에서 프로퍼티들을 수정할 수 없게 되어 있습니다. 따라서, 이러한 프로퍼티들은 구조체 안의 메소드에서 수정을 해주기 위해 mutating이라는 키워드를 사용하게 됩니다. mutating 특정 메소드 내에서 구조체 또는 열거형의 프로퍼티들을 수정해야 하는 경우, 해당 메소드의 동작을 변경하도록 하는 것 간단한 코드를 통해서 알아보도록 하겠습니다. struct Person { let name: String var age: Int init(name: String, age: Int) { self.name = n..
Generic 제너릭 == 범용 타입 제너릭 코드는 유연하게 작성할 수 있고 재사용 가능한 함수와 타입이 어떤 타입과 작업할 수 있도록 요구사항을 정의합니다. 제너릭을 사용하면 중복을 피하면서 의도를 명확하게 표현하고 추상적인 방법으로 코드를 작성할 수 있습니다. Swift에서 가장 강력한 기능 중 하나로 Swift 표준 라이브러리 대다수는 제너릭 코드로 만들어졌습니다. Swift의 배열과 딕셔러니 타입은 제너릭 타입이며 Int 값을 갖고 있는 배열, String 타입을 갖고 있는 배열 .. 또는 다른 타입으로 배열을 만들 수 있습니다. 그리고 이러한 타입의 제한은 없습니다. Generic 제너릭이란, 타입에 의존하지 않는 범용 코드를 작성할 때 사용합니다. 제너릭을 사용하면 중복을 피하고 코드를 유연하게 작성할 수 ..
Swift Package Manager Update 간단하게 SPM에 대해서 말씀 드리자면, 다음과 같습니다. ⬇️ SPM(Swift Package Manager)은 종속성 관리를 위한 공식 도구입니다. Cocoapods, Carthage인 3rd Party 툴이 아닌 1st Party 입니다. 그래서 앞으로는 SwiftPM을 적용하는 것이 장기적으로 좋습니다. 이번 글은 프로젝트 진행 중 업데이트를 해야 하는 상황이 있었고, 이에 어떻게 해야 하는지 정리한 글입니다. 해당 프로젝트 내에서 디자인 시스템을 따로 SPM으로 만들어서 사용하고 있었는데 추가로 업데이트 된 것들이 있어서 SPM 업데이트를 해야 했었습니다. Cocoapods의 경우, 터미널을 통해서 Podfile에 접근하여 Version을 업데이트 할 수 있습니다. 보통, pod install을..
atomic VS nonatomic atomic atomic의 사전적인 정의는 '중단되지 않는'을 의미합니다. atomic : an operation appears to occur at a single instant between its invocation and its response 즉, atomic 하다는 것은 프로그래밍에서 데이터의 변경이 한 번에 일어난 것처럼 보이게 하는 것을 의미합니다. 데이터의 값을 변경하는 작업은 반드시 값 변경하는 시간이 필요합니다. atomic 한 데이터는 이러한 값 변경 시간이 0초인 것처럼 느끼게 합니다. 다시 말해서, 데이터의 값에 접근하는 여러 데이터 소비자(= 프로세스, 스레드)의 관점에서 데이터 값 변경에 걸리는 시간이 0초인 것처럼 느끼게 하는 것입니다. 이러한 일이 가능한 이유는 다음과 같..
개발자 계정 팀 인증서 등록 애플 개발자 계정을 회사가 아닌 개인이 구입하여 사용하는 경우, 다른 팀원들과 공유를 해야 Team에 설정할 수 있습니다. (이 과정이 생각보다 쉽지 않아서, 주로 로그인 계정을 공유하면서 개발자 계정 자체(이메일, 비밀번호)를 공유하기도 합니다. 그러나 이 방법은 보안에 취약한 방법이기 때문에 권장하지 않습니다.) 이 글에서는 개발자 계정을 여러 팀원이 공유하는 방법에 대해 작성해보도록 하겠습니다. 사전적으로 필요한 작업은 개발자 계정이 있어야 합니다. 개발자 계정 인증서를 세팅 하기 위해서 개발자 계정 소유자와 팀원의 몇가지 단계가 필요합니다. 먼저 개발자 계정 소유자의 작업부터 서술하겠습니다. 계정 소유자 앱 등록 개발자 계정을 갖고 있는 (= 매년 129,000원을 지불하는) 사람은 Apple D..
Initialization - 구조체/클래스 초기화 Initialization class, structure, enumeration과 같은 named type의 stored property의 값을 초기화하는 것입니다. Structure Initialization 예를 들어 아래와 같은 구조체 Pet을 정의하겠습니다. struct Pet { } Default Initializer let myPet = Pet() Pet에는 아직 이니셜라이저가 정의되어 있지 않지만, 자동으로 default initializer가 사용됩니다. 만약 사용하고자 하는 타입이 저장 프로퍼티가 없거나 모든 저장 프로퍼티의 기본 값이 있다면 기본 이니셜라이저를 사용할 수 있습니다. 구조체 Pet에 몇가지 저장 프로퍼티를 만들어보겠습니다. ⬇️ struct Pet { let name: S..
인공지능 - Neural Network/Perceptron Overview 인공지능이란? 인간의 뇌를 모델링 하는 것 *모델링 : 지능/지식이라는 외부 입력에 의해 이들을 하나의 기능 단위로 여겨 반응을 하는 것 .. 이러한 일련의 과정을 구현하는 것을 모델링 모델링의 방법을 크게 두 가지로 분류 가능 ✔️ symbolic : Top down 방식 / 데이터가 모여져 있는 정도에 따라서 black box > gray box > white box로 구분 가능 ✔️ connectionist : Bottom up 방식 / 생물학적 뇌는 뉴런으로 구성 🧐 생물학적 뇌 외부의 입력을 받아들여서 처리를 하고 다시 출력물을 내는데, 이러한 출력물이 다른 뉴런의 입력값이 됨 *뉴런의 특징 시냅스를 통해서 정보 전달 재생하지 않음 뉴런은 사멸하면 다시 재생하지 않음 어른의 뉴런..
Initialization - 그 외 실패 가능한 초기자 초기화 과정 중에서 실패할 가능성이 있는 초기자를 init 뒤에 물음표를 통해 실패가 가능한 초기자라고 표시할 수 있습니다. ✔️ 초기자는 이름이 따로 있는 것이 아니라 파리미터로 구분하기 때문에 실패 가능한 초기자와 실패 불가능한 초기자를 같은 파라미터 타입과 이름으로 동시에 사용할 수 없습니다. 실패 가능한 초기자는 반환값으로 옵셔널 값을 생성합니다. 초기화에 실패하는 부분에서 nil을 반환하여 초기화가 실패했다는 것을 알 수 있습니다. ✔️ 엄밀히 말하자면 초기자 init은 값을 반환하지 않습니다. 그래서 비록 nil을 반환하는 return nil 코드에는 사용되지만 init이 성공한 경우 return 키워드를 사용하지 않습니다. 아래의 코드는 숫자형을 위해 정의되어 있는 실패 ..