일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- widget
- 멋사
- spritekit
- composable architecture
- 컴퓨터그래픽스
- swift concurrency
- 문법
- Swift
- cs
- 영남대
- 대외활동
- c++
- ReactorKit
- dispatchqueue
- 위젯킷
- uikit
- widgetkit
- 멋쟁이사자처럼
- 스위프트
- 웹
- 스유
- 운영체제
- SwiftUI
- 네트워크
- TCA
- Protocol
- 리액트
- 알고리즘
- 후기
- 백준
- Today
- Total
목록앱 (115)
맛동산이

SwiftUI는 UIKit과 다르게 모든 뷰가 Struct로 선언되어 있다. 왜 그렇게 해야하며, 그렇게 설계한 이유가 궁금해서 공부하게 되었다. 먼저 염두해야하는 내용은 SwiftUI는 선언형 프로그래밍이라는것이다! 선언형프로그래밍은 함수형프로그래밍의 좀더 좁은 범위다. 그러면 늘 그렇듯 먼저 알아야하는 내용에 대해서 공부하자. 구조체와 클래스의 차이점 먼저 구조체와 클래스의 차이는 다음과 같다. 상속 가능여부 클래스는 상속이 가능하지만, 구조체는 상속이 불가능하다. 형식의 차이 클래스는 참조타입이지만, 구조체는 값 타입이다. 구조체는 메모리영역에서 stack영역에 저장이 되며, 클래스는 참조타입이기 때문에 heap영역에 저장이 된다. 값타입의 구조체는 값을 변경하려고 하면, 새로운 메모리를 할당하고 ..

프로토콜은 타입으로 사용이 가능하다. 이것은 해당 프로토콜을 채택한 어떠한 클래스의 인스턴스도 들어갈 수 있다는 것을 의미한다. " You can set it to an instance of any type that adopts the protocol ." 예를 들어 protocol Human { func getAge() -> Int } class Male: Human { var age: Int init(_ age: Int) { self.age = age } func getAge() -> Int { return age } } class Female: Human { var age: Int var name: String init(age: Int, name: String) { self.age = age sel..
공부의 발단.. KVO(key-value observing)에 대해서 공부를 하다가, dispatch에 관한 이야기가 나와서, 해당 부분에 대해서 난생처음 본 부분이라 공부하게 되었다. 컴파일과 런타임 가장 먼저 컴파일과 런타임에 대한 이해가 있어야 한다. 컴파일 : 컴파일이란, 우리가 작성한 코드가 어셈블리어, 즉 기계가 이해할수 있는 0과 1의 언어로 변환되는 과정을 의미한다. 런타임 : 런타임이란, 위에서 컴파일을 거친 코드가, 사용자에 의해 사용되어지는 순간을 의미한다. Dispatch Dispatch란 오버라이드 된 메서드가 존재할때, 어떤 메서드를 호출할 것인지를 결정하여, 그것을 실행하는 메커니즘이다 Swift에선 Static Dispatch와 Dynamic Dispatch 두 가지 방식이 ..

회전하는 애니메이션이나, 혹은 변경되는 애니메이션을 추가하고 싶을때 사용하고 싶어서 애니메이션에 대해서 공부를 해보자! animation(_: , value: ) 우선 animation은 instance Method이다. animation은 modifier의 일종이며, 동일하게 어떠한 뷰를 받았을때, 해당 애니메이션을 처리한 새로운 뷰를 리턴하게 된다. 따라서 animation의 구현부는 다음과 같다. func animation( _ animation: Animation?, value: V ) -> some View where V : Equatable Animation은 두개의 파라미터를 받게된다. animation : animation은 어떠한 animation을 수행할것인지에 대한 파라미터이다. va..

먼저 SwiftUI는 반응형프로그래밍을 하기 위한 프레임 워크라는것을 이해하면 좋다. 기존의 MVC가 아닌 MVVM으로 프로그래밍을 할때 중요한것은 ViewModel과 View가 어떻게 연결되어있고, 서로 관찰하는지에 대해서 고민을 해야하며, 해당 데이터 바인딩을 어떻게 해줄지가 중요하다. 기존의 UIKit에서는 이러한 문제점을 RxSwift라는 3th party library를 사용해서 해결하였는데, (최근에는 콤바인등… ) SwiftUI는 기본적으로 잘 설계되어 있어서 이러한 데이터 플로우에 대해서 이해하는 것이 굉장히 중요하다고 생각한다. 따라서 오늘은 ObservableObject, ObservedObject, StateObject에 관해서 공부를 해보자! ObservableObject Obser..
Source of Truth란??? SwiftUI에서의 Source of Truth란 데이터의 일관성과 정확성을 유지하는 중요한 개념을 의미한다. SwiftUI앱 내에서 사용자 인터페이스(UI)는 데이터 모델에 바인딩 되어있다. 이말은 기존의 UIKit과 다르게 SwiftUI는 데이터모델인 @State에 UI가 바인딩되어 있기 때문에 UI는 데이터 모델의 변경에 의해서 자동으로 반응하고, 변경된다. 하지만 이렇게 UI를 변경하는 상태가 여러곳에서 복사되고 변경되고 사용되어 진다면, 이는 사용자 경험(UX)의 일관성이나 정확성 유지에 굉장히 취약해 진다. (사이드 이팩트가 발생함) 따라서 SwiftUI에서는 SwiftUI에서는 보통 @State, @Binding, @ObservedObject, @Envir..

UIApplication.shared 라는 코드가 뭔지 몰라서 찾아보니 싱글톤이라는 디자인 패턴이며, 이것에 대해서 뭔지 몰라서 찾아보게 되었다. 싱글톤 패턴이란?(what is Singleton design pattern) 싱글톤이란, 단 하나의 인스턴스만을 생성해서 사용하는 디자인 패턴을 의미한다. 당연히 이러한 디자인 패턴을 이용하는데에는 다 장점이 있겠죠? 싱글톤 디자인 패턴, 하나의 User Info 라는 전역 인스턴스가 존재한다. 싱글톤의 장점 메모리 측면 : 단한번의 인스턴스가 생성되기 때문에, 메모리 관리가 편하고, 모종의 이유로 메모리가 해제되지 않는 memory leak 부분에서도 자유롭다. 또한 객체 접근시간이 줄어든다. 정보 공유 측면 : 하나의 인스턴스가 전역적으로 사용되기 때문에..
세마포어(DispatchSemaphore) 임계영역에 대하여 임계영역(critical section)이란, 여러프로세스가 동작할때, 각 프로세스가 공유 데이터로 접근하는 프로그램 코드 블록을 의미하며, 이렇게 여러 프로세스가 동시다발적으로 임계영역(즉 공유 메모리) 에 접근하게되면, 데드락이 발생할수도 있는 위험한 값이 오염될수도 있는 영역을 의미한다. 뮤텍스와 세마포어 뮤텍스와 세마포어는 이러한 위의 임계영역에 대한 프로세스 접근 제어 정책을의미한다. 뮤텍스 : 뮤텍스는 공유영역에 단 하나의 프로세스만 접근이 가능하도록 하는 정책이다. 세마포어 : 세마포어는 공유영역에 접근할수 있는 프로세스의 수를 지정해주는 정책이다. Swift에서의 세마포어 스위프트에서느 dispatchSemaphore이라는 키워드..

역시나 킹갓 제드님이 다 정리해두셨다. iOS ) Concurrency Programming Guide - Concurrency and Application Design 스위프트 프로그래밍을 처음 접하다 보면, api 에서 어떠한 값들이 변화하고 그 값을 통해서 ui를 변경 해주는 경우 dispatch queue.main.async 라는 명령어를 통해서 ui를 변경해준 경험이 존재 할것이다. 없음말고, 무튼 나는 있다. 근데 이렇게 dispatchqueue.main.async가 뭔지 알기 위해서 이렇게 글을 쓴다. GCD( grand central dispatch )의 발단 우리컴퓨터에서 연산처리속도는 cpu의 성능에 따라 정해진다. 하지만 이러한 연산 속도를 올리기 위해서 cpu를 쉬지 않고 돌린다면,..