전체 글 45

RxSwift) subscribe, bind, drive

subscribe subscribe는 가장 기본적인 옵저버블 구독 방법이다. 옵저버블에서 발생하는 세 가지 이벤트, 즉 Next, Error, Completed에 반응할 수 있다.observable.subscribe( onNext: { value in print("Next:", value) }, onError: { error in print("Error:", error) }, onCompleted: { print("Completed") }).disposed(by: disposeBag) 에러 처리 가능: onError를 통해 에러 이벤트를 처리할 수 있다.스레드 관리: 백그라운드 스레드에서도 동작 가능하며, 네트워크 요청이나 파일 I/O..

카테고리 없음 2024.10.17

RxSwift) relay, dispose, binding

Relay란? subject 와 비슷한 동작을 수행하지만 Subject, Observable과 달리 .completed, .error 이벤트가 없다. 심지어 .next 이벤트가 아닌 accept(_:) 메소드를 사용합니다.  Relay 종류PublishRelaypublish relay는 publish subject의 동작과 유사하다. 구독자는 구독하고 난 이후에 방출되는 이벤트를 받아 처리하게 된다.class ViewController: UIViewController { let disposeBag = DisposeBag() let button = UIButton(type: .system) let publishRelay = PublishRelay() // 버튼 클릭 이벤트를 처리할 Publ..

카테고리 없음 2024.10.15

Swift) 메모리 참조하는 방법

Strong 참조 (Strong Reference)기본적으로 모든 참조는 강한 참조이다. 강한 참조는 참조하는 인스턴스의 생명주기를 유지한다. 즉, 강한 참조가 있는 한, 해당 인스턴스는 메모리에서 해제되지 않는다.class Person { var name: String init(name: String) { self.name = name }}var person1: Person? = Person(name: "Alice")var person2 = person1 // person1을 강한 참조person1 = nil // person1이 nil이 되어도 person2가 참조하고 있으므로 메모리에서 해제되지 않음person2 = nil // 모든 강한 참조가 해제되면 메모리에..

카테고리 없음 2024.07.04

Swift) extension

예제 extension Int { func times(_ closure: () -> Void) { for _ in 0.. 위 예제에서는 Int 타입에 times 메소드를 추가하여 정수의 값만큼 클로저를 반복 실행하는 기능을 제공한다. 이런 식으로 기존 타입에 새로운 기능을 추가하여 코드를 간결하고 재사용 가능하도록 만들 수 있다. 장점기능 분리: 기존 코드를 수정하지 않고도 기능을 추가하거나 수정할 수 있다.명확한 코드 구조: 코드의 각 부분이 명확히 구분되어 유지보수가 쉽다.프로토콜 준수 추가: 프로토콜을 채택하도록 타입을 확장할 수 있어 유연성을 제공한다.

카테고리 없음 2024.07.04

xcode) delegate 패턴

Delegate 패턴이란?Delegate 패턴은 한 객체가 다른 객체를 대신하여 특정 동작을 수행하도록 하는 디자인 패턴이다. 이는 객체 간의 결합도를 낮추고 코드 재사용성을 높이는 데 도움을 준다. 주로 다음과 같은 상황에서 사용된다.이벤트 처리: 사용자의 액션에 따른 이벤트 처리를 위해 delegate를 사용한다.데이터 전달: 한 객체가 다른 객체로부터 데이터를 받아오거나, 데이터를 전달할 때 사용된다.커스텀화: 객체의 동작을 확장하거나 수정하기 위해 delegate를 이용한다.Delegate 패턴의 구현 방법Delegate 패턴을 구현하기 위해선 몇 가지 단계가 필요하다.프로토콜 정의: Delegate가 구현해야 할 메소드나 프로퍼티에 대한 프로토콜을 정의한다.Delegate 프로퍼티 선언: Del..

카테고리 없음 2024.07.02

CS) 메모리 구조 힙, 스택

힙 (Heap)힙은 프로그램 실행 중에 동적으로 할당된 메모리 공간이다. 힙은 주로 사용자가 직접 할당하고 해제하는 메모리 영역이며, 런타임에 크기가 변할 수 있다.주요 특징:동적 할당: 힙에 저장된 데이터는 프로그램 실행 중에 동적으로 할당된다. malloc, calloc, realloc, new 등의 함수나 연산자를 사용하여 할당한다.수동 해제: 할당된 메모리는 명시적으로 해제되어야 한다. 이 과정을 통해 메모리 누수를 방지할 수 있습니다. 해제는 free 함수나 delete 연산자를 사용하여 수행된다.데이터 구조: 힙에는 객체, 배열, 구조체 등의 데이터가 저장된다.크기 조정: 힙의 메모리 크기는 필요에 따라 동적으로 조절될 수 있다.힙은 메모리의 높은 주소부터 낮은 주소 방향으로 할당된다. 프로그..

카테고리 없음 2024.07.01

Swift) didset willset 옵저버

프로퍼티 옵저버란?프로퍼티 옵저버는 프로퍼티의 값이 변경될 때 추가적인 작업을 수행할 수 있도록 해준다. Swift에서는 didSet과 willSet 두 가지 옵저버를 제공한다. willSet: 프로퍼티의 값이 변경되기 직전에 호출된다. 새로운 값이 파라미터로 제공된다.didSet: 프로퍼티의 값이 변경된 직후에 호출된다. 이전 값이 파라미터로 제공된다.willSet var temperature: Double = 0.0 { willSet(newTemperature) { print("온도가 \(temperature)에서 \(newTemperature)로 변경될 예정입니다.") }} 위 예제에서 temperature 프로퍼티에 willSet 옵저버를 추가했다. 프로퍼티의 값이 변경되기..

카테고리 없음 2024.06.29

Swift) Optional

챌린지반 숙제 옵셔널 코드옵셔널 소스를 보면 enum으로 선언 되어있는것을 볼 수 있다.값이 없는 경우 none 케이스, 있는경우 some 케이스로 처리하는거 같다. ~Copyable(프로토콜)이부분은 복사가 불가능 하다고 명시 해놓은것 이라고 한다.이것은 안전한 메모리 관리를 돕는다고 한다. 어떤 코드 뭉치에 의해서 Optional(3) 형태로 출력이 되는가?public protocol CustomStringConvertible { var description: String { get }}extension Optional: CustomStringConvertible { public var description: String { switch self { case .no..

카테고리 없음 2024.06.27