전체 글 25

[Swift] AVFoundation

AVFoundation이란?iOS에서 오디오와 비디오를 다루는 프레임워크입니다. 동영상 재생동영상 편집동영상 내보내기이 모든 걸 할 수 있습니다.핵심 개념1. AVAsset - 비디오 파일 그 자체개념:비디오 파일의 추상화된 표현읽기만 가능 (불변 객체)파일 안의 정보(길이, 해상도, 트랙 등)를 읽을 수 있음중요한 점:비동기로 로딩해야 합니다 (파일이 크니까)메인 스레드 블로킹 방지를 위해 async/await 사용let asset = AVURLAsset(url: videoURL)2. AVPlayer - 재생기개념:실제 재생을 담당하는 객체DVD 플레이어 같은 존재기본 사용법:let player = AVPlayer()player.play() // 재생player.pause() // 일시정지구조:A..

ios 개발 공부 2025.10.18

[Swift] XCTest, CI/CD

CI / CD테스트 코드를 작성하는 가장 큰 이유는 CI/CD(지속적 통합/지속적 배포)를 구축하기 위해서입니다.CI/CD는 어플리케이션 개발 단계를 자동화하여, 짧은 주기로 고객에게 어플리케이션을 제공하는 방법론입니다. CI (Continuous Integration, 지속적 통합)코드 레벨에서 테스트를 자동화하는 과정입니다Xcode 프로젝트가 문제없이 빌드되고 실행되는지 확인합니다아카이브 전에 작성된 테스트 코드를 여러 번 실행하여 배포 가능한 상태인지 검증합니다CD (Continuous Deployment/Delivery, 지속적 배포)Archive → Validate → Distribute → App Store Connect 업로드 → 빌드 버전 등록까지 자동으로 처리합니다앱 업데이트 시 수작업으..

ios 개발 공부 2025.10.16

[Swift] Alamofire, Decodable

네트워크 통신 - Alamofire와 Decodable 활용하기iOS 앱에서 서버와 통신하는 방법은 여러 가지가 있지만, 오늘은 가장 많이 사용되는 Alamofire 라이브러리와 Decodable 프로토콜을 함께 사용하는 방법에 대해 정리해보겠습니다.URLSession vs AlamofireURLSession은 Apple이 제공하는 기본 네트워크 API입니다. 하지만 Alamofire를 사용하면 더 간결하고 읽기 쉬운 코드를 작성할 수 있습니다.URLSession 예시guard let url = URL(string: "https://api.example.com/users") else { return }var request = URLRequest(url: url)request.httpMethod = "GE..

ios 개발 공부 2025.07.24

[Swift] Protocol as Types

프로토콜을 타입으로 사용하기Swift에서 프로토콜은 단순히 "구현해야 할 요구사항의 청사진"이 아니라, 그 자체로 타입으로 사용될 수 있습니다. 오늘은 이 개념에 대해 정리해보겠습니다.프로토콜을 타입으로 사용한다는 의미일반적으로 프로토콜은 특정 타입이 따라야 할 규칙을 정의합니다. 하지만 Swift에서는 프로토콜 자체를 하나의 타입으로 취급할 수 있습니다.protocol Drivable { func drive()}struct Car: Drivable { func drive() { print("자동차가 달립니다") }}struct Bike: Drivable { func drive() { print("자전거가 달립니다") }}// 프로토콜을 타입으로 사용l..

ios 개발 공부 2025.07.23

[Swift] Optional Binding, Property, Protocol

1. Optional BindingOptional Binding은 Optional 값을 안전하게 추출하는 방법입니다. Optional이 값을 가지고 있는지 확인하고, 값이 있다면 임시 상수나 변수에 할당하는 방식입니다.if let 바인딩let name: String? = "J"if let unwrappedName = name { print("이름은 \(unwrappedName)입니다.")} else { print("이름이 없습니다.")}guard let 바인딩guard let은 조기 종료(early exit) 패턴에 유용합니다. guard 구문을 통과하면 이후 스코프에서도 unwrapped 값을 계속 사용할 수 있습니다.func printUserInfo(name: String?, age: In..

ios 개발 공부 2025.07.23

[Swift] Pagination

페이지네이션이란?페이지네이션은 대량의 데이터를 작은 단위로 나눠서 로드하는 기법입니다. 서버에 있는 전체 데이터를 한 번에 가져오지 않고, 필요한 만큼만 순차적으로 요청하는 방식입니다.인스타그램이나 페이스북 피드처럼 스크롤을 내리면 새로운 게시물들이 계속 로딩되는 것이 대표적인 예시입니다.페이지네이션이 필요한 이유메모리 효율성대량의 데이터를 한 번에 메모리에 올리면 메모리 압박이 발생하고 앱이 크래시될 수 있습니다. 필요한 데이터만 메모리에 유지하여 효율적인 메모리 관리가 가능합니다.네트워크 효율성한 번에 모든 데이터를 받으면 초기 로딩 시간이 길어집니다. 필요한 만큼만 요청하여 빠른 초기 로딩이 가능하고, 사용자가 끝까지 스크롤하지 않을 수도 있기 때문에 불필요한 데이터 전송을 줄일 수 있습니다.사용자..

ios 개발 공부 2025.07.21

[Swift] Optional

Optional은 Swift의 타입 안정성을 보장하는 핵심 개념입니다. 값이 없을 수 있음(nil 가능성)을 타입 시스템으로 명시적으로 표현합니다.Optional은 enum으로 구현되어 있습니다:enum Optional { case none case some(Wrapped)}String?은 사실 Optional의 축약형이고, 값이 있으면 .some("값"), 없으면 .none인 것입니다.Optional Binding과 Optional Chaining의 차이핵심 차이는 "Optional을 벗기느냐, 유지하느냐"입니다. Optional Binding (if let, guard let):Optional을 Non-Optional로 변환합니다.let name: String? = "홍길동"if let u..

ios 개발 공부 2025.07.20

[Swift] UIKit vs SwiftUI

UIKit과 SwiftUI의 가장 큰 차이는 프로그래밍 패러다임입니다. UIKit은 명령형(Imperative) 프로그래밍 방식입니다. "어떻게(How)" 할 것인지를 하나하나 명령합니다.let label = UILabel()label.text = "안녕하세요"label.textColor = .blacklabel.font = .systemFont(ofSize: 16)view.addSubview(label) SwiftUI는 선언형(Declarative) 프로그래밍 방식입니다. "무엇을(What)" 보여줄 것인지를 선언합니다.Text("안녕하세요") .foregroundColor(.black) .font(.system(size: 16)) 상태 관리 측면에서도 차이가 큽니다. UIKit에서는 상태가..

ios 개발 공부 2025.07.16

[Swift] ISFJ AlarmApp Troubleshooting

let backBarButtton = UIBarButtonItem(title: "뒤로", style: .plain, target: nil, action: nil)navigationItem.backBarButtonItem = backBarButttonnavigationController?.navigationBar.tintColor = .orangeUINavigationItem의 backBarButtonItem 설정을 다음 화면에 설정했더니 적용이 안됨-> "다음 화면에서 보일" back 버튼을 설정하는 속성이므로 다음 화면으로 넘어가기 전에 미리 설정되어 있어야 함. 이전 화면에 설정 @objc private func addBtnTapped() { let addAlarm = UINavigati..

ios 개발 공부 2025.01.08

[Swift] RxSwift

RxSwift :  ReactiveX를 적용한 Swift 라이브러리ReactiveX(RX) : 비동기 프로그래밍과 옵저버 패턴을 쉽게 구현할 수 있도록 돕는 Microsoft 사에서 만든 라이브러리. 반응형 프로그래밍 RxCocoa : iOS, macOS에 대해서 Rx 프로그래밍을 지원하는 도구 Observable : 데이터 발행 주체. 이벤트와 데이터를 방출하는 스트림(stream). 시간적인 개념이 포함됨. 데이터의 흐름Observer : 구독하고 관찰하는 관찰자subscribe : Observable을 구독하는 것dispose : 구독 해제Observable은 Observer가 구독해서 데이터를 사용해야 의미가 있다 Scheduler : Observable 스트림에서 스레드를 지정할 수 있도록 돕는..

ios 개발 공부 2024.12.26