목록Swift (89)
BOID
안녕하세요, HoonIOS입니다. :) 저번에는 간단하게 상태패턴에 대해 알아봤는데요, 이번에는 구조에 대해 알아보겠습니다. 상태패턴 구조 콘텍스트 - 상태에 대한 참조를 저장하고 모든 상태별 작업을 하는 곳 - 상태 인터페이스를 통해 상테 객체와 통신하며 새로운 상태 객체를 전달하기 위한 setter을 호출 상태 - 인터페이스로 상태별 메서드를 구현 - 이 메서드는 모든 상태에 대해 유효한 메서드이어야 하는데 그 이유는 상태에 따라 호출될 일이 없는 메서드들를 인터페이스로 구분하면 사이드 이펙트가 나올 가능성이 있기 때문이다. 구상 상태 - 상태별 클래스로 상태 인터페이스에 따른 메서드들을 자체적인 구현을 제공합니다. - 여러 상태에서 유사한 코드의 중복을 피하기 위해 어떤 공통 행동을 캡슐화하는 중간..
안녕하세요, HoonIOS입니다. :) 이번에는 패턴중에 하나인 상태패턴 공부한것에 대해 정리 할려고 합니다. 상태패턴의 정의에 대해 먼저 살펴보겠습니다. 상태패턴 정의 상태 패턴은 객체의 내부 상태가 변경 될때 해당 객체가 그 상태에 알맞는 행동을 할수 있도록 변경해주는게 행동 디자인 패턴입니다. 예를들어 어느 한 책을 출판한다고 했을때 출판하기 까지 초안, 검토, 출판 이렇게 세가지 형태로 크게 나눈다고 한다고 하면 각 상태를 객체에서 상태에 따라 분류하여 동작하도록 처리해주면 됩니다. 즉 아래와 같은 방식을 살펴 보겠습니다. 상태 패턴 방식 위 코드는 객체 내에서 자체적으로 상태에 따라 코드를 구현하는 대신 현재 상태를 나타내는 상태 객체중 하나에 대한 참조를 저장하고 모든 상태에 관련된 작업을 D..
안녕하세요, HoonIOS입니다. :) 저번에 커맨드 패턴에 대해 구성 요소랑 커맨트 패턴의 장점에 대해 말씀 드렸습니다. 이번에는 구조 및 관련 코드에 대해 말씀 드리려고 합니다. 커맨드 패턴 구조 Client: Client에서 ConcreateCommand를 init하고 Receiver를 설정하는 역할 Reciever: Clelient에서 Receiver를 설정하고 Receiver 객체를 각 Command의 생성자로 전달하여 처리, 수신자 역할로 실제로 요청을 처리 ConcreateCommand: 각 Commadn 객체와 실행할 메서드를 연결시키는 역할 Command: 실행 요청에 대한 인터페이스로 각 필요한 작업들이 있고 execute(실행 메서드)가 포함 Invoker: Command 객체들을 관..
안녕하세요, HoonIOS입니다. :) 이번에 회사에서 특정 앱을 구현하게 됐는데 구조에 대해 고민을 하면서 여러 패턴에 대해 찾아보던 중 커맨드 패턴 (Command Pattern)이 구현 목적에 어울리는 패턴이라고 생각해서 해당 패턴에 대해 정리를 해보려고 합니다. 우선 요구 사항을 아래와 같습니다. 1. 각 테스트 케이스를 모듈화 할 수 있을 것 2. 테스트 케이스를 순서대로 처리할수 있는 로직에 맞는 로직 3. 테스트 케이스의 순서는 유동적으로 바뀔 수 있고 추가 및 삭제, 순서 변경이 될 수 있음 커맨드 패턴이란? 커맨드 패턴의 정의는 모든 정보가 포함된 독립 실행형 객체(캡슐화)로 변환하는 디자인 패턴입니다. 이 패턴은 대기열에 넣을수도 있고 실행을 취소할 수도 있습니다. 또, 커맨드를 필요한..
안녕하세요, HoonIOS입니다. 이번 포스팅에는 UIKit에서 UITableVIew로 사용되는 List에 대해 사용법 및 설명에 대해 포스팅을 하려고 합니다. 리스트란?(List) List란 하나 이상의 행 및 뷰를 수직 방향의 목록 데이터로 여러 개의 행이 표현되는 UI를 구성해 여러 개의 데이터를 쉽게 나열할 수 있도록 구성된 뷰입니다. UIKit의 UITableView와 다른점은 UITableView에서는 하나의 행을 셀이라고 표현을 한 반면 SwiftUI에서는 로우라고 표현합니다. SwiftUI인 새로운 프레임워크를 통해 리스트를 만들면 그만큼 장점도 있을 겁니다. 장점으론 사용하기 편하다. 귀찮은 것들이 없어졌다입니다. UITableView를 사용하려면 UITableViewDataSource,..
안녕하세요, HoonIOS입니다. SwiftUI에서 Button 사용자의 탭 이벤트를 통해 특정 작업을 할 수 있게 기본적으로 제공하는 컨트롤러입니다. 즉 UIKit에서는 UIButton하고 같은 역할을 하는 친구라고 생각을 하시면 더 이해하기 쉬우실 거 같습니다. 애플 공식문서에서는 어떻게 정의하고 있는지 한번 확인해보겠습니다. 말 그대로 행동을 이니셜라이저해 컨트롤하는 거라고 쓰여있네요, 말 그대로 행동을 컨트롤한다! 이거입니다. 버튼의 생성자는 모두 2가지 매개변수를 정의를 하고 있습니다. 한 개는 버튼의 외형을 구분해주는 거고 다른 하나는 이벤트가 발생했을 때의 처리를 해주는 코드입니다. 이해가 안 되실 수 있으니 아래 버튼한개를 생성해보겠습니다. var body: some View { VStac..
안녕하세요, HoonIOS입니다. :) SwiftUI에서 뷰의 레이아웃을 잡아주는 다양한 방법이 있는데 이번 포스팅에는 스택을 이용해 레이아웃을 잡는 방법에 대해 살펴보겠습니다. 스택 스택은 실제로 Storyboard, UIKit에서 사용하는 레이아웃입니다. 바로 UIStackView인데요, 실제로 SwiftUI에서 스택도 같은 역할을 한다고 생각하시면 더 이해하기 쉬울 수 있습니다. Storyboard를 사용해서 레이아웃을 구성할때는 굳이 UIStackView을 필수적으로 사용할 필요 없이 다른 방법을 이용해서도 구현을 할 수 있었는데요, SwiftUI에서는 거의 필연적(?)이라 매우 중요합니다. 스택의 특성 스택은 Content를 제네릭 매개 변수로 받아 자식 뷰로 표현하는 제네릭 구조체로 선언되어 ..
안녕하세요, HoonIOS입니다. :) UIKit에서 사용하는 UILabel을 SwiftUI에서는 Text로 역할을 한다고 합니다. 근데 그렇다고 UILabel처럼 단순히 문자열만 표현하는 뷰가 아닙니다. 어떻게 다를까요? UILabel과 Text의 차이점은? UILabel은 단순히 단어 그대로 문자열을 화면에 표현해주는 역할을 합니다. Text는 단순히 표현만 하는 게 아니라 Button, Toggle, Picker 등등에서 그 UI들을 구성할 때 텍스트를 적용할 때 사용을 합니다. 그만큼 UILabel보다 더 광범위하다고 생각을 하시면 될것 같네요ㅎㅎ Text를 사용하는 방법 Text를 사용해 적용하려면 아래와 같이 Text 수식어를 적용해주면 됩니다. var body: SomeView { Text(..