전체 글 216

UINavigationBarAppearance() 에 대해서

let appearance = UINavigationBarAppearance()// appearance는 메인 화면 위에 한겹을 쌓는다는 의미로 생각해야함appearance.backgroundColor = .systemYellow // 배경을 노란색으로 설정appearance.shadowColor = .clear // 그림자 없애기// 그림자를 제거하면 네비게이션 바 아래의 선을 제거할 수 있다.// 네비게이션 바와 메인 화면 사이에 밑줄이 생김 (이걸 제거함)// 메인 화면의 백그라운드 색상을 사용 appearance.configureWithTransparentBackground()// 반투명한 그림자를 백그라운드 앞에다 생성appearance.configureWithDefaultBackgro..

iOS/UIKIT 05:24:29

layoutSubviews 반복 호출 방지

layoutSubviews는 뷰의 레이아웃이 변경될 때마다 호출됩니다. 따라서 itemSize를 매번 재설정하면 불필요한 연산이 발생할 수 있습니다. 이를 방지하려면 기존 크기와 비교해 변경된 경우에만 업데이트하도록 처리하세요. 변경 전 코드override func layoutSubviews() { super.layoutSubviews() if let layout = listCollectionView.collectionViewLayout as? UICollectionViewFlowLayout { let width = basicView.bounds.width / 2 let height = basicView.bounds.heigh..

Project/MyMantra 2024.11.20

스위프트에서 Extension은 어떻게 사용되나요?

Extension은 기존 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가할 수 있는 Swift의 강력한 기능입니다.기존 소스 코드를 수정하지 않고도 타입에 기능을 확장할 수 있어, 재사용성과 가독성을 높이는 데 유용합니다. 1. Extension의 주요 특징기능 추가: 메서드, 계산 속성, 서브스크립트, 초기화 메서드 등 추가 가능.기존 소스 코드 수정 불필요: 외부 라이브러리나 기본 타입도 확장 가능.프로토콜 준수: 기존 타입에 프로토콜을 채택하고 구현 추가 가능.저장 속성 불가: 계산 속성만 추가 가능.오버라이드 불가: 기존 메서드의 동작은 변경할 수 없음. 2. Extension 활용 예시1) 기존 타입 확장extension String { func reversedString() ->..

iOS/Swift 2024.11.20

GCD(Grand Central Dispatch)의 주요 개념과 사용 방법을 설명해주세요.

GCD(Grand Central Dispatch)는 Apple의 멀티스레딩 및 동시성 처리를 위한 프레임워크로, 효율적인 작업 분배와 스레드 관리를 가능하게 합니다. GCD를 사용하면 비동기 작업을 손쉽게 관리할 수 있으며, 애플리케이션의 성능을 향상시키는 데 유용합니다.  주요 개념디스패치 큐 (Dispatch Queue)작업을 실행할 큐를 관리하며, 작업의 실행 순서를 정의합니다.종류:Serial Queue: 작업을 순차적으로 실행합니다. 하나의 작업이 끝나야 다음 작업을 시작합니다.Concurrent Queue: 작업을 동시에 실행합니다. 실행 순서는 보장되지 않지만, 각 작업은 병렬적으로 실행됩니다.Main Queue: 메인 스레드에서 실행되는 Serial Queue입니다. UI 업데이트는 반드시..

정보/레벨 1 2024.11.20

동시성 프로그래밍에서 동기(Synchronous)와 비동기(Asynchronous)의 차이점은 무엇인가요?

동기와 비동기는 작업 완료 시점과 작업 대기 여부에 따라 구분됩니다. 동시성 프로그래밍에서 이 두 개념은 작업을 처리하는 방식과 실행 흐름에 중요한 영향을 미칩니다. 1. 동기(Synchronous)동기 방식은 작업이 완료될 때까지 현재 실행 흐름이 대기하는 방식입니다.특징:하나의 작업이 끝날 때까지 다음 작업이 실행되지 않습니다.호출한 함수는 작업 완료 후 결과를 반환합니다.실행 흐름이 순차적으로 진행됩니다.장점:코드의 흐름이 단순하고 이해하기 쉽습니다.작업 간 의존성이 있는 경우 적합합니다.단점:시간이 오래 걸리는 작업(예: 파일 읽기, 네트워크 요청) 중에는 다른 작업이 차단됩니다.응답성이 저하될 수 있습니다.func synchronousTask() { print("Task 1 시작") ..

정보/레벨 1 2024.11.19

Swift의 클로저와 함수의 차이점은 무엇인가요?

Swift에서 클로저와 함수는 코드의 재사용성을 높이기 위해 사용되는 코드 블록입니다. 둘 다 비슷한 역할을 하지만 다음과 같은 차이점이 있습니다:  이름 유무함수는 이름이 있는 코드 블록입니다.func greet(name: String) -> String { return "Hello, \(name)!"} 클로저는 이름이 없는 코드 블록입니다. 주로 변수에 할당하거나 인자로 전달됩니다.let greet: (String) -> String = { name in return "Hello, \(name)!"} 구문 축약클로저는 간결성을 위해 매개변수 및 반환 타입 추론, 키워드 생략이 가능합니다.let greet = { (name: String) in "Hello, \(name)!" }  선언 위치..

정보/레벨 1 2024.11.19

델리게이트 패턴으로 화면 전환하기

https://explorer89.tistory.com/226 UISheetPresentation을 통해 수정, 삭제, 닫기 버튼 기능 구현UISheetPresentationController를 사용하면 하단에서 올라오는 시트 스타일의 모달을 손쉽게 구현할 수 있습니다. UISheetPresentationController는 iOS 15 이상에서 사용할 수 있는 API로, detents를 통해 시트의 높이explorer89.tistory.com  전체 흐름 요약ProfileViewController에서 UserFeedViewController로 이동pushViewController로 화면 전환.UserFeedViewController에서 ProfileFeedEditViewController 띄우기pres..

iOS/UIKIT 2024.11.17

UISheetPresentation을 통해 수정, 삭제, 닫기 버튼 기능 구현

UISheetPresentationController를 사용하면 하단에서 올라오는 시트 스타일의 모달을 손쉽게 구현할 수 있습니다. UISheetPresentationController는 iOS 15 이상에서 사용할 수 있는 API로, detents를 통해 시트의 높이를 조절하고, 사용자가 원하는 높이에서 스크롤 가능하게 만드는 등 다양한 설정을 제공합니다.  1. ProfileFeedEditViewController 만들기먼저, "수정," "삭제," "닫기" 버튼이 포함된 ProfileFeedEditViewController를 만듭니다.import UIKitclass ProfileFeedEditViewController: UIViewController { // MARK: - Variable..

iOS/UIKIT 2024.11.16

Swift의 제네릭(Generic)에 대해 설명해주세요.

Swift의 제네릭(Generic)은 코드의 유연성과 재사용성을 높이는 기능입니다. 제네릭을 사용하면 특정 타입에 국한되지 않고, 어떤 타입이든 처리할 수 있는 코드를 작성할 수 있습니다. 즉, 같은 로직을 다양한 타입에 대해 동작하도록 만들어주는 기능입니다. 제네릭의 기본 개념제네릭을 사용하면 함수나 구조체, 클래스 등이 특정 타입에 의존하지 않고 다양한 타입과 함께 사용할 수 있습니다. 제네릭은 타입의 이름을 일반화하여 함수나 타입을 선언하고, 이를 실제 사용 시에 구체적인 타입으로 지정하도록 합니다. 제네릭의 기본 문법함수나 타입을 정의할 때 타입 파라미터로 플레이스홀더를 사용하여 제네릭을 구현합니다. Swift에서는 일반적으로 제네릭 타입 파라미터에 T를 사용하지만, 다른 이름도 사용할 수 있습니..

정보/레벨 1 2024.11.15