전체 글(394)
-
The Adapter and Facade Patterns
Adapter 나에게 있던 기존의 소프트웨어와 구입한 소프트웨어가 맞지 않을 때 둘 사이를 이어주는 역할을 한다. -> 기존의 소프트웨어를 수정하지 않고 사용할 수 있도록 한다. 코드 public interface Duck { public void quack(); public void fly(); } public class MallardDuck implements Duck { public void quack() { System.out.println(“Quack”); } public void fly() { System.out.println(“I’m flying”); } } public interface Turkey { public void gobble(); public void fly(); } public..
2023.10.21 -
The Command Pattern
문제 배경 리모컨을 만들려고 한다. 버튼마다 기능을 달리 해야한다. 그냥 짠다면 if else문으로 가능하지만 문제점이 있다. 문제점: 새로운 기능이 추가 or 변경된다면 기존 코드를 다시 수정해야한다. 재사용하기 어려움. Command Pattern : 객체의 요청(실행될 기능)을 캡슐화하여 재사용성이 높은 클래스를 설계 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자(Invoker)와 기능을 실행하는 수신자(Receiver) 사이의 의존성을 제거. -> 개발자는 새로운 기능이 추가되면 ConcreteCommand만 수정하면 됨. Command: 실행될 기능에 대한 인터페이스 ConcreteCommand: 실제 실행되는 기능 구현(Command 인터페이스 구현) Invoker: 기능의 실행을..
2023.10.21 -
The Singleton Pattern
문제 배경 오직 하나뿐인 객체를 만들고 싶다. 어떻게 만들 수 있을까? 1. public MyClass { private MyClass() {} } 이렇게 만들어버리면 클래스 생성자체를 못한다. 2. public MyClass { private MyClass() {} public static MyClass getInstance() { return new MyClass(); } } 이렇게 만들면 외부에선 생성하지 못하지만 내부에선 여러개의 클래스 생성가능 Singleton Pattern public class Singleton { private static Singleton uniqueInstance; // other useful instance variables here private Singleton(..
2023.10.21 -
Decorator Pattern
문제 배경여러음료를 만들려고 한다 음료마다 가격이 다르고 들어가는 재료가 다르다 새로운 음료가 생길때마다 상위클래스를 계속 수정해야 하는 문제가 생긴다. Open-Closed Principle(OCP) : 중요한 디자인 원칙 클래스는 확장(새로운 기능 추가)에 대해서는 개방적이고, 수정에 대해서는 폐쇄적이다. -> 기존의 코드를 수정하지 않고 새로운 기능을 추가할 수 있도록 해야한다. Decorator Pattern: 개체에 동적으로 추가적인 책임을 부여하도록 설계 1. DarkRoast 객체가 있다고 가정. 그때의 가격을 포함 2. 모카를 추가한다면 Mocha 객체로 DarkRoast객체를 감싼다. 모카를 추가한 가격을 포함 3.휘핑을 추가한다면 Whip 객체로 Mocha객체를 감싼다. 휘핑을 추가한 ..
2023.10.21 -
Finding Similar Items
hashing은 insert, delete, lookup 하는데 모두 O(1) 시간 걸린다. Locality-Sensitive Hashing(LSH) : similar 한 아이템쌍을 찾기 위해 O(n^2)의 시간을 쓰지 않고도 할 수 있는 방법 hash function을 이용하여 bucket에 아이템을 넣는다 Upside(장점): buckte에 들어온 것들만 비교하면 되므로 비교 횟수가 적음 Downside(단점): false negative 발생 어휘가 비슷한 문서들을 찾는다고 가정해 보자. (LSH는 비슷한 내용이 아니라 비슷한 어휘를 찾기 위함) ex) Mirror site(비슷하게 쓰인 사이트), Plagiarism(표절) 찾는 순서 1. Shingling: 문서에 쓰인 어휘들을 K길이의 문자들의..
2023.10.19 -
The observer pattern
배경 weather station software을 사와서 weather monitoring app을 만들려 한다. 새로운 기기를 만들때마다 계속 추가해야함. 해결방안 subject 객체가 관리 새로운 기기가 등록을 요청하면 등록시켜주고 기가가 삭제를 요청하면 내보내고 등록된 기기들에만 정보를 보내준다. 이것이 Observer Pattern이다. -> 일대다로 정의하여 subject object가 상태를 변경하면 subject object에 속해있는 모든 observer들이 알림을 받고 자동으로 업데이트되도록 한다. 디자인 원칙: 상호작용해야하는 객체 사이엔 종속관계가 약해야한다. public interface Subject{ public void registerObserver(Observer o); /..
2023.10.19