[Data Structure] 자료구조란?
2024. 3. 13. 17:51
CS/Data Structure
"자료구조"(Data Structure)란 데이터에 효율적인 접근을 위한 데이터의 구조, 관리, 저장을 말한다. 정확히 말하면 "자료구조"는 데이터의 모임으로, "데이터 간의 관계"와 "적용할 함수나 명령"을 의미한다. 예를 들어 자료구조 중 Queue를 생각해 보면, 데이터의 저장 및 삭제까지를 정의한다. 프로그래밍에서 적절한 자료구조는 효율적인 알고리즘을 수행할 수 있게 해준다. Queue 자료구조를 사용하면, BFS 알고리즘은 효율적으로 수행할 수 있다. 자료구조의 분류 자료구조는 크게 2가지로 분류된다. 원시 자료구조 (Primitive Data Structure) 복합 자료구조 (Non-Primitive Data Structure) 원시 자료구조 (Pritimitive Data Structure..
[iOS] Core Animation(2) - CAAnimation
2024. 3. 7. 17:31
iOS/iOS
이전 포스팅에선 Core Animation과 CALayer의 기본 개념에 대해 알아보았다. 이번 포스팅에선 Custom Animation을 구현해보자. 특정 Layer에 Animation을 추가하고 싶다면 add(_:forKey:) 메서드를 통해 추가한다. func add( _ anim: CAAnimation, forKey key: String? ) 이때 CAAnimation을 통해 Animation을 정의할 수 있는데, 이는 abstract class이기 때문에 다음과 같은 concrete subclass를 사용한다. CABasicAnimation CAKeyframeAnimation CAAnimationGroup CATransition 이렇게 여러가지가 있지만, Core Animation 중 가장 기본..
[iOS] Core Animation(1) - Concept
2024. 3. 5. 16:16
iOS/iOS
"Core Animation"은 iOS 혹은 OS X환경에서 Grapic Rendering 및 Animation Infra로, View 혹은 여러 Element들을 Animating하는데 사용한다. 쉽게 말해 "Core Animation"은 View를 Drawing하는 Framework이다. "Core Graphics"도 View를 Drawing하는 API이지만, CPU에서 그리는 반면 "Core Animation"은 GPU에서 View를 Drawing한다. Swift에서 일어나는 Animation의 경우, 만화처럼 Frame을 빠르게 교체해 실제로 연속적으로 일어난 것처럼 보이게 하는 것이다. 이렇게 1초에 몇 개의 Frame을 표시할 수 있는 지를 "refresh rate"(주사율)로 표현하며, 단위..
[Computer Network] Network Layer(3) - Unicast Routing
2024. 3. 2. 17:08
CS/Computer Network
"Network Layer"의 주된 서비스 중 하나는 Routing이며, "Routing"은 Source부터 Destination까지 최소 비용인 경로를 결정하는 작업을 의미한다. 이러한 Routing은 1:1 통신일 경우에는 "Unicast Routing" 1:N 통신일 경우에는 "Multicast Routing"으로 구분된다. 이번 포스팅에서는 Unicast Routing에 대해 알아보자. Hop-By-Hop Routing 다음과 같은 네트워크가 있다고 가정해 보자. 해당 네트워크에서 A부터 B까지 최소 비용 경로는 라우터 "u-x-y-z"를 거친다. 만약 Router가 경로상에 있는 모든 Router정보를 안다고 가정해 보자. 해당 예시에선 "u-x-y-z"로 짧지만, 인터넷 상에서 Router의 ..
[iOS] Render Loop & Hitch(2)
2024. 2. 24. 18:31
iOS/iOS
Hitch는 Render Loop에서 제시간에 Frame을 준비하지 못했을 때 발생한다. 이러한 Hitch는 어떤 Stage에서 발생했냐에 따라, Commit Hitch, Render Hitch로 구분된다. Commit Hitches "Commit Phase"는 UI를 변경하고 업데이트된 UI Layer Tree를 Render server로 제출한다. 이때 Render Server로 제출되는 결과물을 "Commit"이라 부른다. 다음과 같이 "Event Phase"에서 touch이벤트를 통해 backgroundColor와 frame을 변경했다고 가정하자. 다음과 같이 시스템은 display 혹은 layout이 필요하다고 마킹을 하게 된다. 이후 "Commit Phase"에서 시스템에 의해 각 draw(r..
[iOS] Render Loop & Hitch(1)
2024. 2. 22. 01:05
iOS/iOS
App에서 화면 스크롤, Pop Up 등 여러 Animation이 존재한다. 이러한 Animation은 유저의 터치와 같은 이벤트에 의해서 발생하는데, App은 이러한 유저의 이벤트를 통해 변경된 UI를 화면에 Display 하는 과정을 Render Loop이라 부른다. Hitch Render Loop의 각 Cycle에서 만들어지는 화면을 "Frame"이라 부른다. Swift에서 일어나는 Animation의 경우, 만화처럼 Frame을 빠르게 교체해 실제로 연속적으로 일어난것 처럼 보이게 하는 것이다. 만약 Frame이 제때 만들어지지 않는다면 제시간에 교체하지 못하게 되어 사용자에게 버벅거리게 보일 것이다. 이처럼 다음 Frame이 늦어져, 애니메이션이 끊기는 시간을 "Hitch"라고 부른다. 이때, ..
[Computer Network] Network Layer(2) - IP Address
2024. 2. 12. 14:26
CS/Computer Network
하나의 LAN 내에서는 각 디바이스만 구별하면 되기에 Data Link계층의 MAC주소를 사용했다. 하지만, LAN간의 통신에서 이 MAC주소는 사용할 수 없다. MAC주소는 디바이스마다 고유하기에, 모든 LAN내의 디바이스의 MAC주소를 알아야 하는 문제점이 생기기 때문이다. 따라서,LAN 간의 연결을 Internet계층인 IP 프로토콜이 담당하게 되며, 이를 위해 사용되는 식별자가 IP 주소이다. 이러한 IP주소는 32bit 체계를 사용하며, 이를 IPv4라 부른다. IP Address Notation 일반적으로 IP주소를 표기하는 데 있어서는 크게 2가지 notation을 사용한다. Dotted Decimal Notaion Hexadecimal Notation IP Address Hierarchy ..
[Computer Network] Network Layer(1)
2024. 2. 4. 20:56
CS/Computer Network
지난 포스팅에서 Network의 기초적인 개념과 TCP/IP 프로토콜 계층에 대해서 살펴보았다. 오늘은 이 중 IP protocol을 중점적으로 Network Layer에 대해 알아보자. "Internet Layer"는 데이터를 신뢰성보다는 성능 중심(Best-Effort)으로 목적지까지 전달한다. 이러한 Internet Layer는 크게 2가지의 서비스를 제공한다. 패킷화 포워딩 & 라우팅 Packet Circuit Switching vs. Packet Switching 우선 Network에서 데이터를 보내는 방식에는 크게 2가지가 있다. Circuit Swithcing Packet Switching Circuit Switching "Circuit Switching"이란, Connection-Orie..
[Computer Network] Network란? & TCP/IP Protocol
2023. 12. 4. 13:38
CS/Computer Network
"Network"란 "Net"와 "Work"의 합성어로, 여러 디바이스(Network Edge, Network Core)들이 통신 기술을 이용하여 그물망처럼 연결된 것을 의미한다. LAN vs. WAN Network는 사이즈 혹은 범위에 따라 2가지로 분류할 수 있다. LAN(Local Area Network) WAN(Wide Area Network) LAN(Local Area Network) "LAN"은 학교, 회사, 가정과 같이 특정 지역을 범위로 하는 네트워크이다. 쉽게 말해 우리가 집에서 쓰는 WiFi가 LAN의 일종이다. 두 디바이스가 통신하기 위해서는 케이블로 연결되어 있어야 한다. 하지만, 현실세계에서 효율적으로 연결하기 위해서는 적은 수의 케이블로 많은 디바이스를 연결할 필요가 있다. 다음..
[iOS] UIResponder(1)
2023. 11. 10. 22:45
iOS/iOS
"UIResponder 객체"들은 앱 내의 "User Interaction으로 일어난 Event"에 반응하고 처리한다. 많은 UIKit의 객체들이 Responder인데, 대표적으로 UIApplication, UIViewController, UIView(UIWindow)이 있다. Event Swift에서 User Interaction을 통해 일어난 Event들에는 다양한 타입이 존재하는데, touch: 스크린을 터치 motion: 흔드는 것과 같은 device의 모션 remote-control: 에어팟에서 두 번 터치와 같은 원격제어 이벤트 press: 전원버튼과 같은 물리적인 버튼을 눌렀을 경우 등등이 있다. 더 자세한 정보는 공식문서를 참고바란다. "Responder"는 이러한 이벤트의 타입별로 다양한..
[iOS] Custom Drop Down
2023. 10. 31. 00:18
iOS/iOS
이번 포스팅에선 다음과 같은 DropDown View를 구현해 보자.이후, UIResponder의 firstResponder를 활용해 리팩토링했습니다. 리팩토링한 포스팅을 아래 링크에 있습니다. https://seokyoungg.tistory.com/85 [iOS] Custom Drop Down (2) - firstResponder 활용해 리팩토링하기이전 포스팅에선, Custom DropDown을 구현했었다. 우선, DropDownView를 살펴보면 다음과 같다. "AnchorView를 터치"하게 되면 DropDownView는 TableView를 display 한다. "TableView에서 옵션을 선택"하거나, "외부 영역seokyoungg.tistory.com 전체 코드는 여기에서 확인해 볼 수 있..
[iOS] LocalDB(3) - Core Data CRUD
2023. 10. 25. 17:11
iOS/iOS
"Core Data"는 Database가 아니라 Object Graph Management이다. Core Data는 다양한 기능들을 제공하는데, 제공하는 기능에는 Persistent, Change Tracking과 같은 기능들이 있다. 즉, Persistent는 제공하는 기능 중 하나일 뿐이지, Core Data는 Database가 아니다. 해당 블로그에서 사용하는 예시는 아래 링크에서 자세하기 볼 수 있다. https://github.com/jungseokyoung-cloud/iOS-Study/tree/main/CoreData-Demo Core Data Model Core Data를 사용하기 위해선, App의 Object구조를 정의하는 "Core Data Model File"을 생성해야 한다. "Cor..