subtle & plausible

고정 헤더 영역

글 제목

메뉴 레이어

subtle & plausible

메뉴 리스트

    • 분류 전체보기 (118)
      • TIL (89)
        • #100DaysOfSwiftUI (44)
        • 리액트 네이티브 (6)
        • 실용주의 단위 테스트 (9)
        • App Architecture (5)
        • Combine (4)
        • Metal (2)
        • RxSwift (8)
        • Swift Codable (7)
        • TDD iOS (4)
      • 실험실 (3)
      • 책 (15)
      • 오프 (5)
      • 기타 (6)

    검색 레이어

    subtle & plausible

    검색 영역

    컨텐츠 검색

    TIL

    • 실용주의 단위테스트. 10장. 목 객체 사용

      2021.11.28 by box-jeon

    • 실용주의 단위테스트. 9장. 더 큰 설계 문제.

      2021.11.27 by box-jeon

    • 실용주의 단위 테스트. 8장. 깔끔한 코드로 리팩토링하기.

      2021.06.22 by box-jeon

    • Day 44. Project 9, part 2

      2020.09.09 by box-jeon

    • Day 43. Project 9, part 1

      2020.09.08 by box-jeon

    • Day 42. Project 8, part 4

      2020.09.07 by box-jeon

    • Day 41. Project 8, part 3

      2020.08.23 by box-jeon

    • Combine. Ch 4. Filtering Operators

      2020.08.23 by box-jeon

    실용주의 단위테스트. 10장. 목 객체 사용

    테스트 도전 과제 테스트에서 실제로 HTTP 호출을 해서는 안됩니다. 그 이유는 - 실제 호출에 대한 테스트는 나머지 대다수의 빠른 테스트들에 비해 속도가 느릴 것입니다. - HTTP API가 항상 가용한지 보장할 수 없습니다. 통제 밖입니다. 번거로운 동작을 스텁으로 대체 스텁: 테스트 용도로 하드 코딩한 값을 반환하는 구현체. 의존성 주입: 테스트 시, 스텁을 주입하여 HTTP API 호출에 대한 응답으로 사용합니다. 테스트를 지원하기 위한 설계 변경 의존성을 주입할 수 있도록 설계를 변경함으로써 테스트를 작성할 수 있었습니다. 의존성을 주입하는 방법으로는 생성자 주입, 세터 메서드, 팩토리 메서드 오버라이드, 추상 팩토리 등이 있고, 구글 주스나 스프링 같은 도구를 사용할 수도 있습니다. 목을 올바..

    TIL/실용주의 단위 테스트 2021. 11. 28. 18:55

    실용주의 단위테스트. 9장. 더 큰 설계 문제.

    SRP: Single Responsibility Principle 현재 Profile 클래스는 데이터 모델로서의 역할과 매처로서의 역할을 다 가지고 있습니다. 클래스는 변경할 때 한 가지 이유만 있어야 합니다. 클래스는 작고 단일 목적을 추구합니다. 새로운 클래스 추출 Profile 클래스가 실세계 개념에 잘 맞는다는 이유만으로 단일 클래스로 한정한다면 피해가 커질 것입니다. 명령-질의 분리 어떤 값을 반환하고 부작용을 발생시키는 (시스템에 있는 어떤 클래스 혹은 엔터티의 상태 변경) 메서드는 명령-질의 분리(command-query separation) 원칙을 위반합니다. 단위 테스트의 유지 보수 비용 리팩토링으로 인해 단위테스트가 깨지기 시작할 때, 이를 고치기 위한 노력은 단위 테스트를 소유하는 비..

    TIL/실용주의 단위 테스트 2021. 11. 27. 17:26

    실용주의 단위 테스트. 8장. 깔끔한 코드로 리팩토링하기.

    리팩토링 실습입니다. 정리를 위해 오랜만에 다시 읽으니 저자의 친숙한 말투와 농담이 새삼 눈에 띄네요. 메서드 추출 리팩토링하고자 하는 메서드의 복잡도를 줄여 코드가 무엇을 담당하는지 쉽게 이해할 수 있도록 합니다. 이미 앞에서 단위 테스트를 작성해두었기 때문에 수정에 부담이 적습니다. 메서드를 위한 더 좋은 집 찾기 메서드 추출을 해보면, 때로는 해당 객체와 직접적인 연관성이 없는 걸 발견할 수도 있습니다. 요즘 읽고 있는 오브젝트, 듣고 있는 TDD 강의 내용들이 함께 머릿 속을 지나갑니다. 유사한 내용을 각각의 관점에서 다룹니다. 자동 및 수동 리팩토링 메서드 인라이닝이라던가... IDE가 제공하는 리팩토링 기능을 충분히 사용하라는 조언입니다. 이클립스가 언급되길래 출판연도를 확인했는데, 원서는 2..

    TIL/실용주의 단위 테스트 2021. 6. 22. 11:18

    Day 44. Project 9, part 2

    Rendering Performance에 관한 이야기가 잠시 나옵니다. Metal을 사용한다고 잔뜩 겁을 줬지만 직접 사용하는 건 아니었습니다. Transforming shapes using CGAffineTransform and even-odd fills CGAffineTransform을 사용해봅니다. transform, rotate, scale이 가능하며, Path.apply(_:)의 파라미터로 사용됩니다. FillStyle(eoFill:)이 소개됩니다. 제법 화려한 모양을 그려낼 수 있습니다. 애플 API 문서에 오타가 있네요. Creative borders and fills using ImagePaint 이미지를 View의 border로 사용할 수 있도록 ImagePaint라는 struct가 제공..

    TIL/#100DaysOfSwiftUI 2020. 9. 9. 01:28

    Day 43. Project 9, part 1

    Drawing 프로젝트를 시작합니다. Path와 Shape에 대해 다루네요. Creating custom paths with SwiftUI Path는 파라미터로 CGPoint를 받습니다. AutoLayout처럼 다루고 싶다면 GeometryReader를 이용해 직접 계산해야 합니다. Path의 시작점과 마지막점을 자동으로 연결해주지 않기 때문에, 라인을 한번 더 그리거나 StrokeStyle을 사용해야 합니다. Paths vs shapes in SwiftUI Shape은 Path로 구현되어 있습니다. 하지만 path(in:) 함수를 통해 rect를 받을 수 있기 때문에, AutoLayout처럼 처리하는 것이 용이합니다. Path의 시작점과 마지막점을 자동으로 연결해주지 않는 것은 동일합니다. SwiftU..

    TIL/#100DaysOfSwiftUI 2020. 9. 8. 01:30

    Day 42. Project 8, part 4

    Moonshort 프로젝트 복습 및 챌린지입니다. MissionView에 launch date 표시하기. AstronautView에 해당 astronaut이 참여한 미션 목록 표시하기. ContentView에 launch date와 crew name을 toggle로 표시할 수 있는 bar button 추가하기. 작업을 해보니 특정 astronaut이 참여한 mission 목록을 얻어내기 위해서는 전체 mission 목록이 필요한데, 이를 프로퍼티로 넘겨줄 것인지... Environment와 EnvironmentObject를 이런데 쓸 수 있을 것 같았는데;;; 너무 간만에 봤더니 잘 안됐습니다;;; List를 사용하면 leading/trailing에 padding이 자동으로 들어가네요. 수치는 16. S..

    TIL/#100DaysOfSwiftUI 2020. 9. 7. 01:07

    Day 41. Project 8, part 3

    하도 오래 쉬어서;;; Day 39부터 다시 읽었습니다. NASA의 그간 수행된 임무들과 우주비행사들의 데이터를 화면에 표시해주는 앱 Moonshot입니다. Spacer(minLength:)는 orientation에 따라서 각각 적용된다고 하네요. Spacer()의 동작이 굉장히 헷갈립니다. MissionView에서 ForEach문 내부의 맨 마지막에 있는 Spacer()는 minLength를 지정하지 않으니, Space 영역이 이상하게 잡히고 상단의 Text는 말줄임이 됩니다. Text가 아무 제약이 없음에도 말줄임되는 문제에 대해 layoutPriority()를 언급하면서 SwiftUI 버그라고 생각한다고... 나중엔 고쳐져 있을 수도 있다고 했지만, Xcode12-beta5에서도 동일하게 동작하고 ..

    TIL/#100DaysOfSwiftUI 2020. 8. 23. 22:15

    Combine. Ch 4. Filtering Operators

    Filtering Operator에 대해 설명합니다. Upstream Publisher가 방출하는 value를 필요한 것들만 골라서 방출하는 Publisher를 리턴합니다. Closure를 파라미터로 받는 모든 필터 함수는 try로 시작하는 함수들을 각각 갖는데(i.e. filter vs tryFilter), 해당 closure가 error를 throw할 수 있는 부분을 제외하면 동일하게 동작합니다. Filtering Basics filter(_:) Upstream의 value 중 closure가 true를 리턴하는 value들을 방출합니다. removeDuplicates() Upstream의 value 중 연속적으로 들어오는 중복된 value를 제외합니다. '연속적으로 같은' value를 필터링하기 때..

    TIL/Combine 2020. 8. 23. 16:16

    추가 정보

    인기글

    최신글

    페이징

    이전
    1 2 3 4 ··· 12
    다음
    깃헙 브런치 링크드인
    subtle & plausible
    페이스북 트위터 인스타그램 유투브 메일

    티스토리툴바