목록전체 글 (119)
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입니다. 리스트에는 섹션이라는 구조체가 존재 합니다. 섹션을 이용하면 데이터를 쉽게 그룹화 하는것도 가능합니다. 섹션(Section)의 구조체 형태 strcut Section {} 섹션에는 헤더와 푸터를 생략할수도 있고 둘중 하나만 선택해서 사용을 할수 있습니다. 이때 헤더, 푸터 모두 뷰여서 커스텀을 통해 원하는 뷰를 구성후 전달을 할수 있습니다. 섹션의 header, footer를 구성하는 방법에 대해 한번 살펴보겠습니다. 섹션(Section) 구성 예제 let data1 = ["데이터 1", "데이터 2", "데이터 3", "데이터 4"] let data2 = ["데이터 5", "데이터 6", "데이터 7", "데이터 8"] var body: some View { let s..

안녕하세요, HoonIOS입니다. 이번 포스팅에는 UIKit에서 UITableVIew로 사용되는 List에 대해 사용법 및 설명에 대해 포스팅을 하려고 합니다. 리스트란?(List) List란 하나 이상의 행 및 뷰를 수직 방향의 목록 데이터로 여러 개의 행이 표현되는 UI를 구성해 여러 개의 데이터를 쉽게 나열할 수 있도록 구성된 뷰입니다. UIKit의 UITableView와 다른점은 UITableView에서는 하나의 행을 셀이라고 표현을 한 반면 SwiftUI에서는 로우라고 표현합니다. SwiftUI인 새로운 프레임워크를 통해 리스트를 만들면 그만큼 장점도 있을 겁니다. 장점으론 사용하기 편하다. 귀찮은 것들이 없어졌다입니다. UITableView를 사용하려면 UITableViewDataSource,..

안녕하세요, HoonIOS입니다. 저번에는 NavigationView에 대해 알아봤는데 이번에는 애플에서 제공하는 navigationViewStyle 수식어들에 대해 원하는 스타일을 적용하도록 한번 살펴보겠습니다. 내비게이션 뷰 스타일은 크게 3가지를 제공합니다. 내비게이션 뷰에 스타일을 적용하는 방법은 아래와 같습니다. NavigationView { } .navigationViewStyle(...) 스타일 종류 설명 DefaultNavigationViewStyle - 내비게이션 뷰의 기본 스타일 - 자동으로 스타일을 결정 - watchOS에서만 제외하고 모두 사용이 가능 StackNaviagtionViewStyle - 계층 구조를 하나 뷰로 나가는 스타일 - tvOS, iOS에서 사용 가능 - Navi..

안녕하세요, HoonIOS입니다. 이번에는 UIkit에서 제공하는 UINavigationViewController을 SwiftUI에서 어떻게 사용하는지 한번 살펴보겠습니다. 내비게이션 뷰는 내비게이션 스택을 통해 콘텐츠 뷰들을 관리하는 컨테이너 뷰입니다. 또 화면을 전환하거나 내비게이션 아이템, 내비게이션 타이틀과 같은 요소들을 이용해 Controller을 쉽고 다양하게 보여줄 수 있습니다. NavigationView 적용 방법 NavigationView { Text("ContentView 01") } 내비게이션 뷰를 적용하기 위해서는 넣고 싶은 컨탠츠들을 내비게이션 뷰로 감싸 주면 됩니다. 즉, 저는 내비게이션 뷰 안에 Text 객체를 넣어줘서 표현해줬습니다. NavigationViewTitle 적용 ..