Notifications란? 정보를 브로드캐스팅하고, 브로드캐스트를 구독하기 위한 디자인 패턴입니다. 즉 일대다수의 이벤트를 전달 할 때 유용하게 사용 할 수 있습니다. Notifications의 구성 Notification : NotificationCenter에 등록된 관찰자들에게 브로드캐스트되는 정보를 위한 컨테이너 NotificationCenter : 관찰자를 등록, 알림을 송신하는 매커니즘 NotificationQueue: 알람을 등록, 자신이 원할때 알람을 송신해줄 수 있도록 해주는 알림 버퍼 NotificationCenter 매커니즘 NotificationCenter을 통해 특정 알람을 받을 Observer를 추가 하고, Post를 통해 해당 Observer에 알람을 보낼 수 있습니다. 우측에..
에러 내용 : Assertion failed: This is a feature to warn you that there is already a delegate (or data source) set somewhere previously. The action you are trying to perform will clear that delegate (data source) and that means that some of your features that depend on that delegate (data source) being set will likely stop working. If you are ok with this, try to set delegate (data source) to `nil` i..
진행 하고 있는 프로젝트에는 API가 2가지가 들어갑니다. 처음 화면에 들어갔을때 추천 이미지를 불러오는 API와 이미지 검색을 하는 API가 사용됩니다. 기존 클린 아키텍쳐를 참고하여 프로젝트를 진행하고 있는데, 네트워크 레이어를 나눈 부분은 소스코드도 이해하기 어렵고, 왜 이런식으로 나누는지도 이해하기 어려웠습니다. 그래서 이런 어려움 없이 추상화를 제공해주는 Moya를 사용해보기로 했습니다. Moya란? Moya는 Alamofire를 이용할 때 추상화한 네트워크 계층을 작성할 필요없이 사용자가 매우 단순하게 캡슐화를 할 수 있고 쉽게 사용하게 해주는 라이브러리 입니다. 예를 하나 들어봅시다. 일반적으로 네트워크 계층을 작성할 때 아래와 같이 NetworkManager, APIManager등등 이라 ..
처음 Keyboard Extension으로 키보드 확장 프로그램을 개발 할 때 한글 조합이 알아서 되는줄 알았지만, 스스로 조합이 되지 않았다. 안드로이드는 자동으로 조합을 해주는데 ios에서는 스스로 알고리즘을 만들어야 합니다.. 오토마타에 관해 전공수업을 들었어서 한글 오토마타를 구상, 알고리즘으로 구현해보았습니다. 일단 알고리즘을 제작하기전 오토마타 그래프를 만들었습니다. 알고리즘을 구현하는데 Stack을 사용해서 한글을 지울때 이전 상태로 돌아가서 다음 상태로 이동할 수게 구현해서 처음부터 한글을 조합하는 작업을 하지 않아도 되서 좀 더 효율적인 알고리즘으로 구현했습니다. 메멘토 패턴을 이용한것이라 볼 수 있습니다. enum HangulStatus { case start //s0 case chos..
요즘 앱 로그인 할때 대부분 소셜 로그인을 사용합니다. 토이 프로젝트를 진행 할 때 소셜로그인을 넣으려고 했는데, 각 소셜 로그인마다 ViewModel에 googleLogin, kakaoLogin, appleLogin..등등 각 로그인 함수를 넣어서 구현하는것은 SOLID 원칙에도 위배되고, 각 케이스 마다 비슷비슷한 코드를 써야하기에 비효율적이라 생각해 클린 아키텍처를 사용해서 구현해 보게되었습니다. 우선은 전체적인 Coordinator 패턴 흐름도입니다. AppCoordinator의 start에서 로그인을 했는지 안했는지 판단하고 로그인을 했으면 오토로그인, 하지 않는 경우에는 로그인뷰를 보여주게 됩니다. 여기서 LoginRepository는 각각 구글, 카카오, 애플 로그인 오브젝트를 말합니다. 각..
Responder Chain Responder란 터치 이벤트를 처리할 수 있는 객체를 의미합니다. 터치 이벤트가 발생할 경우 iOS는 터치이벤트가 발생한 지점의 최상위 뷰를 찾습니다. 최상위 뷰를 First Responder이라 하는데 만약 First Responder가 이벤트를 처리하지 못할경우 최상위 뷰에서 하위뷰로 파고들며 이벤트를 처리 가능한 Responder를 찾게 되는데 이 과정을 Responder Chain이라 합니다. First Responder First Responder는 hitTest(_:with) 메서드로 찾는습니다. 이 메서드는 터치 이벤트가 발생했을 시점에 최상위 뷰의 hitTest가 호출될때까지 UIWindow부터 터치된 지점의 subView들의 hitTest 메서드를 순차적으..