-
[Swift] - 상속 (Inheritance)iOS/🟠 Swift 2021. 4. 21. 11:35
상속 상속은 클래스만의 특징으로 서브클래스는 수퍼클래스의 메서드나 프로퍼티등을 상속받아 사용할수 있습니다. super 키워드 없이 이름만으로 접근할 수 있습니다. 또한 final 키워드로 정의된 요소는 상속받지 못합니다. 상속받은 수퍼클래스의 요소를 재정의를 할 때는 명확히 override 키워드로 명시해주어야 합니다. 서브클래스에서 재정의를 했다면, 수퍼클래스의 원본 요소는 super 키워드로 접근할 수 있습니다. 재정의 중 프로퍼티, 프로퍼티 감시자 부분은 규칙을 제대로 알고 가야 합니다. 메서드 재정의, 서브스크립트 재정의는 간단하기 때문에 생략하였습니다 프로퍼티 재정의 저장 프로퍼티로 재정의 할수는 없습니다. 읽기과 쓰기 가능, 즉 {get set} 으로 구현된 연산 프로퍼티의 프로퍼티 감시자를 ..
-
[Swift] - DeinitializationiOS/🟠 Swift 2021. 4. 20. 20:08
🤖🟢[우짱의 iOS 블로그]🔵💻 iOS를 공부하면서 배운 내용을 기록하고 있습니다. deinitializer 는 클래스 인스턴스가 메모리에서 해제되기 직전에 호출됩니다. deinitializer 는 클래스 타입에서만 존재합니다. How Deinitialization Works 자원을 확보하기 위해서 우리는 직접 인스턴스를 메모리에서 할당해제 하지 않습니다. Swift 가 판단하여 자동으로 할당해제합니다. ARC 를 통해 인스턴스의 메모리 관리를 합니다. 하지만 할당 해제시 해당 자원에 추가적인 작업이 필요할 수 있습니다. 추가적인 작업에 대한 예를 들면, 어떤 클래스가 파일을 열고 쓰기 작업을 한다면, 할당 해제하기 직전에 파일을 닫는 작업이 필요할 것입니다. 위와 같은 작업을 deinit 메서드 바디에..
-
[Swift] CaseIterable 이란?iOS/🟠 Swift 2021. 3. 29. 02:47
🤖🟢[우짱의 iOS 블로그]🔵💻 iOS를 공부하면서 배운 내용을 기록하고 있습니다. 안녕하세요. 오늘은 CaseIterable 프로토콜에 대해 정리해보았습니다 🐶 CaseIterable 은 'Case' 라는 키워드에서 유추할수 있지만 열거형과 관련된 프로토콜입니다. 컴파일러가 프로토콜 구현을 자동으로 제공하기 때문에 채택 선언만 해주면 바로 사용할 수 있습니다. 물론 모든 열거형에 대해 제공하는 것은 아닙니다. 그 내용은 아래에서 다루겠습니다. 그렇다면 CaseIterable 을 선언하면 어떤 것을 얻게 되느냐....? 바로 allCases 라는 타입 속성입니다. 모든 구현을 볼 수는 없지만, 프로토콜 선언부로 이동해보면 위와 같이 볼수 있는데... allCases 는 Self.AllCases 타입입니다..
-
[Swift] 연산자 구현 (Implementing Operator Methods)iOS/🟠 Swift 2021. 3. 18. 20:40
우리가 아는 연산자들은 모든 타입을 지원하지는 않습니다. +, -, ,%, /, // 등 예를 들면 커스텀 타입에 대해, 우리는 직접 연산자를 구현해야 합니다. 기본 패턴 static func operator (paramters) -> ReturnType { ... } operator 에는 연산자가 들어갑니다. parameters 에는 연산자의 앞 과 뒤에 붙을 항(좌항, 우항 혹은 단항)들의 값을 파라미터로 받게 됩니다. ReturnType 은 연산결과 값의 타입입니다. 예를 들어 '==' (equal to) 연산자라면 Bool을 반환할 것입니다. 활용 struct Point { var x: Double var y: Double static func ==(lhs: Point, rhs: Point) ->..
-
[Swift] Dictionary 간단 정리iOS/🟠 Swift 2021. 3. 16. 16:18
다른 언어에서 많이 봐왔기 때문에 익숙하다고 생각하였지만, 실제로 알고리즘 문제를 풀 때 사용법이 잘 떠오르지 않아서 간략하게 정리하였습니다! 더 자세한 내용은 스위프트 공식문서 에서 공부하시면 됩니다🐶 특징 1. 해쉬 구조 key 에 해당하는 데이터를 해싱하여 'identifier' 로 사용합니다. key 를 해싱하기 때문에 해당 데이터의 타입은 Hashable 프로토콜을 채택하고 있어야 합니다. 2. 하나의 element 는 Key-Value 쌍으로 구성되어 있습니다. 하나의 value 는 unique 한 key 값과 연결되어 있습니다. 3. 순서가 없습니다. 따라서 for-in 순회 시 항상 같은 순서로 순회한다는 것을 보장하지 않습니다. 해결법 : key 나 value 를 원하는 규칙으로 정렬하여..
-
[Swift] Enumeration 총정리iOS/🟠 Swift 2021. 3. 10. 12:16
- 1차 수정 (2021.03.29) - 2차 수정 (2021.05.07) 열거형을 공식문서를 통해 정리를 하고 여러 번 복습하면서 놓친 내용이나 새로 깨닫게 된 점을 글로 남깁니다. 👍🏻 자료: Enumerations 기본 Syntax enum Direction { case north, south, east, west } // 혹은 enum Direction { case north case south case east case west } 열거형을 선언하는 것은 새로운 커스텀 타입을 만드는 것이고, 그 타입이 가질 수 있는 값들을 정의하는 것입니다. 위 코드에 따르면 Direction 타입은 north, south, east, west 라는 값만 가질 수 있습니다. 다른 값을 사용하려고 하면 컴파일 에..
-
'현상금 랭킹 앱'을 제작하면서 배운 점 회고iOS/🤖 App 2021. 3. 5. 22:41
현상금 랭킹 앱은 3단계의 과정을 거쳐서 최종 결과물이 되었습니다. 1. MVC 패턴을 가지고 테이블 뷰 (UITableView) 와 디테일 뷰 (UIView) 로 구성된 앱 작성하기 2. MVC 패턴을 MVVM 패턴으로 리팩터링하기 3. 테이블 뷰를 컬렉션 뷰로 변경하고, 디테일 뷰에 애니메이션 추가하기 위 단계의 순서대로 새로 배우거나 복습할 점을 글로 남기려고 합니다. 1단계: MVC 패턴을 가지고 테이블 뷰 와 디테일 뷰로 구성된 앱 작성하기 a. MVC 이전 글에서 한 번 다룬 내용입니다. MVC 패턴의 특징은 앱 내의 오브젝트를 3개의 큰 역할 (레이어) 로 나누고, 역할 간 이상적으로 소통하는 방식이 있다는 것입니다. Model, View, Contoller : View 와 Model 에는 ..
-
[UIKit] 뷰 태깅 사용해보기 (View Tagging)iOS/🤖 App 2021. 3. 5. 15:19
참고 글: developer.apple.com/documentation/uikit/uiview/1622493-tag 뷰 컨트롤러에서 뷰에 접근하려면 보통 @IBOutlet 을 통해 참조를 얻어서 접근합니다. 이 외에 또 다른 방법이 있는데, 바로 View Tagging 입니다. 각각의 뷰에 태그 값을 부여해서, UIView 의 인스턴스 메소드인 viewWithTag(_:) 에 태그 값을 전달하여 사용합니다. 사용 예시 class MyViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() /* 1 */ let myView = view.viewWithTag(0) } } /* 1 */ UIViewController..
-
[iOS] MVC 란? (feat. Cocoa MVC)iOS/🤖 App 2021. 3. 3. 23:30
1차 수정: 21.07.26 2차 수정: 21.08.05 애플 아카이브 문서를 중심으로 작성하였습니다. 안녕하세요🐶 이번 시간에는 iOS 개발 입문 시기에 거의 필연적으로 사용하는 아키텍처 패턴인 Model-view-controller (MVC) 패턴의 기본 개념을 알아보고, 애플에서 제시하는 Cocoa MVC 에 대해서 다뤄보려고 합니다. 그럼 시작해볼게요!!!🔥 이 글에서 다루는 것: MVC의 기본 개념 Cocoa MVC란? Model, View, View controller 의 역할 Cocoa MVC의 장점 과 단점 우선, MVC 의 기본 개념 이 패턴은 User Interface 를 개발할 때 주로 사용되는 패턴으로, 1. 사용자로부터 정보를 입력받는 과정 2. 내부적으로 정보를 처리하고 표현하는..