Computer Basis
-
[디자인 패턴] 방문자 패턴(Visitor Pattern)Computer Basis/디자인패턴 및 설계이론 2022. 6. 4. 16:45
# 방문자 패턴 (Vistor Pattern) SOP 달성, 버그 가능성, 코드 응집성 등의 이유로 기존코드를 건드리지 않고 새로운 기능을 추가하는 방법을 제안하는 패턴 # 방문자 패턴을 적용하기 전 아래와 같이 동일한 웹 페이지가 기기별로 다르게 렌더링 되어야 한다는 요청사항이 생겼다고 하자. 요청사항에 따라, 본래는 view 패키지의 View 의 집합들 뿐이었으나 이제 device 패키지가 추가되었다. 방문자 패턴을 적용하지 않는다면 아래와 같이 코딩을 할 수도 있다. //View Interface public interface View { // render() -> render(Device device) 로 변경 void render(Device device); } //HomeView Class p..
-
[디자인패턴] 템플릿 메소드(template-method) 패턴 & 템플릿 콜백(template-callback) 패턴Computer Basis/디자인패턴 및 설계이론 2022. 5. 22. 03:01
# 템플릿 메소드 패턴 (상속) 어떠한 로직을 서비 클래스가 확장할 수 있도록 템플릿으로 제공하는 방법 상위클래스(추상클래스)는 템플릿을 제공하고, 하위클래스는 구체적인 로직을 제공한다. 하위클래스에서 제공하는 로직이 상위클래스에서 그대로 호출이 되기 때문에 일종의 IoC(Inversion of Control) 라고 볼 수 있다. # 언제써야해? 코드가 몇줄만 다르고 거의 모든 부분이 동일할 때 실행순서를 보장하고 싶을 때 # 코드 예시 다음과 같은 FileProcessor 가 있다고 하자. > FileProcessor.java public abstract class FileProcessor { private String path; public FileProcessor(String path){this.p..
-
[디자인패턴] 브릿지 패턴 (Bridge Pattern)Computer Basis/디자인패턴 및 설계이론 2022. 5. 8. 09:30
브릿지 패턴(Bridge Pattern)은 Flyweight 패턴, Adapter 패턴, Decorator 패턴처럼 구조 패턴 중 하나로, 두 인터페이스에 계층 구조(Hierarchy)를 가지고 있을 때 인터페이스를 구현(implements)으로부터 분리하고 클라이언트 프로그램으로부터 구현 세부사항을 숨기기 위해 사용되는 패턴이다. 구조 패턴 (Structure Pattern) 구조 패턴이란 작은 클래스들을 상속과 합성을 이용하여 더 큰 클래스를 생성하는 방법을 제공하는 패턴입니다. 이 패턴을 사용하면 서로 독립적으로 개발한 클래스 라이브러리를 마치 하나인 양 사용할 수 있습니다. 또, 여러 인터페이스를 합성(composite)하여 서로 다른 인터페이스들의 통일된 추상을 제공한다. 구조 패턴의 중요한 포..
-
[설계이론] Project Structure - 프로젝트 구성을 어떻게 설계해야 할까? (패키지 분리기준)Computer Basis/디자인패턴 및 설계이론 2022. 3. 27. 22:08
이 글은 김영한(우아한Tech)님의 '배달의민족 마이크로서비스 여행기' 세미나 영상과 76K의 Star 를 받은 'nodebestpractices' 를 참고하여 필자의 주관을 담아 정리한 글입니다. 따라서 이 포스팅을 보고 참고만 하시고 맹목적으로 보시지 않으셨으면 좋겠습니다. 가장 일반적인 프로젝트의 구성 아래는 인터넷강의를 보면 가장 일반적으로 목격되는 프로젝트의 구조이다. 왼쪽은 김영한님의 강의용 프로젝트 구성이고, 오른쪽은 필자의 첫 Spring 프로젝트의 구성이다. 이러한 방식으로 프로젝트를 구성했을 때, 하나의 비지니스컴포넌트(예를 들면 '주문(Order)')에 변경사항이 생기게되면 주문(Order)과 관련된 파일들을 수정해야하는 경우가 생길 수 있는데, 그 파일들이 각각 다른 패키지(폴더)에..
-
[디자인패턴] 싱글톤패턴을 쓰는 이유와 주의할 점Computer Basis/디자인패턴 및 설계이론 2022. 3. 15. 13:08
싱글톤패턴 애플리케이션 시작 시 어떤 클래스가 최초 한번만 메모리를 할당하고 그 메모리에 인스턴스를 생성하는 디자인 패턴 그리고 계속 그 하나의 인스턴스로 작업을 처리한다. 싱글톤 패턴을 쓰는 이유 고정된 메모리 영역(데이터영역)에 한번의 new로 인스턴스를 할당하여 사용하기 때문에 메모리 효율성 증가 전역 인스턴스의 특성상 어디서나 접근가능하기에 데이터 공유에 용이 인스턴스가 절대적으로 한개만 존재하는 것을 보증하고 싶을 경우 사용한다. (멀티쓰레드 환경에서 두개이상이 생겨날 수 있는데 이는 싱글톤 패턴이 아니다.) 이미 생성된 객체이므로 객체로딩시간이 줄어들어 성능이 좋아지는 장점도 있다. 싱글톤 패턴 사용 시 주의할 점 싱글톤 객체가 여기저기서 너무 많이 참조된다면 다른 클래스들 간의 결합도가 같이..
-
[디자인패턴] 상속보다는 컴포지션을 사용하자!!!Computer Basis/디자인패턴 및 설계이론 2022. 2. 17. 17:56
현업자들이 모여있는 오픈톡방에서 상속과 컴포지션에 대한 이야기가 흘러나왔다. ㅎㅎ ...;;; 정말 난 모르는게 많구나.... 이제라도 알아가면 되지 뭐!!! 아래의 블로그포스팅을 쓰신분이 여러블로그와 책을 기반으로 작성하셔서 읽으며 매우 이해가 잘되어 이분의 포스팅을 기반으로 노트필기 느낌으로 포스팅을 작성하려 한다...!! (베껴쓰지 않고 본인이 연구해서 포스팅하시는 분들이 최고야!!!) 상속보다는 컴포지션을 사용하라 누군가에게 상속과 composite의 개념에 대해 듣고 정리를 하기 위해 여러 블로그들을 참조하고, Effective Java 3/E Item 18. 상속보다는 컴포지션을 사용하라. 의 내용 정리입니다. smjeon.dev * 해당 포스팅은 위 블로그의 게시물을 받아쓰기하며 뇌에 다시 ..
-
[설계이론] 마이크로서비스 아키텍처(MSA)는 언제 고려해야하는가?Computer Basis/디자인패턴 및 설계이론 2022. 2. 3. 21:26
복수전공시절 MSA에 대한 세미나를 들었을 때 장점만 들어서 막연히 MSA가 좋다고만 생각했다. MSA로 설계하지 못하는건 실력부족이라고만 생각을 했었는데, 김영한님의 '배달의민족 마이크로서비스 여행기' 테크콘서트 영상을 보고 개념을 다시 한번 잡은 것 같다. CQRS가 궁금해서 본거였는데, 아직 어떻게 설계해야될지 감도 못잡았다는 것은 비밀 😢 # 마이크로서비스 아키텍처로의 전환을 고려해야 할 시점 기존 서비스의 규모가 많이 커졌을 때 (시스템규모 + 트래픽 + 인력) 해당 영상에서는 시스템 안정성(장애격리)가 최우선 과제 였고, 그로 인해 MSA로의 전환이 선택이 아닌 필수 느낌이었다고 말씀하신다. MSA 로 전환으로 인해 성능과 장애격리에선 이점을 얻을 수 있는 반면, 데이터동기화를 위한 비용도 있..
-
[디자인패턴] 템플릿패턴(Template Pattern)Computer Basis/디자인패턴 및 설계이론 2022. 1. 26. 20:28
# Template Pattern Template Method, Hook Method 를 활용하여 전체적인 흐름을 정해놓는 디자인 패턴 추상클래스로 작성하게되면 new를 통해 인스턴스화 시킬 수 없고, 상속만 가능하게 하여 직접 구현하여 쓰도록 강제할 수 있다. # 예시코드 public abstract class Car { //overrding 가능 public void turnOn(){ System.out.println("시동을 켠다"); }; //하위 클래스에 delegate (overriding 필수) public abstract void drive(); //overrding 가능 public void turnOff(){ System.out.println("시동을 끈다."); } //HookMeth..