22.05

최완식·2022년 5월 31일
0

Retrospection

목록 보기
3/18
post-thumbnail

22년 05월을 회고해본다.

잘한점

  • 아침 7시에 출근하고 7시 이후에 퇴근했다.
  • 투자글 역시 꾸준히 올렸다.
  • 클린 코드 먼저 읽고 정리를 꾸준히 했다.
  • 저녁 샐러드 먹기 시도했다.
  • 회사 모니터 설정, 키보드, 마우스, 트랙패드 구매했다.
  • 맥 스튜디오 구입했다.

못한점

  • 자의적으로 frame 기반으로 요청주신 것을 autolayout으로 처리했다. 모르면 좀더 정확하게 물어보는 습관을 가지자. 왜 굳이 autolayout으로 하는지..? 한번만 더 물어보면 한번에 일할 수 있다.
  • 블로그 글을 더 많이 못썼다. 아무래도 글 하나 쓰는데 자료조사가 많아서 그런 듯하다.
  • 트위터에 글을 많이 공유하지 못했다. 아침에 조금 귀찮더라도 올리는 습관을 가지자.
  • 저녁에 더 자주 샐러드를 먹지 못했다.
  • 옷을 사는데 자꾸 잘못된 사이즈를 산다. 왜지?
  • 키보드 싸게 사겠다고 중고로 샀다가 키보드가 3개가 되었다. 그냥 처음부터 회사에서 새걸로 살걸. 때로는 새거사는게 좋을 수도 있다.

배운 내용

  • 강제 크래시내고 싶은 경우: indexOutOfRange, divisionByZero
  • Autolayout이 무조건 적으로 좋은 것은 아니다. computed cost가 들어가기 때문에 frame기반으로 처리하는 것이 더 좋을 수 있다.
  • Clean code를 보면서 인수 관련해서 인수가 적을 수록 좋다했는데, 함수형 프로그래밍과 약간은 상충되는 내용이 있는 것 같아 질문했다. 내 생각대로 상태값을 최대한 없애는 방식으로 가는 것이 테스트나 유지보수에 있어 보다 좋다는 결론이 났다. 인수가 여러개라면 따로 struct를 만든다던지, 함수를 쪼개서 처리하는 방식을 만드는 것이 보다 좋겠다.
  • Exception의 경우 case로 나누지말고 subclassing을 통해 처리하자.
  • factory로 다형성을 관리할 수 있다.
  • addSubview[view1, view2].forEach { self.view.addSubview($0)와 같은 방식으로 처리할 수도 있다.
private extension UIButton {

    func update(isSelected: Bool) {
        self.titleLabel?.text.map {
            let textColor = isSelected ? UIColor(rgb: 0x0abe16) : UIColor(rgb: 0x6b707a)
            self.setAttributedTitle($0 + TextStyle.body13(weight: .bold).foregroundColor(textColor).center, for: .normal)
        }

        self.titleLabel?.attributedText.map {
            let margin: CGFloat = 12.0
            self.frame.size.width = $0.size().width + margin * 2
        }
    }
}
  • 이렇게 map을 사용해서 optional을 벗겨내고 내가 원하는 작업을 하는 방법도 있다.
  • extension 사용 방식
    • 크기에 따라서? (UIViewController+Delegate.swift)
    • 아예 의미론적으로 다른 위치에 두는 경우 (Model -> View Structure), fileprivate
    • 진짜 extension의 의미를 가지는 경우 (본 의미보다는 아류느낌)
internal var openedPublisher: AnyPublisher<InfoPublisher, Never> {
    self.publisher
        .compactMap { $0?.toDisplay(self.stationData) }
        .eraseToAnyPublisher()
}

private let publisher = PassthroughSubject<RealtimeAPI.Subways.Station?, Never>()

func someFunction() {
    self?.publisher.send(result)
}
  • 이런식으로 밖으로 내주는 publisher와 안에서 처리하는 publisher를 분리하여 관리할 수 있다.

다짐

  • 다음달에는 허먼밀러 의자를 살 것 같아 금전적으로 준비할 필요가 있다.
  • 이번달 지출이 많았다. 바지, 티 등을 구매했다. 다음달은 줄여야 한다.
  • 7-19는 지키는 습관으로 가져간다.
  • 아침에는 기술 글을 쓰는 습관을 가지자. 클린 코드는 주말에 하자.
  • 유튜브 말고 책을 읽는 습관을 가지자. 확실히 읽어보니 책이 정보습득 속도 측면에서 보다 빠르고, 상상하게 되어 더 재미있는 듯 하다.
  • 평일에 모든걸 쏟아붓고 주말에 운동하자. 주말에는 꼭해야 한다. 생존 운동이다.
  • 내가 나를 있는 그대로 봐주길 바라듯, 남도 그렇게 보자. 항상 그럴 수 있다는 생각을 가지고 살자.
  • 내 속마음을 그대로 내비치면 안된다. 인생을 크고 넓게 보자.
profile
Goal, Plan, Execute.

0개의 댓글