본문 바로가기

728x90
728x90

Design Pattern

[Design Pattern] 옵저버 패턴(Observer Pattern)에 대해서 - 컴도리돌이 어떤 애플리케이션이든 데이터를 관리하는 객체가 있고, 그 데이터를 사용하는 다른 객체들이 있습니다. 데이터를 가진 객체가 상태를 변경했을 때, 그와 연결된 다른 객체들도 그 변화를 알아야 한다면, 어떻게 이 문제를 해결할 수 있을까요? 🤔초기에는 데이터 객체가 모든 연결된 객체들을 직접 참조하면서 상태 변경을 통보하는 방식이 사용되었을지도 모릅니다. 하지만 이렇게 하면 문제가 생겨요. 🤨 객체 간의 의존성이 강해져, 하나의 변경이 시스템 전체에 영향을 미치게 되고, 코드가 복잡해지며 유지보수가 어려워지죠.  그래서 옵저버 패턴이 등장하게 돼요. 옵저버 패턴은 한 객체의 상태 변화가 있을 때, 그와 관련된 다른 객체들에게 자동으로 알려주는 구조를 제공해 줘요. 객체들은 서로 느슨하게 결합되어 있고, 이.. 더보기
[이펙티브 자바][아이템 2] 생성자에 매개변수가 많을 때는 빌더를 고려하라 - 컴도리돌이 개발을 하다 보면 객체를 생성해야 할 때가 당연히 있습니다. 그런데 그 객체를 생성하기 위해 생성자를 사용했는데, 매개변수가 한두 개가 아니라 다섯 개, 여섯 개, 열 개가 넘어갈 때가 있지 않나요? 🤔 예를 들어 영양 정보를 담는 NutritionFacts 클래스를 가지고 가정해 볼까요?  public class NutritionFacts { private final int servingSize; // 필수 private final int servings; // 필수 private final int calories; // 선택 private final int fat; // 선택 private final int sodium; // 선.. 더보기
[Design Pattern] 브릿지 패턴(Bridge Pattern)에 대해서 - 컴도리돌이 class Circle { void drawWithRedColor() { // 빨간색 원 그리기 } void drawWithBlueColor() { // 파란색 원 그리기 }}class Square { void drawWithRedColor() { // 빨간색 사각형 그리기 } void drawWithBlueColor() { // 파란색 사각형 그리기 }} 이 코드에서 Circle과 Square 클래스는 각각 빨간색과 파란색으로 도형을 그리는 메서드를 가지고 있어요. 지금은 두 가지 도형과 색상만 다루고 있죠.그런데 여기서 도형의 종류가 더 늘어나면 어떻게 될까요? 또는 색상이나 그리기 방식이 더 다양해지면 어떨.. 더보기
[Design Pattern] 플라이웨이트 패턴(Flyweight Pattern)에 대해서 - 컴도리돌이 다수의 유사한 객체를 생성하면 메모리 사용량이 급격히 증가할 수 있어요. 😓이러한 문제를 해결하기 위해 플라이 웨이트 패턴은 동일한 객체를 공유하여 메모리 낭비를 줄이고 성능을 향상하는 방법을 제시해 줍니다. 예를 들어, 수천 개의 동일한 글꼴을 사용하는 텍스트 객체가 있다고 가정해 볼게요. 이러한 텍스트 객체는 동일한 스타일과 크기를 공유하지만, 위치나 색상과 같은 상태만 다르죠. 각 테스트 객체가 개별적으로 메모리를 차지한다면 비효율적일 수 있어요. 플라이웨이트 패턴은 이러한 공통된 속성을 공유하여 메모리 사용을 최소화합니다. class Flyweight { private final String sharedState; public Flyweight(String sharedState) { .. 더보기
[Design Pattern] 싱글톤 패턴(Singleton Pattern)에 대해서 - 컴도리돌이 싱글톤 패턴은 하나의 클래스에 대해 단 하나의 인스턴스만 생성하고, 이를 전역적으로 접근할 수 있도록 하는 디자인 패턴이에요. 싱글톤 패턴을 구현하는 방법은 여러 가지가 있지만, 가장 쉬운 방법부터 확인해 볼까요? 싱글톤 패턴(Singleton Pattern)다음은 자바에서 기본적인 싱글톤 패턴 구현 방법입니다. public class Singleton { // static 변수로 인스턴스 선언 private static Singleton instance; // private 생성자, 외부에서 직접 인스턴스를 생성할 수 없음 private Singleton() {} // public static 메서드로 인스턴스에 접근 public static Singleton getIn.. 더보기
[Design Pattern] 복합체 패턴(Composite Pattern)에 대해서 - 컴도리돌이 복합체 패턴(Composite Pattern)은 전체 - 부분 관계를 가진 객체들을 트리 구조로 구성하여 한 개체로 다루는 방법을 제공합니다. 이 패턴은 개별 객체와 복합 객체를 동일하게 취급하여 클라이언트가 단일 객체와 복합 객체를 구별하지 않고 사용할 수 있도록 합니다. 이 패턴은 특히 계층적 구조를 가진 객체를 다루거나, 여러 객체를 하나의 객체로 처리해야 하는 상황에 유용하게 활용됩니다. 복합체 디자인 패턴 구조 Component: 단일 객체(Leaf)와 복합 객체(Composite)가 구현하는 공통 인터페이스입니다. 이를 통해 클라이언트는 복합 객체와 단일 객체를 동일한 방식으로 다룹니다. interface component { void execute(); } Composite: 복합 객체로서,.. 더보기