2025/01/08 6

디자인 패턴 : 중재자 패턴

중재자 패턴다대 다 (N : N)의 관계에서 객체 간의 직접 통신을 막고, 모든 통신을 중재자를 통해서 해결객체들 간의 상호작용은 직접적으로 연결되지 않음객체는 오직 중재자만 참조함예를 들자면, 카카오톡을 생각하면 된다. 다른 사람 1,2,3 에게 메세지를 보내고 싶다면 하나하나씩 보내는 것보다중재자(카카오톡 그룹방)에 올리면 사람들이 그걸 보는 방식이라고 이해하면 편하다.  옵저버 패턴과의 다른 점은 다음과 같다.   옵저버 패턴의 예시를 먼저 보자// Subject 인터페이스public interface ISubject{ void RegisterObserver(IObserver observer); void UnregisterObserver(IObserver observer); void..

개념공부 2025.01.08

디자인 패턴 : 연쇄 책임 패턴 (Chain Of Responsibility)

연쇄 책임 패턴 클라이언트의 요청에 대한 처리를 하나의 객체가 하는 것이 아닌, 여러개의 처리 객체들로 나누고 사슬로 묶어 연쇄적으로 처리하는 방식처리 객체들은 핸들러(Handler)라고 불리며 자신의 기능만큼만 요청을  처리하고(혹은 처리가 불가능하다면) 다음 체인으로 연결을 떠넘긴다. if-else 문들을 최적화하는데에 있어서 애용되는 패턴체인 연결을 동적으로 처리할 수도 있음장점클라이언트가 핸들러들의 내부 구조를 알 필요가 없음새로운 요청에 대한 처리 객체 생성이 편해짐(각각의 체인마다 역할이 있으므로)핸들러를 체인에 동적으로 추가하거나, 변경할 수 있어 유연해진다.요청의 호출자와 수신자를 분리시킬 수 있음단점디버깅 및 테스트가 어려워질 수 있다.체인 끝까지 갔는데도 처리되지 않는 경우가 있다.이 ..

개념공부 2025.01.08

디자인 패턴 : 빌더 패턴

빌더 패턴 복잡한 객체의 생성 과정을 분리하여 다양한 구성의 인스턴스를 만드는 생성 패턴생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들이고, 마지막에 통합하며 객체를 생성예를 들어 햄버거 하나를 만든다고 하면 햄버거에 치즈를 빼는 사람도, 넣는 사람도 있을 것이고, 패티를 두 장 넣는 사람도 있을 것이다. 생성자로 생성한다면 ?이것을 표현하기 위해서 생성자로는 각각의 매개 변수들 (번, 치즈, 고기, 야채) 등을 받아 생성해야 한다. 이는 매개변수가 늘어나면 몇 번째가 번이었는지, 치즈였는지 혼동할 여지가 있고, 번만 먹고 싶을 때에도 0을 넣어주어야 하는 번거로움이 있다.또 타입이 다양해질수록 메서드 수가 기하급수적으로 늘어나 가독성과 유지보수 측면에서 좋지 않다. 자바 빈 패턴위의 단점을 해결하..

개념공부 2025.01.08

디자인 패턴 : 전략 패턴

전략 패턴객체의 전략(행동)을 정의하는 알고리즘을 외부에서 선택하고 주입하여 유연성과 확장성을 높이는 설계 방식'전략'을 캡슐화하여 런타임에 동적으로 교체할수 있도록 설계하는 방법DI와 상당히 유사하나 '동적으로 교체'에 초점을 맞췄다고 보면 됨     Context(문맥) 전략을 호출하는 역할 , 전략 객체를 내부 필드로 유지, 실행하는 메서드(DoSomething()) 제공Strategy(전략 인터페이스) : 공통 인터페이스 혹은 추상 클래스ConcreteStrategy(구체적인 전략) : 인터페이스를 구현하여 실제 알고리즘을 정의  필요성중복 제거 : if 문 혹은 Switch문의 반복으로 코드가 난잡해 지는 것을 방지Open-Closed Principle : 새로운 알고리즘을 추가할 때 기존 코드..

개념공부 2025.01.08

의존성 주입(Dependency Injection)

의존성 객체가 자신의 기능을 수행하기 위해 필요한 다른 객체나 구성혹은 한 클래스가 다른 클래스나 인터페이스에 대해 가지는 관계의존성이 높으면 코드가 변경에 취약해지고 유지보수가 어려의존성 주입객체가 자신의 기능을 수행하기 위해 필요한 다른 객체나 구성을 외부에서 주입(제공)하는 것넓은 의미에서, Unity 인스펙터 창의 드래그 드롭도 의존성을 주입해 주는 것이다. 객체간의 결합도를 낮추고, 확장과 테스트를 용이하게 하는 것이 목표 예를 들어, 다음과 같은 코드가 있다.  using System;public class Solution{ public void Attack() { BaseAttack(); } public void BaseAttack() { ..

개념공부 2025.01.08

[멋쟁이사자처럼 부트캠프 TIL회고] 48일차 : 오류 오류 오류

코딩테스트 : 가까운 수정수 배열 array와 정수 n이 매개변수로 주어질 때, array에 들어있는 정수 중 n과 가장 가까운 수를 return 하도록 solution 함수를 완성해주세요. 가장 먼저 생각나는 방법은, 1씩 더해주어서 +로 더해준 쪽과 -로 더해준 쪽을 비교하는 것이다.번갈아가면서 비교하는 것도 같은 방식이지만 조금 더 한눈에 보이는 방식인 것 같다. using System;using System.Linq;public class Solution{ public int solution(int[] array, int n) { int answer = 0; if (array.Contains(n)) { return n; ..

TIL 2025.01.08