iOS 캠프 TIL - 2021.01.29 금

Updated:

Swift 스터디 - 클로저

let sum: (Int, Int) -> Int = { (a: Int, b: Int) in
    return a + b
}

Escaping Closure

클로저가 함수의 인자로 전달되지만 함수 밖에서 실행되는 것(함수가 반환된 후 실행되는 것)을 Escape한다고 하며, 매개변수의 타입 앞에 @escaping이라는 키워드를 명시해야한다.

아래의 경우에 자주 사용됨

  • 비동기로 실행되는 경우
  • completionHandler(완료에 따른 처리)로 사용되는 클로저의 경우

클로저의 Escaping은 하나의 함수가 마무리된 상태에서만 다른 함수가 실행되도록 함수를 작성할 수 있다는 점에서 유리함

즉, 이를 활용해서 함수 사이에 실행 순서를 정할 수 있다.

만약 함수가 끝나고 실행되는 클로저에 @escaping키워드를 붙이지 않으면 컴파일시 오류가 발생한다.

Wanted Live Talk 성장하는 iOS개발자 되기

새로운 기술 인사이트를 본인의 지식으로 습득하는 방법

  • 최송이 - 카카오 iOS 개발자
  • https://zeddios.tistory.com/

  • 성장이라는 추상적인 목표보다는 명확한 목표
  • 작은목표를 빨리 해버리기!
    • RxSwift를 공부하겠어! (X)
    • RxSwfit에 XXX 기능을 해봐야지! (O)
  • 사전 조사
    • 애플 공식 문서 보세요!
    • 공식문서의 카테고리를 보면 로드맵을 느낄 수 있다
  • 공부한것은 글로 쓰기
  • 피드백
    • 퇴고 무한 반복
    • 잘못된 정보는 빠르게 고치기
    • 참고 링크 추가해놓기

프로젝트를 여러명이서 같이 개발할 때 생기는 문제점과 해결방법

  • 안정민 - 카카오뱅크 iOS 개발자
  • 블로그

프로젝트 거대화

  • 사업은 커지는데 인력은 크게 늘어날 수 없다
  • 결국 생산성을 늘려야 한다

Xcode 프로젝트 관리

xcodeproj

  • 파일 생성시 프로젝트 및 인원이 많아질수록 빈번한 충돌 문제
  • 인원이 많아지면 코드, 파일 샌산량 증가
    • 프로젝트에 파일이 다수 추가됨
  • 각 개발 환경을 타겟으로 관리하는 경우 프로젝트가 커질수록 인덱싱이 느려짐
  • 대부분의 타겟은 같은 파일을 가짐
    • 타겟 1개늘때마다 프로젝트 파일에 많은 내용이 추가됨
    • 타겟이 늘어남에 따라 인덱싱 속도가 느려짐
    • 파일 추가/삭제시 빈번한 충돌 발생
  • 모듈로 분리하지 않는 경우 프로젝트 내에서 결합도가 빠른 속도로 증가
    • 프로젝트 내에선 public, internal이 같은 개념
      • 도메인이 다른 코드를 어디서든 가져다 정의할 수 있음 (격리화 불가)
      • 각 도베인과의 결합이 생길 가능성 증가
      • 다수가 작업시 결합도가 빠른 속도로 증가
      • 각 기능을 모듈로 분리할 때 코드 분리가 어려움
  • XCConfig를 적용하여 프로젝트 설정을 관리
    • 공통 XCConfig를 생성
    • 각 XCConfig는 공통 XCConifg를 토대로 함
  • 적용한 XCConfig를 토대로 타겟을 정리
    • 타겟 대신 스팀으로
  • 각 기능마다 별도의 프로젝트로 분리로 코드 응집도 증가 및 결합도 감소

CI : Continuous Integration

  • 통합된 코드에서 자신의 코드가 제대로 동작(빌드/테스트)가 되는지 확인

Continuous Delivery

  • 앱이 항상 신뢰 가능한 수준에서 배포될 수 있도록 관리
    • 빌드 및 테스트가 지속적으로 일어나므로 배포 또한 지속저그로 이루어져야 함.
    • 배포의 어려움이 줄어들고, 재작업 시간이 점점 줄어듬
  • 프로젝트가 커질수록 기능별 배포가 요구됨

아키텍처

  • 템플릿 제공하는 아키텍처
  • 기능을 세분화 해서 개발 후 유연한 결합할 수 있는 아키텍처
  • 테스트코드 작성이 가능한 아키텍처

지금당장 BDD 시작하기

  • 전찬주 - 원티드랩 iOS 개발자

TDD?

  • 테스트 코드를 작성 -> 구현 코드 -> 리팩토링

BDD

  • Behavior Driven Developement

Clean Swift

현재 원티드에서는 Clean Swift 아키텍처를 개선해서 사용중

  • ViewController (UI디자인)
    • 뷰 이벤트를 인터랙터에 전달, 프레젠터가 주는 데이터 표시
  • Interactor (이벤트 처리)
    • 이벤트 처리, 상태 관리, 모든 비지니스 로직 처리
  • Presenter

Leave a comment