본문 바로가기

아키텍처+디자인패턴7

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.
다중 스레드 환경에서 싱글톤 패턴 : 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.