본문 바로가기

전체 글

(30)
[SwiftUI by Tutorials] Chapter 05: Intro to Controls: Text & Image 1. Text 표시할 텍스트라는 단일 매개 변수를 사용한다. Text("Welcome to Kuchi") Modifiers 텍스트를 표시했으니, 자연스러운 다음 단계는 모양을 변경하는 것이다. 크기, 무게, 색상, 기울임 꼴 등과 같은 다양한 옵션을 사용하여 화면에서 텍스트가 표시되는 방식을 수정할 수 있다. 60포인트로 텍스트를 더 크게 만들려면? Text("Welcome to Kuchi") .font(.system(size: 60)) 추가적으로 텍스트를 굵게 하려면? Text("Welcome to Kuchi") .font(.system(size: 60)) .bold() 추가적으로 글씨색을 빨간색으로 하려면? Text("Welcome to Kuchi") .font(.system(size: 60)) .b..
[SwiftUI by Tutorials] Chapter 04: Testing & Debugging Different types of tests 테스트는 세 가지 유형이 있다. 복잡한 순서대로 단위 테스트, 통합 테스트, UI 테스트이다. 단위 테스트 모든 테스트의 기본이자 다른 모든 테스트의 기초 단위 함수가 주어진 입력을 처리할 때 예상되는 출력을 얻는 것 여러 단위 테스트는 동일한 코드 조각을 테스트할 수 있지만 각 단위 테스트 자체는 단일 코드 단위에만 집중 자주 실행되므로, 빠르게 실행되길 원함 통합 테스트 코드의 여러 부분이 서로 얼마나 잘 작동하는지 확인 앱이 외부 API와 같이 앱 외부 세계와 얼마나 잘 작동하는지 확인 단위 테스트보다 복잡함 일반적으로 실행하는 시간이 오래 걸리기 때문에 실행 빈도가 적음 UI 테스트 가장 복잡한 테스트 사용자 동작을 확인 앱과 사용자간의 상호 작용을 시..
[SwiftUI] Modifying state during view update, this will cause undefined behavior 해결책 경고 메시지 Modifying state during view update, this will cause undefined behavior 문제 body 내에서 state 관련 프로퍼티 변경이 필요한 경우가 있지만 제대로 동작하지 않거나 경고 발생 원인 body 내부에 직접적으로 어딘가에서 뷰의 상태를 변경하는 코드를 넣으면 안 됨 해결방안 body 내부에 직접적인 영향이 없는 onAppear 등에서 처리하거나, 다음 런 루프에서 처리(main queue 사용하여)될 수 있도록 하는 등 직접적인 영향을 피하는 방법을 적용 참고 https://www.hackingwithswift.com/quick-start/swiftui/how-to-fix-modifying-state-during-view-update-t..
[SwiftUI by Tutorials] Chapter 03: Diving Deeper Into SwiftUI Order of modifiers view에 두 개 이상의 modifer를 적용할 때, 순서가 중요한 경우가 있다. padding과 같은 modifer는 view의 layout이나 frame을 변경한다. background나 border 같은 modifier는 view를 채우거나 감싼다. 일반적으로 view의 layout과 position을 먼저 설정한 후에 view를 채우거나 감싸고자 할 것이다. 예시 Border around padded text Text("...") .padding() .border(Color.purple) Text("...") .border(Color.purple) .padding() border를 먼저 하게 되면, 텍스트의 intrinsic 영역을 둘러싸게 된다. 이후 paddi..
[SwiftUI by Tutorials] Chapter 01, 02: Getting Start Chapter 01: Introduction SwiftUI 특징 Apple 개발의 새로운 패러다임 UIKit에 비하여 훨씬 간단하고 강력 Apple 에코시스템의 크로스 플랫폼 선언적인 특성 Swift가 처음 출시 이후로 진화가 필요했던 것처럼, SwiftUI 역시 개선의 여지가 있음 + 추가 내용 (명령형 vs 선언형 프로그래밍) 명령형(절차적) 프로그래밍은 당신이 어떤 일을 어떻게(How) 할 것인가에 관한 것이고, 선언형 프로그래밍은 당신이 무엇을(What) 할 것인가에 관한 것이다. Wal-Mart 친구가 당신의 집에 집들이를 오기 위해 Wal-Mart에서 선물을 샀습니다. 현재 친구는 Wal-Mart 바로 옆에 있으며, 당신의 집에 어떻게 도달해야 하는지를 전화로 물어봅니다. 이에 관한 명령형, ..
[UIKit/SwiftUI] Design System framework 현재 회사에서 다양한 비슷한 애플리케이션이 출시되었으며, 추가적인 출시를 고려하고 있습니다. 모두 커머스 앱 기반으로 메인 앱을 포크 하여 기본 작업을 진행했고, 앱 사용자 특성에 따라 결정된 디자인을 적용했습니다. 현재 애플리케이션들만 관리한다면, 그래도 그나마 괜찮겠지만(?) 다양한 애플리케이션들이 추가될 것이기에, 유지보수와 개발 용이성을 위해 디자인 시스템을 도입하게 되었습니다. 본 포스팅에서는 디자인 시스템을 위한 구조를 어떤 방식으로 설계했고, 적용했는지 설명하도록 하겠습니다. 1. 프레임워크와 프로덕트의 책임과 역할 먼저 프레임워크와 프로덕트의 책임과 역할을 분리하고자 했습니다. 그러기 위해서 현재 각 뷰들이 어떤 식으로 구성되는지 파악하는 것이 필요합니다. MVVM 채택하고 있는 현재 구조..
[Object] Chapter 05 - 책임 할당하기 책임에 초점을 맞춰서 설계할 때 직면하는 가장 큰 어려움은 어떤 객체에게 어떤 책임을 할당할지를 결정하기가 쉽지 않다는 것이다. 책임 할당 과정은 일종의 트레이드오프 활동이다. 동일한 문제를 해결할 수 있는 다양한 책임 할당 방법이 존재하며, 어떤 방법이 최선인지는 문맥에 따라 달라진다. 이번에 살펴볼 GRASP 패턴을 통해 책임 할당의 어려움을 해소할 수 있다. GRASP 패턴을 이해하고 나면 응집도와 결합도, 캡슐화 같은 다양한 기준에 따라 책임을 할당하고 결과를 트레이드오프 할 수 있는 기준을 배울 수 있다. 01 책임 주도 설계를 향해 데이터 중심의 설계에서 책임 중심의 설계로 전환하기 위해서는 다음 두 원칙을 따라야 한다. 데이터보다 행동을 먼저 결정하라 협력이라는 문맥 안에서 책임을 결정하라 ..
[Object] Chapter 04 - 설계 품질과 트레이드오프 01 데이터 중심의 영화 예매 시스템 객체지향 설계에서는 두 가지 방법을 이용해 시스템을 객체로 분할할 수 있다. 첫 번째 방법은 상태(데이터)를 분할의 중심축으로 삼는 방법이고, 두 번째 방법은 책임을 분할의 중심으로 삼는 방법이다. 데이터 중심의 관점에서 객체는 자신이 포함하고 있는 데이터를 조작하는 데 필요한 오퍼레이션을 정의한다. 책임 중심의 관점에서 객체는 다른 객체가 요청할 수 있는 오퍼레이션을 위해 필요한 상태를 보관한다. 데이터 중심의 관점은 객체의 상태에 초점을 맞추고, 책임 중심의 관점은 객체의 행동에 초점을 맞춘다. 훌륭한 객체지향 설계는 데이터가 아니라 책임에 초점을 맞춰야 한다. 이유는 변경과 관련이 있다. 객체의 상태는 구현에 속한다. 구현은 불안정하기 때문에 변하기 쉽다. 상태..