전체 글

템플릿 메소드 알고리즘의 골격을 정의합니다. 템플릿 메소드를 사용하면 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의할 수도 있습니다. 즉, 알고리즘의 틀을 만들어 놓고, 세부 사항은 서브클래스에서 채워 넣을 수 있게 하는 디자인 방식입니다. 장점 재사용성 : 공통 알고리즘을 부모 클래스에 정의하여 여러 하위 클래스에서 재사용이 가능하다. 유연성 : 알고리즘 일부를 서브클래스로 미루어 쉬운 변경과 확장이 가능합니다. 단점 클래스 수의 증가 : 각 단계별로 서브클래스가 필요하여 복잡해질 수 있습니다. 변경 어려움 : 부모 클래스의 알고리즘 변경이 모든 서브클래스에 영향을 끼쳐 유지보수가 어려워질 수 있습니다. 템플릿 ..
어댑터 패턴 특정 클래스 인터페이스를 요구하는 다른 인터페이스로 변환합니다. 인터페이스가 호환되지 않아 같이 쓸 수 없던 클래스를 사용할 수 있게 도와줍니다. 즉, 호환성 문제를 해결해줍니다. 구조 어댑터 패턴에는 두 종류가 있습니다. 하나는 객체 어댑터, 다른 하나는 클래스 어댑터 입니다. 클래스 어댑터 패턴은 어댑터와 어댑티가 타겟 클래스를 동시에 상속받아 구현하므로 다중 상속을 지원하는 언어에서 사용할 수 있습니다. 객체 어댑터 패턴은 구성을 통해 더 유연하게 적용할 수 있으며 자바같은 다중 상속을 지원하지 않는 언어에서는 주로 사용합니다. 또한 클래스 간의 느슨한 결합으로 더 좋은 유지보수성을 얻을 수 있습니다. 가장 큰 차이점은 클래스 어댑터는 상속을 사용하고, 객체 어댑터는 구성을 사용합니다...
커맨드 패턴 요청 내역을 객체로 캡슐화 해서 객체를 서로 다른 요청 내역에 따라 매개변수화할 수 있습니다. 이러면 요청을 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있습니다. 즉, 요청하는 객체와 요챙을 수행하는 객체를 분리할 수 있습니다. 저는 여러 명령들을 추상화해서 클래스로 정의하고 객체로 만들어서 사용하는 패턴이라고 말할 수 있을 거 같습니다. 커맨드 패턴의 구조 Command (명령)은 작업을 수행하는 인터페이스 ConcreteCommand (구체적 명령)는 실제 작업을 구현한 클래스(예제에서의 DarkSightOnCommand, LuckySeven 등) Invoker (호출자)는 Command 객체를 실행하는 주체 (예제에서의 SkillUser) Receiver (수신자)는..
싱글톤 패턴 클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공합니다. 클래스에서 하나뿐인 인스턴스를 관리하게 하여야 하고 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하게 해야 하며 필요하다면 반드시 클래스 자신을 거치도록 해야 합니다. 어디서든 접근할 수 있도록 전역 접근 지점을 제공하고, 언제든 클래스에 요청할 수 있게 만들어 놓고, 요청이 들어오면 하나뿐인 인스턴스를 건네주도록 만들어야 한다. 싱글톤 패턴 구현 public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if(instance == null) in..
팩토리 패턴 객체를 생성할 때 필요한 인터페이스를 만들어서 어떤 클래스의 인스턴스를 만들지는 서브클래스에서 결정합니다. 팩토리 메서드 패턴을 사용하면 클래스 인스턴스 만드는 일을 서브클래스에게 맡기게 됩니다. 즉, 객체를 만들기 위한 인터페이스를 제공하는 디자인 패턴입니다. 장점 구체적으로 생성할 클래스를 유연하게 정할 수 있다. 캡슐화와 추상화를 통해 구체적인 타입을 숨길 수 있다. 단점 새로운 객체를 추가하려면 팩토리 클래스를 만들어야 하기 때문에 확장성은 높지만 많은 변화가 필요하다. 클래스의 수와 코드의 양이 많아질 수 있다. 팩토리 메서드 패턴 사용 예제 Pasta인터페이스를 구현한3가지 파스타가 있고 PastaFactory라는 추상클래스를 만들고 그걸 구현한 3가지 파스타 팩도리가 있습니다. ..
데코레이터 패턴 객체에 추가 요소를 동적으로 더할 수 있습니다. 데코레이터를 사용하면 서브클래스를 만들 때보다 훨씬 유연하게 기능을 확장할 수 있습니다. 저는 쉽게 접근해 봤는데 데코레이터는 장식하는 사람이라는 뜻을 가지는데, 마치 크리스마스트리에 추가 요소(양말, 종) 등을 장식하여 더 멋진 트리를 만들어주는 즉, 더 좋은 기능이 되도록 만들어 주는 패턴이라고 생각합니다. 데코레이터 패턴 사용 예제 저는 데코레티어 패턴에서 생각나는 주제가 2가지 있었는데 첫 번째는 크리스마스트리였고,두 번째는 피자였습니다. 그래서 예제는 제가 즐겨먹던 피자로 만들어 보겠습니다. public abstract class Pizza { String description = "피자"; public String getDescr..
옵저버 패턴 한 객체(Subject)의 상태가 바뀌면 그 객체에 의존하는 다른 객체(Observer)에게 연락이 가고 자동으로 내용이 갱신되는 방식으로 일대다 의존성을 정의합니다. 일상생활 속 경험을 생각해보면 옷을 사고 나서 옷이 집에 도착하게 되면 보통 문자나 카톡으로 알림을 주는데 이때 집에 있으면 바로 뛰쳐나가 택배를 받아보는 반응을 하는데 이런 상황이 옵저버 패턴과 비슷하다고 생각합니다. 이 외의 생각나는 상황 아침에 기상을 위한 핸드폰의 알람 운동 후 먹는 프로틴 디자인 패턴을 공부하고 블로그에 정리하기 옵저버 패턴의 구조 Observer 인터페이스에는 update()라는 함수가 있다 update()는 이벤트가 발생했을 때 처리할 행위를 정의한다. Subject에는 observerCollect..
오리 시뮬레이션 게임, SimUduck 모든 오리가 꽥꽥 소리를 낼 수 있고(quack()), 헤엄을 칠 수 있으므로(swim()) 오리를 슈퍼 클래스로 작성을 했어요. 오리마다 모양이 다르기 때문에 모양을 나타내는 메소드는 추상 메소드로 만들고 상속받는 클래스에서 오버라이드 하기로 했습니다. 오리 시뮬레이션 게임 차별화하기. 다른 회사보다 차별화를 위해 오리가 날 수 있도록 해야 한다. 가장 간단한 방법으로 Duck에 날 수 있는 메소드만 추가하면 모든 오리가 그걸 상속받기 때문에 Duck에 fly()메소드 추가를 해요. 문제 발생 Duck의 몇몇 서브클래스만 날아야 하는데 날아다니면 안 되는 오리에게도 날아다니는 기능이 추가됐습니다. 슈퍼클래스의 일부만 고쳤는데, 프로그램 전체에 고무오리가 날아다니는..
백수왕
비전공자에서 주니어 개발자까지