전체 글
-
[Design Pattern] Adapter PatternLearn/Architecture 2022. 9. 4. 00:00
# 개요 서로 다른 인터페이스를 가진 클래스들이 같이 일할 수 있게 하기 위한 패턴 클라이언트는 자신의 요청이 어떤 adaptee로 가는지 알 필요가 없음 예시 adapter는 클라이언트의 요청이 들어오면 adaptee를 변환하여 처리해준다. public class TurkeyAdapter implements Duck { // adaptee Turkey turkey; public TurkeyAdapter (Turkey turkey) { this.turkey = turkey; } public void quack () { turkey.gobble (); } public void fly () { for (int i= 0; i < 5; i++) turkey.fly (); } } 아래와 같이 Adapter를 통해..
-
정규화 모델 (Ridge, LASSO, Elastic Net)Learn/머신러닝 2022. 9. 3. 23:21
# 무엇이 좋은 모델인가 - 현재 데이터(training data)를 잘 설명하는 모델 (Explanatory modeling) - 미래 데이터(testing data)에 대한 예측 성능이 좋은 모델 (Predictive modeling) 결국 MSE를 줄이는게 중요하다. > Bias와 Variance를 줄여야 한다. 1번이 가장 좋고 4번이 가장 나쁜건 당연한데, 2/3번은 상황에 따라 다르다. 그러면 어떻게 Variance를 줄일 것인가? > subset selection method는 설명변수 일부만 사용하여 회귀 계수를 추정하는 방법 > 이를 통해 bias는 증가할 지라도 variance를 줄일 수 있다. # Regularization 다시 돌아가서 좋은 모델에 대해서 생각해보자. 아래 중 어떤 ..
-
[Design Pattern] Singleton PatternLearn/Architecture 2022. 8. 31. 00:38
# 개요 인스턴스가 단 하나만 만들어지게 하고싶을 때 사용하는 패턴 (예시) Thread Pool Manager은 여러개면 그들간의 조율이 필요하므로 하나만 있는게 좋다. 싱글톤은 new로 인스턴스를 생성하는게 아니라 getInstance 함수로 얻는다. # 기본 구조 일반적인 생성자와는 달리 접근하지 못하도록 private로 생성자를 만든다. 생성자를 만들지 않으면 자바가 알아서 public으로 생성하므로 꼭 만들어줘야한다. 외부에서는 getInstance를 통해서만 인스턴스를 얻을 수 있다. 외부에서 이 함수에 바로 접근할 수 있게 static으로 선언해야 한다. 생성자를 대신하므로 public으로 열어줘야 한다. uniqueInstance는 클래스에 단 하나만 있어야 하므로 static으로 만든다...
-
[Design Pattern] Builder PatternLearn/Architecture 2022. 8. 30. 21:18
# 개요 쉽게 알고리즘을 교체할 수 있는 객체를 생성하기 위한 패턴 director와 (concrete)builder가 중요 director: 최종 제품이 되기 위해 어떤 파트가 필요한지를 알고 있음 (concrete) builder: 각 파트들을 어떻게 만들어야 할지를 알고 있음 아래 그림처럼 builder 인터페이스를 통해 builder를 쉽게 바꿀 수 있음 전략패턴의 구조와 유사 아래 그림처럼 director가 builder에게 각 파트 생성을 요청한다. 중요한건 클라이언트는 각 파트가 어떻게 구성되었는지 관심이 없다는 점이다. 다 조립된 제품에만 관심있다. # Participants Client director와 concrete builder를 선택 director에게 어떤 concrete bui..
-
[Design Pattern] Factory Method & Abstract Factory PatternsLearn/Architecture 2022. 8. 29. 23:35
# 개요 아래와 같이 conditional statement에 따라 다른 Concrete Class를 불러야 하는 상황을 피할 때 이 패턴을 쓴다. Duck duck; if (picnic) duck = new MallardDuck(); else if (hunting) duck = new DecoyDuck(); else if (inBathTub) duck = new RubberDuck(); 새로운 object를 new를 쓰지 않고 만드는 것을 Factory Pattern이라고 한다. Factory Method: 상속(inheritance)를 통해서 인스턴스를 생성하는 방식 Abstract Factory: 위임(Delegation)을 통해서 인스턴스를 생성하는 방식 SOLID 원칙의 Dependency In..
-
[Design Pattern] Mediator PatternLearn/Architecture 2022. 8. 29. 00:41
# 개요 다양한 객체들의 커뮤니케이션을 Encapsulation하는 패턴 예시 각 비행기들은 서로 직접 통신하지 않고 Mediator인 관제탑을 통해서 통신한다. 일반화하면 다음과 같다. Colleague들은 각각의 함수를 가지고, 상태가 변하면 Mediator에 알려준다. Colleague들은 서로 메시지를 직접 주고받지 않는다. # Mediator Pattern Mediator을 중심으로 상호작용한다. 클래스들간의 커플링을 낮춰준다. colleague들이 많이 생겨도 이해가 쉽다. mediator는 어플리케이션에 종속적일 수 밖에 없으므로 재사용이 힘들다. # QUIZ 다음 중 Mediator Pattern의 시퀀스 다이어그램으로 잘못된 것은? 정답 d. Colleague간에 직접 커뮤니케이션이 일어..
-
[Design Pattern] State PatternLearn/Architecture 2022. 8. 29. 00:26
# 개요 객체가 내부적인 상태(state)에 따라 다르게 행동해야 할 때 사용하는 패턴 UML의 state machine diagram을 구현할 때 가장 적합한 패턴 state에 따라 다르게 행동하도록 구현하는 가장 단순한 방법은 conditional statement를 쓰는 것이다. public class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER = 1; final static int HAS_QUARTER = 2; final static int SOLD = 3; int state = SOLD_OUT; int count = 0; public GumballMachine(int count) { this.count ..
-
[Design Pattern] Iteration PatternLearn/Architecture 2022. 8. 28. 14:41
# 개요 비슷한 기능을 하는 코드인데 자료구조가 달라서 동일한 방식으로 핸들링이 안되는 경우가 있음 자료구조를 노출하지 않으면서 aggregate object의 element에 접근할 수 있도록 하기 위한 패턴 ※aggregate object: 하나의 오브젝트 안에 다른 오브젝트가 포함된 것. (container 혹은 collection라고 불림) 예시 아래와 같이 MenuItem을 정의했을 때 public class MenuItem { String name; String description; boolean vegetarian; double price; public MenuItem (String name, String description, boolean vegetarian, double price )..