접근제어 특정 코드의 접근을 다른 소스파일이나 모듈에서 제한하는 것이다. 이렇게 접근제어를 함으로써 특정 코드의 세부적인 구현을 감추고 딱 필요한만큼 공개해 다른 곳에서 사용할 수 있도록 한다. 클래스, 구조체, 열거형 등 개별 타입에도 적용할 수 있고 그 타입에 속한 프로퍼티, 메소드, 초기자, 서브스크립트에도 적용할 수 있다. 프로토콜은 그래서 전역상수, 변수, 함수같이 특정 문맥에 종속된다. Swift에서는 기본 접근레벨을 제공해 접근레벨의 처리를 쉽게할 수 있도록 돕는다. 그래서 사실 단일 타겟의 앱에서는 특별히 접근레벨을 전혀 명시하지 않아도 된다. 모듈과 소스파일 Swift의 접근제어는 모듈과 소스파일에 기반을 두고있다. 모듈을 코드를 배포하는 단일 단위로 하나의 프레임워크나 앱이 이 단위로 ..

면접 질문 중 Frame과 Bounds의 차이점에 대해서 질문을 받았다. 답변 도중 면접관님이 SuperView의 Bounds 값을 바꾸면 SubView의 Frame값은 어떻게 되나요? 라고 질문을 주셨다. SuperView에서 Bounds를 바꾸면 SubView가 움직이는 것으로 알고 있었기 때문에 움직인 값 만큼 변한다고 생각하고 답변을 했다. 그 결과는 직접 한번 해보면서 조금 더 알아보면 좋겠다는 말씀을 해주셨다. 그래서 면접 후 간단하게 테스트를 해볼겸 다시 정리한다. Frame SuperView의 좌표시스템안에서 View의 위치와 크기를 나타낸다. Frame 변경 FirstView의 frame을 바꿔주니 RootView의 좌표시스템 안에서 위치가 변경되는 것을 볼 수 있다. 현재 RootVie..
[Swift] 고차함수 (1) - map, filter, reduce 고차함수 ? 매개변수로 함수를 갖는 함수를 말한다. Swift 표준 라이브러리에서는 다음과 같은 고차함수를 제공한다. map filter reduce 모두 컨테이너 타입(Array, Set, Dictionary 등)과 Optional 타입에서 사 harryjeon.tistory.com 저번에 map, filter, reduce에 대해서 알아봤다. 이번에는 map 중 flatMap, compactMap에 대해 알아보자. FlatMap 선언 func flatMap(_ transform: (Self.Element) throws -> ElementOfResult?) rethrows -> [ElementOfResult] transform은 컨테..
고차함수 ? 매개변수로 함수를 갖는 함수를 말한다. Swift 표준 라이브러리에서는 다음과 같은 고차함수를 제공한다. map filter reduce 모두 컨테이너 타입(Array, Set, Dictionary 등)과 Optional 타입에서 사용할 수 있다. 왜 ? 함수형 프로그래밍의 장점을 간편하게 이용할 수 있기 때문이다. for-in 구문에 비해 코드가 간결해진다. 코드 재사용, 컴파일러 최적화 측면에서 성능 차이가 있다. 멀티스레드 환경에서 부작용을 방지한다. map - 변형 map 함수는 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너를 생성한다. for-in 구문과 비슷한 동작원리이지만 map를 사용하게되면 클로저 상수를 통해 코드의 재사용이 용이해지고 컴파일러 최적화 측면에서 성능이..
Observable 특정 형태의 데이터를 전달하는 이벤트를 비동기적으로 생성할 수 있는 객체이다. Hot Observable과 Cold Observable로 구분할 수 있다. Hot Observable 이름 그대로 뜨거워서 계속 흘리고 있는 스트림 Observable 생성과 동시에 이벤트를 방출한다. 구독 여부와 상관없이 이벤트를 발생시키기 때문에 일단 동작하기 시작하면 리소스를 사용한다. 이전에 방출한 데이터에 대해서는 받을 수 없다. 여러 Observer가 데이터를 공유할 수 있다. Hot Observable에는 Subject가 있다. 예를들어 API를 호출할 때 여러 부분에서 이 결과가 필요하다면 매번 API를 호출하는 것 보다 그 결과를 공유한다면 더 효과적일 것이다. 이때 Hot Observab..
https://harryjeon.tistory.com/60 [RxSwift] 곰튀김님의 RxSwift 강의 (2) 이전 글 [RxSwift] 곰튀김님의 RxSwift 강의 (1) Subject 만들 때 부터 어떤 데이터를 내보낼지 정해져있다. Observable처럼 값을 받을 수도 있지만 (subscribe) 외부에서 값을 통제할 수도 있다. (onNext) AsyncSubje harryjeon.tistory.com 곰튀김님의 RxSwift 강의를 듣는 도중 Relay, Subject, Driver가 나왔다. 강의에서 설명을 해주셨고 정리도 해놨지만 조금 더 찾아보려고 한다. Subject PublishSubject 초기값이 없다. 다른 Observer가 Subscribe한 순간 아무런 값도 주지 않는다..
위임 (Delegation) 위임은 클래스 혹은 구조체 인스턴스에 특정 행위에 대한 책임을 넘길 수 있게 해주는 디자인 패턴 중 하나이다. protocol DiceGame { var dice: Dice { get } func play() } protocol DiceGameDelegate: AnyObject { func gameDidStart(_ game: DiceGame) func game(_ game: DiceGame, didStartNewTurnWithDiceRoll diceRoll: Int) func gameDidEnd(_ game: DiceGame) } DiceGame 프로토콜을 선언하고 DiceGameDelegate에 선언해서 실제 DiceGame의 행위와 관련된 구현을 DiceGameDeleg..
프로토콜은 특정 기능 수행에 필수적인 요소를 정의한 청사진이다. 프로토콜을 만족시키는 타입을 프로토콜을 따른다고 한다. 프로토콜에 필수 구현을 추가하거나 추가적인 기능을 더하기 위해 프로토콜을 확장(extend)하는 것이 가능하다. 프로토콜 문법 (Protocol Syntax) protocol SomeProtocol { // protocol definition goes here } 프로토콜의 정의는 클래스, 구조체, 열거형 등과 유사하다. struct SomeStructure: FirstProtocol, AnotherProtocol { // structure definition goes here } 프로토콜을 따르는 타입을 정의하기 위해서는 타입 이름 뒤에 콜론(:)을 붙이고 따를 프로토콜 이름을 적는다..

RxSwift ? RxSwift는 비동기적으로 생기는 데이터를 completion 같은 클로저를 통해 전달하는게 아닌 return 값으로 전달하기 위해서 만들어진 유틸리티이다. completion을 사용한 비동기 처리 방식 private func downloadJson(_ url: String, _ completion: @escaping (String?) -> Void) { DispatchQueue.global().async { let url = URL(string: url)! let data = try! Data(contentsOf: url) let json = String(data: data, encoding: .utf8) DispatchQueue.main.async { completion(json)..

열거형은 관련된 값으로 이루어진 그룹을 공통의 타입으로 선언해 안전성을 보장하는 방법으로 코드를 다룰 수 있게 해준다. C나 Objective-C가 Integer 값들로 열거형을 구성한 것에 반해 Swift에서는 case값이 String, Character, Integer, Floting 값들을 사용할 수 있다. 열거형은 1급 클래스 형이어서 계산된 프로퍼티를 제공하거나 초기화를 지정하거나, 초기 선언을 확장해 사용할 수 있다. 열거형 문법 (Enumeration Syntax) enum SomeEnumeration { // enumeration definition goes here } enum 키워드를 사용해 열거형을 정의한다. enum CompassPoint { case north case south ..
- Total
- Today
- Yesterday
- docker
- file private
- rxswift
- enumerations
- Xcode
- Git
- navigation
- IOS
- strcut
- MVVM
- OCR
- kakao
- 곰튀김
- Swift
- AWS Fargate
- Custom
- frame과 bounds 차이
- 카메라
- CodingTest
- onTapGesture
- AWS
- tabview
- delegate
- 의미있는이름
- Generic
- SwiftUI
- Login
- Protocol
- ObservedObject
- ChatGPT
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |