IT Study
-
[iOS] 디바이스에 데이터 저장하기 1탄 (Feat. UserDefaults)IT Study/iOS 2024. 10. 19. 22:15
안녕하세요, Three입니다.이번 글에서는 iOS 앱에서 데이터를 저장하는 다양한 방식과 함께, UserDefaults를 사용해 사용자의 테마 설정을 저장하고 관리하는 방법에 대해 소개하고자 합니다.그 전에 iOS의 데이터 저장 방식을 확인하고, 시작하도록 하겠습니다 😀 1. iOS 데이터 저장 방식앱 데이터와 사용자 데이터를 기기에 저장하는 방법은 여러 가지가 있습니다. 아래의 표로 간단히 특징들에 대해 알아보시죠.방법사용장점단점UserDefaults앱 설정 (테마, 음량, 언어)빠름, 간단보안 X, 오직 소규모 데이터File System이미지, 문서, 음악, 비디오파일 구조 관리 가능파일 관리 필요Core Data복잡한(관계형) 데이터 모델관계형 데이터 관리 용이학습 시간 소요Keychain비번,..
-
[iOS] SwiftUI의 상태 관리 (Feat. @State, @StateObject, @ObservedObject, @Published)IT Study/iOS 2024. 9. 22. 20:16
SwiftUI에서 상태 관리에 대해 알아보도록 하죠. 먼저 @State, @StateObject, @ObservedObject, @Published는 상태 변화를 관리하고 SwiftUI 뷰와의 데이터 바인딩을 위한 도구입니다. 각 역할을 이해하고 어떤 상황에서 어떤 속성을 사용해야 하는지 정확히 파악해보도록 하겠습니다.현재 제가 하고 있는 개인 프로젝트와 관련된 예시와 함께 보도록 하겠습니다. 1. @State개념@State 뷰 내부에서만 사용하는 상태를 저장, 관리하는 데 사용됩니다. 주로 간단한 데이터(숫자, 문자열, Bool 등)를 다룰 때 사용됩니다. @State로 선언된 변수는 뷰가 다시 렌더링될 때에도 상태를 유지하며, 상태가 변경되면 자동으로 뷰가 재렌더링됩니다. 예시struct MainV..
-
[Android] Material 3 BottomNavigationView Indicator(인디케이터) 색상 설정하기IT Study/Android 2024. 7. 28. 12:32
안녕하세요. Three입니다. 최근 개인 앱을 기획하기 시작해, Material 3라고 하는 구글 안드로이드 디자인 시스템을 기준으로 디자인을 마친 상태입니다. 처음 이 개인 프로젝트를 시작하며 아래와 같은 목표를 세웠습니다.1. 앱 출시를 해보자.2. Jetpack Compose라는 새로운 선언형 UI 툴킷을 사용해보자. 그러나 Jetpack Compose를 학습하고 익숙해지는 데에 시간이 꽤나 소요되고 있어, 먼저 저에게 익숙한 xml + 바인딩 작업으로 시작하게 되었습니다. (앱 출시 이후, 꾸준히 발전시켜 나가며 Jetpack Compose로 전환해볼 예정입니다.) 1. 문제 상황먼저 메인 화면에 존재하는 네비게이션 바 작업을 하던 도중 아래와 같은 문제가 발생했습니다. 네비게이션 바를 선택할..
-
[Android/Kotlin] 코틀린과 코루틴IT Study/Android 2024. 5. 19. 15:08
코루틴의 개념을 정확하게 이해하고 활용하기 위해, 이를 주제로 글을 작성해보려고 합니다 :) 🍇 목차1. Coroutine2. Thread와 Coroutine3. 그래서 Coroutine이 뭔데?4. 코루틴의 구성요소4-1. Coroutine Context4-2. Coroutine Builder4-2-1. launch (main thread unblocking)4-2-2. runBlocking (main thread blocking)4-2-3. async (main thread unblocking)4-3. Coroutine Scope5. 주요 함수 1. Coroutine우리는 작성된 순서대로 실행되는, 동기적인 실행 방식을 채택해왔다.그러나 여러 루틴을 동시 실행하기 위해 비동기 처리를 지원하는 코루틴..
-
[Kotlin] 코틀린하며 가끔 잊어버리는 내용 (Feat. 개념적인 내용)IT Study/Android 2024. 4. 14. 17:07
1. 다중 패러다임, 코틀린 코틀린은 함수형 프로그래밍과 객체 지향 프로그래밍을 지원하는 다중 패러다임 언어. 함수형 언어 1. 일급 함수 (변수에 함수를 할당할 수 있다.) 2. 불변성 (val과 같은 키워드가 존재한다.) 3. 고차 함수 (filter, map 등) 객체 지향 언어 1. 클래스와 객체 (데이터 + 메서드가 결합된 클래스를 정의한다. 이를 인스턴스화하여 객체 생성할 수 있다.) 2. 상속 (재사용 가능) 3. 캡슐화 (접근 제어자 등을 통해 숨기고 공유하기가 가능) 4. 다형성 (오버로딩, 오버라이딩) 2. 변수, 자료형 변수는 되도록 val, not mutable과 같이 불변성을 가져가는 것이 좋다. 그러나 변수에 값이 할당되지 않음을 하나의 정보로 사용하는 경우가 있을텐데, 이때에는..
-
[Android/Kotlin] 옵저버 패턴이란?IT Study/Android 2024. 4. 10. 18:10
1. 옵저버 패턴이란 옵저버 패턴은 객체 지향 프로그래밍에서 중요한 디자인 패턴 중 하나이다. 옵저버 패턴에 대해 알아보기 전, 먼저 옵저버가 무엇인지 생각해보자. Observer(이하 옵저버)란, 감시자 혹은 관찰자를 의미한다. 말 그대로 무언가를 감시하는 역할을 수행하고 있다는 것. 즉, 어떤 이벤트가 일어나는 것을 감시하는 패턴을 의미한다. 마치 안드로이드 리스너와 같은 개념 아닌가? 1. 버튼을 클릭했을 때 2. 키보드를 통해 글자를 입력할 때 3. API 콜에 대한 응답 데이터를 수신받았을 때 시스템에 의해 발생하는 동작, 이벤트가 발생했을 때 이를 감시하고 미리 정의된 동작을 수행하도록 하는 것이 바로 옵저버 패턴이다. 그렇다면 옵저버 패턴은 어떤 원리로 동작하는 것일까? 미리 힌트를 주자면,..
-
[Android/Kotlin] "Can't create handler inside thread that has not called Looper.prepare()" 예외IT Study/Android 2024. 4. 4. 22:02
안녕하세요. 개발하며 만나게 된 예외에 대해 다뤄보도록 하겠습니다. 🥺 (너무 오랜만에 블로그 글로 돌아왔습니다...!!!!) 1. "Can't create handler inside thread that has not called Looper.prepare()" 오류의 의미 안드로이드 앱에서 백그라운드 스레드에서 핸들러(Handler)를 생성하려 할 때 발생합니다. 이를 이해하기 위해서는 먼저 안드로이드의 Looper와 Handler 시스템에 대해 알아야 합니다. 그럼 Handler는 메인 스레드에서만 생성해야하나요? 핸들러는 *기본적으로 생성된 스레드의 Looper에 연결됩니다. 메인 스레드에서 생성된 핸들러는 자동으로 메인 스레드의 Looper와 연결되기 때문에, 추가 작업 없이 UI 업데이트를 수..
-
[네트워크] Request, Response (feat. 그림으로 보는 네트워크 요청과 응답)IT Study/컴퓨터 기초 2024. 2. 23. 16:52
1. Request 2. Response 사진 출처 In Introduction to HTTP Basics HTTP (HyperText Transfer Protocol) Basics Introduction The WEB Internet (or The Web) is a massive distributed client/server information system as depicted in the following diagram. Many applications are running concurrently over the Web, such as web browsi www3.ntu.edu.sg