싱글톤 패턴(Singleton Pattern) 싱글톤 패턴이란? 어떤 클래스가 최초 한번 메모리를 할당하고 해당 메모리에 여러 레퍼런스를 생성하여 사용하는 디자인 패턴 static을 사용하여 인스턴스 생성 싱글톤 패턴을 사용하지 않는 경우 >
상속의 문제점 전략 패턴을 사용하면 상속(Inheritance, is-a)에서 발생하는 문제점을 해결할 수 있다. 슈퍼 클래스 A가 존재하고 상속 받는 B, C, D...가 존재한다고 가정하자. 모든 객체에서 동일한 행위를 A에서 구현하고 공통되지 않은 행위는 인터페이스를 지정하여 상속 받을 것이다. 그렇다면 B와 C가 동일한 행동을 하기 때문에 동...
해당 예시는 헤드 퍼스트 디자인 패턴을 참고했습니다. 기상 스테이션 예제 온도, 습도, 기압 센서를 통해 기상을 관측하는 기상 스테이션이 있다. 우리는 기상 스테이션의 관측 결과를 WeatherData 객체에 저장할 것이다. 또한 여러 디스플레이 장비가 존재하는
해당 예시는 헤드 퍼스트 디자인 패턴을 참고했습니다. 음료와 토핑 카페에선 다양한 음료를 다양한 토핑을 추가하여 주문할 수 있다. 심지어 하나의 토핑도 아닌, 여러 토핑을 추가해서 말이다. > 우리는 카페 시스템을 구현하기 위하여 Beverage라는 추상 클래스
치킨 가게 후라이드, 양념 치킨을 파는 치킨 가게가 존재하여 다음과 같이 구현했다. 위 코드에는 문제점이 존재한다. 만약 새로운 메뉴가 추가되거나 사라진다면 ChickenStore을 수정해야한다. 어떠한 제품(치킨)을 사용할지 결정해서 사용하기 때문에 제품에 종속되어 느슨한 결합이 아니다. 또한 캡슐화가 되어있지 않기 때문에 또 다른 클래스에서 치킨을...
팩토리 메소드 패턴과 차이점 팩토리 메소드 패턴은 추상 생산 클래스가 선언한 팩토리 메소드를 구상 클래스에서 구현하여 생성할 제품을 정했다. 또한 하나의 제품만 생성 가능했다. 추상 팩토리 패턴은 제품군을 생성하는 인터페이스를 제공하여 코드와 여러 제품들을 생산하는 팩토리를 분리할 수 있다. 만약 다른 제품을 생성하고 싶으면 추상 팩토리를 구현한 새로운...
해당 예시는 헤드 퍼스트 디자인 패턴을 참고했습니다. 만능 리모콘 위와 같은 생김새의 만능 리모콘을 개발해야 한다. 좌측의 0, 1, 2, 3 인덱스에 등록하여 어떠한 기기의 특정 기능을 수행하거나(ON) 꺼버릴 수(OFF) 있다. >예를 들어 0번째 인덱스의 ON에 불을 켜는 기능, OFF에 불을 끄는 기능 등록 각 인덱스에는 새로운 기능을 수행...
야 개 짖는 소리 좀 안 나게하라 > 해당 밈을 모르는 사람은 여기를 참고하세요ㅎㅎ 아파트에서 강아지 짖는 소리가 계속 들려 한 남성이 화가 단단히 나 창문을 열고 소리질렀다. 야!! 개 짖는 소리 좀 안 나게하라!!! 그러자 잠시 후 남성의 집 초인종이 눌려 문
규칙적인 아침식사 어떤 한 사람은 효율적인 아침식사를 준비하기 위하여 매일 다음과 같은 행동을 한다. 토스트기 켜기(식빵 넣기) 냉장고 문 열기(우유 꺼내기) 냉장고 문 닫기 토스트기 끄기 이 것을 코드로 표현하면 다음과 같다. 무언가 깔끔하지 않다. 순서를 헷갈려 토스트를 굽기 전에 냉장고 문부터 열 수도 있을 것이다. 퍼사드 패턴을 사용하여 단...
취준생의 루틴 > 월요일날 일어나서 Java 공부하고 피곤하면 자거나 유튜브 본다. 화요일날 일어나서 CS 공부하고 컴퓨터 게임한다. 수요일은... -어느 취준생의 루틴- 위 취준생은 각 요일마다 비슷한 하루 일과를 보낸다. 기상 -> 무언가 공부 -> 놀기(졸리면 패스) 물론 월요일 루틴, 화요일 루틴 클래스를 추상화 없이 만들 수 있다. 하지만 ...
해당 예시는 헤드 퍼스트 디자인 패턴을 참고했습니다. 배열 메뉴 햄버거 가게와 리스트 메뉴 카페 햄버거 가게와 카페는 같은 공간에 존재했었는데, 햄버거를 먹고 카페에서 주문하는 손님이 많아지자 콜라보를 진행하기로 결정했다. 따라서 메뉴판을 통일시키기로 결정하였는데 문제가 발생했다. 햄버거 가게는 메뉴를 배열로 저장했는데, 카페는 리스트로 저장했다. ...
실행 시간 측정 기능 Service를 구현하는 HelloService와 ByeService가 존재한다. 새로운 요구사항으로 두 서비스의 특정 메소드 실행 시간을 측정하는 기능 추가를 부탁받았다. 또한 기존 서비스 코드에는 수정이 없어야하고, 서비스를 호출할 때마다 시간 측정 로직을 추가하면 안된다는 제한사항도 존재했다. 기존 코드에 수정 없이 어떻게...
파일과 디렉토리 파일과 디렉토리는 이름을 가질 수 있다. 또한 디렉토리 안에는 파일과 디렉토리 모두 들어갈 수 있다. 하지만 트리구조인 파일 시스템에서 파일은 자식을 가질 수 없고 디렉토리는 자식들을 가질 수 있다는 차이점이 존재한다. Directory는 여러 파일을 가질 수 있기 때문에 위와 같은 files를 가진다면, Directory를 추가할 수...
프로젝트 진행 중, Refresh Token에 대한 여러 차례의 연속적인 검증을 구현했습니다. 해당 코드는 다음과 같았습니다. RefreshTokenService 위 코드의 문제점은 검증 코드가 바뀔 때마다 Service를 수정해야 하므로, SRP를 위반한다는 점