본문 바로가기

Software Development/디자인 패턴

(8)
[디자인 패턴의 정석] 구조패턴 - 브리지 패턴 (Bridge) 개발자 yeah의 Developer Story - 디자인 패턴 오늘은 저번 포스팅에 이어서 브리지 패턴 을 이야기해보려 합니다. 브리지 패턴 은 객체의 확장성을 향상시키기 위한 패턴으로, 객체에서 동작을 처리하는 구현부와 확장을 위한 추상부를 분리합니다. 이렇게 분리된 2개의 추상 계층과 구현 계층은 독립적인 확장 을 가능하게 합니다. 또한 클라이언트 코드에서는 추상 계층과 연결된 구현 계층을 변경하더라도 영향을 받지 않고 사용할 수 있게 됩니다. 그렇다면 어떻게 구현부와 추상부를 나뉘어서 객체의 확장성을 향상 시키는것일까요? 다음 Shape 를 상속받아 Rectangle, Circle 을 만드는 예시가 있습니다. 상위 클래스 Shape 을 상속하여 생성된 Rectangle, Circle 클래스가 존재하..
[디자인 패턴의 정석] 구조패턴 - 어댑터 패턴 (Adapter) 개발자 yeah의 Developer Story - 디자인 패턴 오늘은 저번 포스팅에 이어서 어댑터 패턴 을 이야기해보려 합니다. 개발자는 자신의 코드가 재사용되도록 하기 위해 다양한 변화를 예측하며 코드를 작성합니다. 하지만 동작의 변화, 데이터 타입의 불일치, 매개변수의 불일치 등 다양한 차이가 발생하여 모든 상황을 예측하여 설계할 수 없습니다. 따라서 우리는 이전 코드를 재사용하기 위해서는 변환 작업이 필요하게 됩니다. 우리는 변환 작업을 위해 우리는 보정 코드를 넣게 되는데요. 보정동작이 여러 곳에 분포돼 있다면 많은 영역의 코드가 수정돼야 하며, 가독성이 많이 떨어지게 됩니다. 이러한 경우 별도의 객체를 생성하여 보정을 처리하는 것이 좋은데요! 보정만을 위해 설계된 객체를 활용하는 방법이 바로 어..
[디자인 패턴의 정석] 생성패턴 - 프로토 타입 패턴 (Prototype) 개발자 yeah의 Developer Story - 디자인 패턴 오늘은 저번 포스팅에 이어서 프로토 타입 패턴 을 이야기해보려 합니다. 먼저 프로토 타입 패턴 설명에 앞서 객체 생성에 대해 간단히 설명하도록 하겠습니다. 객체를 생성하기 위해서는 먼저 클래스 선언이 필요하며, 선언된 클래스를 기반으로 객체를 생성합니다. 객체는 선언된 클래스의 인스턴스화를 통하여 메모리 에 적재됩니다. 여기서 일반적으로 객체를 만드는 방법은 new 키워드가 유일하며, new 키워드를 통해 선언한 클래스의 객체를 생성합니다. 이처럼 객체지향에서 객체를 생성하는 것은 시스템의 자원을 소모한다는 의미입니다. 일반적인 클래스의 특징으로는 한 번의 선언으로 다수의 동일한 객체를 생성 할 수 있다는 것입니다. 물론 다수의 동일한 객체를..
[디자인 패턴의 정석] 생성패턴 - 빌더 패턴 (Builder) 개발자 yeah의 Developer Story - 디자인 패턴 오늘은 저번 포스팅에 이어서 빌더 패턴 을 이야기해보려 합니다. 먼저 빌더 패턴 을 설명하기 전에 복합 객체에 대해 설명을 하도록 하겠습니다. 복합 객체란 하나의 객체가 다른 객체를 포함하는 관계 구조를 말합니다. 즉 내부적으로 다른 클래스의 객체를 포함하는 것이죠. 따라서 복합 객체는 객체를 생성하는 과정이 단일 객체보다 복잡 할 수 있습니다. 코드로 예를 들어 보겠습니다. /* Cpu 클래스 */ public class Cpu { String cpu; Cpu(String cpu) { this.cpu = cpu; } String getInfo() { return cpu; } } /* Ram 클래스 */ public class Ram { St..
[디자인 패턴의 정석] 생성패턴 - 싱글턴 패턴 (Singleton) 개발자 yeah의 Developer Story - 디자인 패턴 오늘은 저번 포스팅에 이어서 싱글턴 패턴 을 이야기해보려 합니다. 먼저 싱글턴 패턴을 설명하기 앞서 객체 생성에 대해 알아보도록 하겠습니다. 선언된 클래스를 객체로 생성하는 과정을 인스턴스화 라고 합니다. 인스턴스화는 선언된 클래스를 기반으로 객체를 생성해 메모리에 할당하는 작업을 수행하는데요. 이 모든일을 수행하게 하는 키워드가 바로 new 키워드 입니다! 이러한 객체 생성 과정은 new 키워드를 통해 반복 생성할 수 있습니다. 한번 선언된 클래스를 이용하여 동일한 객체를 제한없이 무제한으로 생성 가능합니다. (시스템 자원이 허락하는 한에서) 이러한 이유로 객체를 붕어빵과 붕어빵틀(?) 로 비유하여 설명하는 경우가 많은 것이죠. 이는 객체지..
[디자인 패턴의 정석] 생성패턴 - 추상 팩토리 패턴 (Abstract Factory) 개발자 yeah의 Developer Story - 디자인 패턴 오늘은 저번 포스팅에 이어서 팩토리 메서드 패턴의 확장 패턴인 추상 팩토리 패턴을 이야기해보려 합니다. 먼저 추상 클래스를 상속받은 하위 클래스의 특징을 설명하도록 하겠습니다. 추상클래스에서 정의한 추상 메서드 를 이용하여 각각의 하위 클래스는 이를 오버라이드 하여 목적에 맞도록 실제 동작하는 메서드를 구현 하게 됩니다. 만약 목적에 따라 다른 하위클래스가 필요하게 된다면, 그 목적에 따라 실제 동작하는 메서드는 저 마다 다르게 구현 할 수 있습니다. 이를 객체지향에서 다형성 이라고 부릅니다. 추상화 된 Factory 클래스를 통한 객체 생성은 2가지 방법이 존재하게 되는데요. 첫 번째는 지난 포스팅에서 배운 팩토리 메서드 패턴 입니다. 팩토..
[디자인 패턴의 정석] 생성패턴 - 팩토리 메서드 패턴 (Factory Method) 개발자 yeah의 Developer Story - 디자인 패턴 오늘은 저번 포스팅에 이어서 팩토리 패턴의 확장 패턴인 팩토리 메서드 패턴을 이야기해보려 합니다. 팩토리 메서드 패턴은 추상화 기법을 사용하여 패턴을 확장하므로, 쉽게 이해하기 위해서는 객체지향의 추상화 개념이 필수입니다! 따라서 추상화, 다형성, 상속 에 대한 이해가 부족하시다면 선행 공부를 꼭 하시고 해당 포스팅을 보시길 바래요 ^^ 먼저 팩토리 패턴에서 활용했던 객체들의 관계를 먼저 설명하겠습니다. /* 마피아 게임에서 사용자를 나타내는 class */ abstract class User { String name; //사용자 이름 String skill; //스킬 User(String name) { this.name = name; } S..
[디자인 패턴의 정석] 생성패턴 - 팩토리 패턴 (Factory) 개발자 yeah의 Developer Story - 디자인 패턴 오늘은 디자인 패턴에서 생성패턴의 한 종류인 팩토리 패턴을 이야기해보려 합니다. 팩토리 패턴의 설명에 앞서 생성패턴이란? 큰 규모의 응용 프로그램을 객체지향 개발 방식으로 설계할 때는 수많은 객체가 필요하게 되는데요. 이때 직접 객체를 생성하고 관계를 설정하면 매우 강력한 결합 관계를 갖게 됩니다. 이때의 관계를 종속 관계라고 하는데요. 이러한 종속 관계는 객체의 확장과 유지보수를 어렵게 하는 원인이 돼요. 생성 패턴은 객체 간 강력한 관계를 느슨한 결합으로 변경하는 기법입니다. 팩토리 패턴 은 생성패턴 중에서도 가장 기본이 되는 패턴이며, 클래스의 객체 생성 처리를 위임합니다. 예를 들어 다음 코드를 살펴보겠습니다. /* 마피아 게임에서 사..