컴퓨터 프로그램을 구별된 부분으로 분리시키는 디자인 원칙으로, 각 부문은 개개의 관심사를 해결합니다.관심사란 컴퓨터 프로그램 코드에 영향을 미치는 정보의 집합, 관심사는 코드 최적화가 필요한 하드웨어의 세세한 부분만큼 포괄적이거나, 시작할 클래스의 이름처럼 구체적일 수
초기화시 한 번에 너무 많은 인자를 한꺼번에 주게 된다면 당연히 비효율적이게 되겠죠.이때 사용하는 방식입니다. 이런 식으로도 코드를 구현하는 게 가능합니다.Builder 을 사용하면 좀 더 보기 좋게 초기화를 할 수 있습니다.
만들어진 객체에 대해 component 가 전체에 대해 책임을 진다 두 방식의 initialize 중 한 방식을 이용할 수 있다 그닥 많이 쓰이는 방식은 아님 factory method 는 객체를 만드는 static 메서드입니다. factory 는 객체 생성을 케어할
복잡한 객체는 처음부터 만들어지지 않음 프로토타입을 복사해 커스터마이즈해서 사용 ( deep copy 가 필요 )Factory 를 이용해서 복사를 쉽게 할 수 있음 이렇게 값을 변경시키면 동시에 변경이 되는 데 이것을 struct 으로 바꾸면 이렇게 나옵니다. 다른 방
시스템에서 몇몇의 component 들이 한번 사용 될 수 있음 initializer call 은 비용이 많이 듬 추가적인 copy 를 방지하고 싶음 lazy instantiation 과 thread safety 케어할 필요가 있음 안 좋은 방식 ... 비추천 안전한
encapsulation 의 예로 쓸 수 있음
객체는 다른 객체를 상속이나/ 컴포지션을 통해서 사용할 수 있음 몇몇의 composed/ singular 객체들은 비슷하거나 다른 행동이 필요 Composite 디자인 패턴은 우리들에게 두 객체의 타입을 동일하게 믿을 수 있게 함Swift 는 특별한 sequence 개
상속 없이 행동이나 기능을 특정한 객체에 추가할 수 있게 하는 것 Swift 에선 제약사항이 있어서 특정한 Decorator 방식을 C++에서와 같이 효율적이게 쓰는 건 힘들다.
complexity, presentation, usability 의 밸런싱을 위해서 나옴 크고 정교한 코드에서 좀더 이해하고 알기 쉬운 user interface 를 위해서 제공되는 것 유저가 필요할 때 상향식으로 더 복잡한 API 를 허용할 수 있도록 할 수 있다
저장 공간을 효율적 사용 할 수 있게 하는 기술로 연관 되거나 비슷한 객체들을 활용합니다.공통된 데이터를 이용하여 공간을 효율적으로 활용하는 방식 범위를 정해서 공통된 데이터를 결정함
같은 interface 여도 다른 기능, 동작이 가능 하도록 함 관련 있는 기능들을 가져와서 재정의 하는 방식으로 진행 됨
Method Chain Broker Chain
되돌릴 수 있는 property 가 없음
문자 입력은 처리가 필요함예로 HTML, XML, Numeric expressions(3+4/5), Regular expressions 가 있음 Lexing 은 텍스트를 토큰으로 만드는 것이고 Parsing 은 토큰을 하나의 의미 있는 구조로 만드는 것이다
다양한 데이터 구조에서의 핵심 기능
Mediator 를 사용하면 다양한 component 들이 통신하기 좋습니다.
특정한 시점으로 rollback 할 수 있음
Null Object
무엇인가 일어났을 때 알려주는 것
State Machine
Dynamic strategy Static Strategy
Template Method
Intrusive Expressing Printing Reflection-Based Printing Classic Visitor (Double Dispatch)
Controller 에서 Inputs 을 받아서 ViewModel 에서 이 Inputs 값을 바탕으로 처리를 하여 Controller 에 Outputs 해주는 방식입니다. ViewModel ViewController ViewModelViewController ViewM