Taehyeon-Kim/SeSAC

[221027] TIL

Opened this issue · 2 comments

// next, error, completed 이벤트를 모두 방출
.subscribe(onNext: { value in
    self.stepButton.isEnabled = value
    self.validationLabel.isHidden = value
})

// next 이벤트만 방출
// 이전에는 bind(to:)에 하나의 값만 연결해줄 수 있어서 다음과 같이 사용하는 경우도 많았음
// 순환 참조 문제도 해결해야 함
.bind(onNext: { value in
    self.stepButton.isEnabled = value
    self.validationLabel.isHidden = value
})

// 가변 매개변수로 해결 가능
// 가장 깔끔
.bind(to: stepButton.rx.isEnabled, validationLabel.rx.isHidden)
  • subscribe - bind(onNext:) - bind(to:)
let validation = nameTextField.rx.text // String?
    .orEmpty // String
    .map { $0.count >= 8 }  // Bool

validation
    .bind(to: stepButton.rx.isEnabled, validationLabel.rx.isHidden) // next 이벤트만 방출(물론 subscribe 사용해도 됨. 그런데 목적상 맞는 것은 bind, 가변 매개변수를 받을 수 있음.
    .disposed(by: disposeBag)

validation
    .withUnretained(self)
    .bind { vc, value in
        vc.stepButton.backgroundColor = value ? .systemPink : .lightGray
    }
    .disposed(by: disposeBag)
  • bind를 나누어서 사용한 이유는 Color의 경우 Bool값과 다이렉트로 매칭이 어렵다. 그렇기에 bind(onNext:)를 이용해서 클로저 안에서 이벤트 값에 대한 처리를 해주고 있다. 중복되는 부분은 상수로 묶어서 관리를 할 수 있다.
  • 상수로 묶어놓은 시퀀스를 구독할 때마다 새로운 옵저버블 시퀀스가 생겨남. 불필요한 값들이 메모리에 중복해서 올라갈 수 있다는 것임. 만약 서버 통신과 엮어서 생각하면 불필요한 Call이 계속 생길 수 있다는 것임.

Subsribe, Bind, Drive

Subscribe Bind Drive
next, error, completed 이벤트 방출 next 이벤트 방출, 메인 스레드에서 동작 stream 공유
  • Bind, Drive는 UI 처리에 적합

Observable, Subject, Relay

Observable Subject Relay
- Share를 내부적으로 구현하고 있어 Stream 공유 UI에 최적화, Next 이벤트만 방출

Git Rebase 이해하기

Merge

  • fast-forward merge : HEAD의 위치가 이동하는 것
  • 3-way merge : 분기된 시점 이후의 머지

Merge가 있는데 Rebase 왜 해?

merge commit을 만들고 싶지 않을 때 사용!
여러명이 여러 개의 브랜치를 만들고 작업을 하게 되면 불필요한 merge commit이 발생함. (브랜치를 깔끔하게 관리하지 못함)

📌 올리지 않은 작업 영역에 대해서만 rebase를 수행해야 한다.
📌 rebase 수행하고 올리기

스크린샷 2022-10-27 오후 12 02 46

  • Base commit의 위치 이동(다시 베이스를 만든다.)
  • 분기된 Branch가 바라보고 있는 Base의 위치를 마지막으로 바꾼다. (해당 브랜치의 가장 마지막 커밋으로 이동)
  • Rebase는 Remote에 올라가지 않은 커밋에 대해 작업이 이루어져야 한다. (선 rebase, 후 remote push)
  • 분기한 브랜치에서 rebase를 해줘야 한다. hue > main
    • hue > git rebase main
  • rebase와 merge는 다른 것. (base commit을 변경해서 구조를 바꾸는 것)

Interactive Rebase

중간 지점의 커밋에 대한 내용을 수정할 수 있음

사전 준비

git commit --allow-empty -m "git init"
  • data 없는 root commit
  • 변동 사항 없이 커밋을 만들어낼 수 있음

커밋 수정

  • 수정하고자 하는 커밋의 전 커밋 아이디를 수정해야 함
  • 그래서 첫 번째 커밋을 수정하는 것은 일반적으로 어려움(그래서 빈 커밋을 하나 만들어놓고 시작)