패스트캠퍼스24 [19일차] Designated Init vs. Convenience Init * designated initialize : 직접적인 initialize * convenience initialize : 간접적인 initialize * Convenience initialize 사용하는 이유? : initialize 파라미터가 너무 많을 때, 간략히 하고자 사용 ☆ designated vs convenience - DI는 자신의 부모의 DI를 호출해야 함 - CI는 같은 클래스의 이니셜라이저를 꼭 하나 호출해야 함 - CI는 궁극적으로 DI를 호출해야함 위의 예제와 같이 CI를 이용하면 클래스 객체 생성을 간단하게 이용할 수 있다. CI 이용 시, 궁극적으로 DI를 반드시 호출해주어야 한다. 2020. 8. 7. [18일차] Class 생성자 이해하기 (2-phase Initialization) * 상속은 언제 사용하면 좋은가? (1) Single Responsibility (단일 책임) : 하나의 클래스는 한 가지의 역할만 해야 한다. (2) Type Safety (타입이 분명해야 할 때) : 특정 조건의 타입 객체를 사용하고자 할 때 (3) Shared Base Classes (다자녀가 있다) : 동일한 행위를 다중 객체에서 사용 (4) Extensibilty (확장성이 필요한 경우) (5) Identity (정체를 파악하기 위해) * 상속된 자식 클래스는 부모 클래스의 형태와 다르게 생성할 수 있다. ex) let student1 = Student(firstName: "Mike", lastName: "Kim") let student2 = StudentAthlete(sports: ["Base.. 2020. 8. 7. [17일차] Class와 Struct를 사용해야 할 때 * 이럴 때 Struct 쓰자 (1) 두 Object를 "같다, 다르다"로 비교해야 하는 경우 (2) Copy 된 각 객체들이 독립적인 상태를 가져야 하는 경우 (3) Object의 데이터를 여러 스레드에 걸쳐 사용할 경우 (각 Object가 독립적으로 존재하므로 다중 스레드를 사용하더라도 오류가 날 확률이 낮다.) * 이럴 때 Class 쓰자 (1) 두 Object의 인스턴스 자체가 같음을 확인할 때 (2) 하나의 객체가 필요하고, 여러 대상에 의해 접근되고 변경이 필요한 경우 # 쉽게 사용하는 Tip) 1. 일단 Struct로 쓰자 2. 그 이후에 Class로 바꿔보자 (상황에 따라 다름) - 공식 Doc https://developer.apple.com/swift/blog/?id=10 # 실무 Ti.. 2020. 8. 5. [16일차] Class 사용 * Class와 Struct 차이 비교 - class : Heap(느림) / struct : Stack(빠름) - structure은 Copy(복사 = 별도로 관리) 개념, class는 Share(공유 = 같은 곳을 바라봄) 개념 import UIKit struct PersonStruct { var firstName: String var lastName: String var fullName: String { return "\(firstName) \(lastName)" } mutating func uppercaseName() { firstName = firstName.uppercased() lastName = lastName.uppercased() } } class PersonClass { var firs.. 2020. 8. 4. [15일차] Property vs Method * Property vs Method 을 선택 기준 : 동일한 결과값을 전달할 때 무엇을 사용하는 것이 효율적인가? Q) Setter가 필요한가? A) Yes - "Computed Property" Q) 계산이 많이 필요한가? 혹은 DB Access나 File IO가 필요한가? A) Yes - "Method" No - '"Computed Property" * Method : 인스턴스에 귀속되어서 사용되는 것 - mutating : struct 인스턴스 변수가 함수내에서 변형될 때 '함수 선언부'에 적어줘야 한다. * extension : 기존에 만들어진 struct에서 기능을 확장하고자 할 때 사용 Tip) 확장 시 필요한 함수명을 미리 적어놓고, 함수 선언문을 만들기 2020. 8. 4. [13일차] Structure(구조)와 Class 일반적으로 Swift에서 객체 구조는 아래와 같다. Object = Data + Method * Structure vs Class Structure Class Value Types Reference Types Copy Share Stack Heap - Structure : 관계 있는 데이터를 모아서 표현할 때 사용 - Class : 데이터를 모아서 표현하되, 같은 데이터를 참조할 때 사용 왜 Structure 구조를 사용해야 할까? 위와 같이 첫번째 줄처럼 변수를 일렬로 나열하는 것보다, 두번째 줄처럼 사람이 이해하기 쉬운 구조로 나누어서 변수를 표현해주는 것이 가독성이 좋으며 협업이나 리펙토링 과정에서도 코드파악에 용이하다. 아래는 Structure(구조) 형식을 이용하여 "제일 가까운 위치의 배달 가.. 2020. 7. 30. [12일차] Set 과 Closure 이용 * Set : 중복이 없는 유니크한 아이템을 담을 때 사용 * Closure : 이름이 없는 메소드 클로저를 이용하여 동적으로 함수를 만들어서 활용 가능 * Closure - Capturing Value (☆) : scope 밖의 범위에서도 사용이 가능하다. (Swift에서 제공하는 기능) 2020. 7. 28. [11일차] Array 함수와 Dictionary 실습 1. Array(배열)에 사용하는 다양한 함수 * 배열 변수에 range(범위)를 지정하여 사용 가능 ex) let firstThree = eventNumbers[0..2] * contains() : 배열에 특정 값의 포함 여부 * insert(value, at) : 특정 값(value)을 인덱스(at)에 추가 * removeAll() : 배열 전체를 모두 삭제 * swap(startIndex, endIndex) : 배열의 특정 인덱스 값을 서로 바꿔주는 함수 * for num in eventNumbers { print(num) } * 반복문으로 인덱스와 값을 출력 for (index, num) in eventNumbers.enumerated() { print("idx: \(index), value: \.. 2020. 7. 27. [10일차] Collection 소개, Array 사용법 # 실무에서는 수많은 변수들을 효율적으로 관리할 필요가 있다. * 여러 개의 변수들을 관리하는 도구 - Array - Dictionary - Set - Closure : 코딩 블록 1. Array (배열) - 같은 타입의 변수를 담아야 한다. - 순서(Index)가 존재한다. - 순서가 있는 아이템, 아이템 순서를 알면 유용할 때 사용 # let : 변경하지 않는 변수를 선언할 때 사용 배열 변수로 사용 시, append/remove 불가능 # var : 변경이 가능한 변수. 배열 변수로 사용 가능 2020. 7. 26. 이전 1 2 3 다음