본문 바로가기

728x90
728x90

Computer Science/Design Pattern

[Design Pattern] 옵저버 패턴(Observer Pattern)에 대해서 - 컴도리돌이 어떤 애플리케이션이든 데이터를 관리하는 객체가 있고, 그 데이터를 사용하는 다른 객체들이 있습니다. 데이터를 가진 객체가 상태를 변경했을 때, 그와 연결된 다른 객체들도 그 변화를 알아야 한다면, 어떻게 이 문제를 해결할 수 있을까요? 🤔초기에는 데이터 객체가 모든 연결된 객체들을 직접 참조하면서 상태 변경을 통보하는 방식이 사용되었을지도 모릅니다. 하지만 이렇게 하면 문제가 생겨요. 🤨 객체 간의 의존성이 강해져, 하나의 변경이 시스템 전체에 영향을 미치게 되고, 코드가 복잡해지며 유지보수가 어려워지죠.  그래서 옵저버 패턴이 등장하게 돼요. 옵저버 패턴은 한 객체의 상태 변화가 있을 때, 그와 관련된 다른 객체들에게 자동으로 알려주는 구조를 제공해 줘요. 객체들은 서로 느슨하게 결합되어 있고, 이.. 더보기
[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] 빌더 패턴(Builder Pattern)에 대해서, @Builder - 컴도리돌이 객체를 생성할 때, 보통 다음과 같이 코드를 작성할 것입니다.  public void builderPattern() { Car car = new Car(); ...} 하지만 객체를 생성할 때는, 빈 깡통으로 사용하기보다는 그 객체의 고유한 값을 갖은 상태로 객체를 사용할 것입니다. 그렇기 때문에 객체를 생성할 때는 파라메터를 전달하여 생성해야겠죠. 생성할 때 필요한 매개변수를 입력하여 다음과 같이 코드를 작성합니다.  public void builderPattern() { String param1 = "Chevrolet"; String param2 = "RS"; int param3 = 2024; ... Car car = new Car(param1, pa.. 더보기
[Design Pattern] 퍼사드 패턴(Facade Pattern)에 대해서 - 컴도리돌이 퍼사드 패턴(Facade Pattern)퍼사드(Facade)는 건물의 정면을 의미해요. 건물 내부의 복잡함을 숨기고 건물의 정면만을 나타나게 합니다. 유저들은 건물의 정면에 있는 출입구를 통해 내부를 이용하게 됩니다. 즉, 건물의 정면이 마치 인터페이스가 되는 것이죠.🤔 시스템의 복잡한 부분을 감추고 사용자에게 단순한 인터페이스를 제공하는 개념이에요. 건물의 정면이 마치 출입구가 되어 건물 내부로 들어가는 것처럼, 사용자가 시스템의 내부 동작을 몰라도 간단한 인터페이스를 통해 시스템을 사용할 수 있게 해 줍니다. 온라인 쇼핑몰을 예를 들어 다음 퍼사드 패턴에 대해서 설명해 볼게요 😊 퍼사드 패턴 적용 예시(Facade Pattern Example)사용자는 제품을 검색하고 구매할 수 있지만, 그 내부에서는.. 더보기
[Design Pattern] 전략 패턴(Strategy Pattern)에 대해서 - 컴도리돌이 여러 방식으로 기능이 작동되는 메서드에서, 또 다른 기능을 추가해야 할 경우 어떻게 해야 할까요? 🤔 코드 형태에 따라 구현 방식이 천지 차이지만, if-else로 분기를 태워서 한 메서드에서 서로 다른 기능을 제공하는 경우가 많이 존재할 겁니다. 간단한 예시로 연산 종류에 따른 다른 동작을 수행시키는 계산기 코드를 다음과 같이 작성해 보았어요. public static int calculate(String operation, int operand1, int operand2) { int result; if (operation.equals("add")) { result = operand1 + operand2; } else if (operation.equals("subtract")) { result = op.. 더보기
[Design Pattern] 데코레이터 패턴(Decorator Pattern)에 대해서 - 컴도리돌이 데코레이터 패턴(Decorator Pattern)은 객체의 기능을 확장하거나 수정할 때 사용되는 디자인 패턴이에요. 유연하게 확장을 할 수 있기에, 정적 또는 동적으로 객체에 새로운 기능을 부여할 수 있어요. 일상생활에서는 선물 포장이 떠오르는데, 선물을 준비할 때 종이나 리본, 스티커 등을 사용해서 선물을 포장합니다. 이렇게 포장을 추가하는 것은 기존 선물을 변경하지 않고도 새로운 요소를 덧붙여 선물을 만드는 것과 유사해요. 데코레이터 패턴도 이와 비슷하게 기존 객체를 그대로 유지하면서 새로운 기능을 추가하거나 변경함으로써 객체를 더욱 강화시킵니다. 이렇게 하면 기본 객체는 변함없이 유지되면서도 새로운 기능을 더해주어 객체의 활용도를 높일 수 있어요. 데코레이터 패턴 구조(Decorator Patter.. 더보기