분류 전체보기33 MVC, MVVM MVC MVC = Model + View + Controller - Model : 데이터와 비지니스 로직을 처리하는 부분 - View : 사용자에게 보여지는 UI 부분 - Controller : Model과 View 의 중간다리 역할 MVC의 동작 1. View가 사용자 액션을 받은 것을 Controller에게 전달 2. Controller가 View에게 사용자 Action을 받아 Model을 업데이트 3. Model의 데이터 변화를 다시 View에게 전달 애플은 이 MVC 패턴이 Cocoa 프레임워크 기반의 앱을 위한 가장 좋은 디자인이라고 표현을 했다. 하지만 현실적으로 큰 프로젝트에서는 애플이 말한 것처럼 이상적인 MVC가 아니었다. ViewController도 자신의 View를 가지고 있고 온전한.. 2021. 11. 13. Rx Rx ??? 뭐가 좋은데 그게? Rx는 기본적으로 비동기적으로 움직이는 애플의 api들과 수시로 상태가 변하는 환경에서 보다 직관적이고 효율적인 코드를 작성할 수 있게 도와준다. RxSwift 문서에서 제공하는 예시를 통해 확인해 보자! 첫번째 예시. 위의 예시를 해석해보면 Observable 이라는 객체를 통해 이벤트의 흐름을 표현하게 되고, combineLatest, map과 같은 오퍼레이터를 통해 Observable이 내뱉는 이벤트 속의 값들을 여러 형태로 조합하고 변경한다. 또 bind(RxCocoa에서 제공하는 개념)를 통해 원래 디스패치 큐를 이용해 조정해주어야했던 설정들을 자동으로 처리하는 UI 코드를 작성하게 된다. 두번째 예시. 우리는 수많은 API를 통신을 기반으로한 앱을 만드는데 AP.. 2021. 11. 2. 다중 스레드 환경에서 싱글톤 패턴 : Synchronized / DCL(Double Checked Locking) / Demand(Lazy) Holder 단일 스레드 환경 - 공통 로그 파일에 모든 사용자 계좌의 입금/출금의 발생 내역을 기록하는 프로젝트 단일 스레드 환경에서 제대로 실행된 Lazy Initialization 싱글톤 패턴을 다중 스레드 환경에도 적용해보자. 실행결과는 2020-07-21 at 12:22:20 KST : owner : insang7 withdraw 177027 2020-07-21 at 12:22:20 KST : owner : insang7 deposit 3855 위와 같이 나오지만 하나의 Logger가 아닌 Logger가 여러 개 만들어지는 것을 확인할 수 있다. 이유가 무엇일까? 스레드 경합 때문이다. 스레드 경합? Logger 인스턴스가 아직 생성되지 않았을 때 스레드 1이 getInstance()의 if문을 실행하여 이.. 2021. 10. 20. 단일스레드 환경에서 싱글톤 패턴: Eager Initialization / Lazy Initialization 단일스레드 환경 - 공통 로그 파일에 모든 사용자 계좌의 입금/출금의 발생 내역을 기록하는 프로젝트 설계 실행결과 2020-07-21 at 10:50:33 KST : owner : insang2 withdraw 5000 -> 문제: Insang1의 입금 내역이 누락 why? 위의 코드는 Account 인스턴스가 생성될 때 마다 새로운 Logger 인스턴스 생성 해결 방법 : 모든 Account 인스턴스가 하나의 Logger 인스턴스를 공유하도록 설계 Account 클래스와 Main 클래스 변경 위와 같이 변경 후 실행은 제대로 되지만 이 방법은 여러 Logger 인스턴스를 생성하지 못하게 하는 수단을 제공하지 못한다는 문제가 존재한다. 따라서 클래스가 아래 사진과 같이 하나의 인스턴스만을 가지도록 설계해.. 2021. 10. 20. 이전 1 2 3 4 5 6 7 8 9 다음