프로그래밍 관련/객체 지향 설계
SOLID. 의존관계 역전 원칙(Dependency inversion principle)
SOLID. 의존관계 역전 원칙(Dependency inversion principle)
2022.05.14의존관계 역전 원칙 의존관계 역전 원칙은 객체 지향 설계의 다섯 가지 기본 원칙(SOLID) 중 하나(D)입니다. 이를 인터페이스 편의 설계적인 관점에 넣으려고 했으나 상당히 중요한 부분이기 때문에 이렇게 따로 빼놨습니다. 위키백과의 정의를 빌어오자면 의존관계 역전 원칙(dependency inversion principle)은 "추상화에 의존해야지, 구체화에 의존하면 안된다"는 것입니다. 풀어서 설명하면, 첫 번째는 고수준 모듈(혹은 클래스)이 저수준 모듈(혹은 클래스)에 의존하지 말아야 합니다. 즉, 둘 다 추상화에 의존해야 합니다. 이 이유는 잠시 후 같이 살펴볼 것입니다. 고수준(high level)과 저수준(low level) 저수준 클래스는 고수준 클래스의 작업을 돕는 작은 클래스라고 할 수 ..
디자인 패턴. 싱글턴 패턴(Singleton pattern)
디자인 패턴. 싱글턴 패턴(Singleton pattern)
2022.05.08정의 싱글턴(singleton)은 오직 하나의 객체만을 생성할 수 있는 클래스를 말합니다. 따라서 싱글턴 패턴을 사용하면 쉽게 객체의 유일성을 보장할 수 있습니다. 또한 일반적으로 싱글턴 객체에 대한 참조를 public static 필드나 public static 메서드로 노출하므로 어디에서나 싱글턴 객체에 접근할 수 있습니다. 구현 public static final 필드 객체가 오직 하나만을 보장하려면 어떻게 해야 할까요? 바로 정적(static) 필드를 사용하는 것입니다. 정적 필드를 사용하면 모든 객체가 공유하는 필드를 만들 수 있으며, 한 번만 생성되고 별도의 메모리 공간에 저장된다는 특징이 있습니다. public class Singleton { public static Singleton INS..
정리. SOLID 원칙
정리. SOLID 원칙
2022.01.21이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
메모. Command pattern
메모. Command pattern
2019.11.26커맨드 패턴(Command pattern)은 객체가 특정 기능을 바로 수행하거나 나중에 트리거할 때 필요한 모든 정보를 캡슐화하는 행동 패턴이다. 이렇게 하면, 나중에 순서대로 실행하기 위한 명령 목록을 구성하거나 되돌리기가 가능한 명령을 만드는 등이 가능하다. 커맨드 패턴이 캡슐화하는 정보는 다음과 같다. 메서드명 메서드를 소유하는 객체 메서드 인자(parameter) 목적 요청을 객체 속에 캡슐화한다. 클라이언트의 다양한 요청을 매개변수화한다. 커맨드 패턴의 UML 클래스 다이어그램 Invoker 클래스는 Command 인터페이스를 가진 객체의 execute() 메서드를 호출한다. 사실 이는 ConcreteCommand 클래스의 객체로, execute() 메서드는 실제 작업을 하는 Receiver 클..
메모. Iterator pattern
메모. Iterator pattern
2019.11.22이터레이터 패턴(Iterator pattern)은 가장 간단하면서도, 자주 사용되는 디자인 패턴 중 하나다. 이 패턴은 컬렉션이나 집합 객체의 내부적인 구현 방법을 드러내지 않으면서도 그 안에 있는 모든 원소에 순차적으로 접근할 수 있는 수단을 제공한다. 이터레이터 패턴의 UML 클래스 다이어그램 Iterator: 원소를 접근하고 순회하는 데 필요한 인터페이스를 제공한다. (다음 요소를 가져오거나, 현재의 위치를 찾거나, 다시 반복을 시작하는 등의 연산) ConcreteIterator: Iterator에 정의된 인터페이스를 구현하는 클래스. 순회 과정 중 집합 객체 내에서 현재 위치를 기억한다. IterableCollection: Iterator 객체를 생성하는 인터페이스를 정의한다. ConcreteCo..
메모. Proxy pattern
메모. Proxy pattern
2019.11.18프록시 패턴(Proxy pattern)은 다른 객체를 대신할 객체가 필요한 경우 사용한다. 우리가 잘 알고있는 프록시 서버도 이에 해당이 된다. 프록시 서버는 아래와 같이 실제 서버와 클라이언트 사이의 중계기로서 대리로 통신하는 기능을 수행하는 역할을 맡는다. 프록시 패턴의 UML 클래스 다이어그램 서비스 인터페이스(Service Interface): 서비스의 인터페이스를 정의한다. 프록시는 클라이언트가 알아채지 못하도록 서비스 객체로 위장하기 위해 이 인터페이스를 구현해야 한다. 프록시(Proxy): 프록시에는 서비스에 대한 참조가 들어있다. 서비스와 프록시 모두 똑같은 인터페이스를 구현한다. 따라서, 서비스가 들어갈 수 있는 곳이면 프록시로 이를 대체할 수 있다. 여기서 프록시는 흐름 제어만 관여할 ..
메모. Facade pattern
메모. Facade pattern
2019.11.17퍼사드 패턴(Facade pattern)은 복잡한 내부 시스템 로직을 감추고 클라이언트가 쉽게 시스템에 접근할 수 있는 인터페이스를 제공한다. 퍼사드의 예를 들어보자면, 가장 손쉽게 볼 수 있는 것으로 우리 눈앞에 보이는 컴퓨터를 예를 들 수 있다. 사용자는 그저 컴퓨터를 시작하기 위해 전원 버튼을 누를 뿐, 부팅 과정 중 프로세서나 메모리, 주변 장치 등의 검사와 초기화 등과 같은 하드웨어와 관련된 작업들을 알아야 할 필요는 없다. 퍼사드 패턴의 UML 클래스 다이어그램 퍼사드(Facade): 외부에서 보기에 깔끔하도록, 복잡한 서브 시스템을 감싸는 역할을 한다. 어떤 클래스가 어떤 요청을 처리해야 하는지 알고 있으며, 클라이언트의 요청을 해당 서브 시스템 객체에 전달한다. 시스템(System): 전체..
메모. Factory method pattern
메모. Factory method pattern
2019.05.19Factory method pattern은 객체를 생성하기 위한 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 subclass가 내리도록 한다. 이 패턴을 이용하면 클래스의 인스턴스를 만드는 일을 subclass에게 맡길 수 있다. 구조UML 클래스 다이어그램 Product: Factory method가 생성하는 객체의 인터페이스를 정의한다.ConcreteProduct: Product 클래스에 정의된 인터페이스를 실제로 구현한다.Creator: Product 타입의 객체를 반환하는 Factory method를 선언한다. Creator 클래스는 Factory method를 기본적으로 구현하는데, 이 구현에서는 ConcreteProduct 객체를 반환한다. 또한 Product 객체..
메모. Builder pattern
메모. Builder pattern
2019.05.18Builder pattern을 사용하면 제품을 여러 단계로 나눠서 만들 수 있도록 제품 생산 단계들을 캡슐화 할 수 있다. 구조 UML 클래스 다이어그램 Builder: client에서는 추상 인터페이스를 통해서 Product 객체의 일부 요소들을 생성한다. ConcreteBuilder: Builder 클래스에 정의된 인터페이스를 구현하며, 제품의 부품들을 모아 빌더를 복합한다. 특정 종류의 제품을 생성하고 조립하는 데 필요한 모든 코드가 들어간다.Director: Builder 인터페이스를 사용하는 객체를 합성한다.Product: 생성할 복합 객체를 표현한다. 장단점제품에 대한 내부 표현을 다양하게 변화시킬 수 있다. 생성과 표현에 필요한 코드를 분리한다. Builder pattern을 사용하면, 복합..
메모. Concrete class
메모. Concrete class
2019.05.13객체지향 관련 서적을 보다 보면 원서에는 concrete class라고 되어있는 것이, 번역서에는 '구상 클래스', '구현 클래스' 또는 '구체 클래스'라고 번역되어 있다. 이 이름을 보고 나서 이게 구체적으로 어떤 클래스를 의미하는 것인지 크게 와닿지 않았다. 좀 더 자세히 살펴보면, 우리가 이미 알고 있듯이 정의한 모든 연산(operation)이나 일부 연산의 구현을 서브클래스로 넘기는 추상 클래스(abstract class)나 객체의 연산에 대한 구현이 포함되어 있지 않고 정의만 존재하는 인터페이스를 통해 인스턴스를 만들 수 없다. 당연하게도 완성되지 않은 설계도를 가지고 제품을 만들 수는 없기 때문이다. 그럼, 모든 연산에 대한 구현을 가지고 있는 클래스를 뭐라고 할까? 바로 concrete cl..
메모. Abstract factory pattern
메모. Abstract factory pattern
2019.05.13Abstract factory pattern을 이용하면 인터페이스를 이용하여 서로 연관된, 또는 의존하는 객체를 concrete class를 지정하지 않고도 생성할 수 있다. abstract factory를 바탕으로 똑같은 제품을 다른 방식으로 구현하는 서로 다른 concrete factory를 만들어낼 수 있다. 구조 UML 클래스 다이어그램 AbstractFactory: 모든 concrete factory는 이를 구현해야 한다. 제품을 생산하기 위한 일련의 메서드들이 정의되어 있다.ConcreteFactory: 서로 다른 제품군(product family)을 구현한다. client에서 제품이 필요하면 이 factory 가운데 적당한 걸 골라서 쓰면 되기 때문에 제품 객체의 인스턴스를 직접 만들 필요가..