본문 바로가기

디자인패턴7

싱글톤(Singleton) 패턴 🤔문제싱글턴 패턴은 한 번에 두 가지의 문제를 동시에 해결함으로써 단일 책임 원칙을 위반한다.클래스에 인스턴스가 하나만 있도록 한다. 사람들은 클래스에 있는 인스턴스 수를 제어하려는 가장 일반적인 이유는 일부 공유 리소스(예: 데이터베이스 또는 파일)에 대한 접근을 제어하기 위함이다.예를 들어 객체를 생성했지만 잠시 후 새 객체를 생성하기로 했다고 가정해 봅시다. 그러면 새 객체를 생성하는 대신 이미 만든 객체를 받게 된다.해당 인스턴스에 대한 전역 접근 지점을 제공한다. 필수 객체들을 저장하기 위해 전역 변수들을 정의했다고 가정해 보자. 이 변수들을 사용하면 매우 편리할지는 몰라도, 모든 코드가 잠재적으로 해당 변수의 내용을 덮어쓸 수 있고 그로 인해 앱에 오류가 발생해 충돌할 수 있으므로 그리 안전.. 2024. 4. 30.
프로토타입(Prototype) 패턴 🤔문제객체가 있고 그 객체의 정확한 복사본을 만들고 싶다고 가정하면, 어떻게 해야 할까?먼저 같은 클래스의 새 객체를 생성해야 한다. 그런 다음 원본 객체의 모든 필드들을 살펴본 후 해당 값들을 새 객체에 복사해야 한다. 하지만 함정이 있다. 객체의 필드들 중 일부가 배공개여서 객체 자체의 외부에서 볼 수 없을 수 있으므로 모든 객체를 그런 식으로 복사하지 못한다. 이 직접적인 접근 방식에는 한 가지 문제가 더 있다. 객체의 복제본을 생성하려면 객체의 클래스를 알아야 하므로, 코드가 해당 클래스에 의존하게 된다는 것이다. 또, 예를 들어 메서드의 매개변수가 일부 인터페이스를 따르는 모든 객체를 수락할 때 당신은 그 객체가 따르는 인터페이스만 알고, 그 객체의 구상 클래스는 알지 못할 수 있다. 😎해결.. 2024. 4. 30.
빌더(Builder) 패턴 🤔문제많은 필드와 중첩된 객체들을 힘들게 단계별로 초기화해야 하는 복잡한 객체를 상상해 보자. 이러한 초기화 코드는 일반적으로 많은 매개변수가 있는 괴물 같은 생성자 내부에 묻혀 있다. 또, 더 최악의 상황에는 클라이언트 코드 전체에 흩어져 있을 수도 있다.예를 들어 House(집) 객체를 만드는 방법에 대해 생각해 보자. 간단한 집을 지으려면 네 개의 벽과 바닥을 만든 후 문도 설치하고 한 쌍의 창문도 맞춘 후 지붕도 만들어야 한다. 하지만 뒤뜰과 기타 물품(난방 시스템, 배관 및 전기 배선 등)이 있는 더 크고 현대적인 집을 원하면 어떻게 해야 할까? 위 문제의 가장 간단한 해결책은 기초 House 클래스를 확장하고 매개변수의 모든 조합을 포함하는 자식 클래스들의 집합을 만드는 것이다. 그.. 2024. 4. 24.
추상 팩토리(Abstract Factory) 패턴 🤔문제예를 들어 가구 판매장을 위한 프로그램을 만들고 있다고 가정해 보자. 코드는 다음을 나타내는 클래스들로 구성된다. 관련 제품들로 형성된 패밀리(제품군), 예: Chair(의자) + Sofa(소파) + CoffeeTable(커피 테이블)해당 제품군의 여러 가지 변형. 예를 들어 Chair(의자) + Sofa(소파) + CoffeeTable(커피 테이블) 같은 제품들은 Modern(현대식), Vi.. 2024. 4. 24.
팩토리 메서드(Factory Method) 패턴 팩토리 메서드팩토리 메서드는 부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴이다.  팩토리 메서드는 기존 객체들을 매번 재구축하는 대신 이들을 재사용하여 시스템 리소스를 절약하고 싶을 때 사용하자. 이러한 요구 .. 2024. 4. 23.
디자인 패턴이란? 디자인 패턴은 소프트웨어 디자인 과정에서 자주 발생하는 문제들에 대한 전형적인 해결책이다. 이는 코드에서 반복되는 디자인 문제들을 해결하기 위해 맞춤화할 수 있는 미리 만들어진 청사진(Blueprint)과 비슷하다. 표준화된 라이브러리들이나 함수들을 코드에 복사해 사용하는 것처럼 패턴들을 붙여 넣기 식으로 사용할 수는 없다. 패턴은 재사용할 수 있는 코드의 조각이 아니라 특정 문제를 해결하는 방식을 알려주는 일반적인 개념이다. 당신은 패턴의 세부 개념들을 적용하여 당신의 프로그램에 맞는 해결책을 구현할 수 있다. 패턴은 알고리즘과 자주 혼동이 되곤 한다. 왜냐하면 두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명하기 때문이다. 알고리즘은 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 .. 2023. 11. 29.