본문 바로가기

분류 전체보기

(568)
[Design Pattern] Singleton Pattern 이번 장에서는 싱클톤(Singleton) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 이번 싱글톤 패턴은 "데이터베이스" 클라이언트를 생성하고 생성된 객체를 재사용하는 과정을 통해 살펴보도록 한다. 싱글톤 패턴이란? 하나의 어플리케이션에서 단 하나의 인스턴스만 생성하서 사용하는 디자인 패턴이다. 고정된 메모리 영역을 사용하면서 한번의 생성으로 인스턴스 사용을 공유하기 때문에 메모리 낭비를 방지할 수 있다. 필자가 작성한 다른 디자인 패턴 글과는 다르게 이번에는 싱글톤 패턴의 단점을 보완하는 방법에 대해서 알아본다. OCP 위반등 여러가지 단점이 있지만 이번에 다룰 단점은 Multi Thread 환경에서 복수의 인스턴스가 생성될 수 있다는 점을 해결하는..
[Design Pattern] Factory Method Pattern 이번 장에서는 팩토리 메서드 패턴(Factory Method)에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 이번 팩토리 메서드 패턴은 "데이터 베이스" 클라이언트를 생성하고 데이터를 Insert하는 과정을 접목시켜 알아보겠다. 팩토리 메서드 패턴이란? 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며 자식 클래스가 어떤 객체를 생성할지를 결정하도록 캡슐화한 패턴이다. 이전에 살펴보았던 템플릿 메서드 (링크)의 생성 패턴 버전으로 볼 수 있다. GoF Design Patterns에 따르면 아래와 같은 Class Diagram이 그려진다. Product: 생성될 객체들이 구현해야 할 기능을 명시한 인터페이스. ConcreteProduct: 객체가 생..
[Design Pattern] Template Method Pattern 이번 장에서는 템플릿 메소드(Template Method) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 이번 템플릿 메소드 패턴은 "데이터 베이스"에 데이터를 Insert, Select하는 과정을 접목시켜 알아보겠다. 템플릿 메소드 패턴이란? 특정 작업을 처리하는 일부분을 서브 클래스로 캡슐화하여 전체적인 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내용을 바꾸는 패턴이라고 많은 곳에 나와있다. 조금 쉽게 풀어보면 확장 및 수정이 자주 일어나는 코드는 서브 클래스에서 구현하고 중복되고 공통적으로 사용되는 코드는 상위 클래스에서 관리한다. 쉽게 적는다고 적었는데도 쉽지가 않다. 그림을 보면서 알아보도록 하겠다. GoF Design Patterns에 따..
[Design Pattern] Adapter Pattern 이번 장에서는 어댑터(Adapter) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 필자는 모든 디자인 패턴을 우리 일상 생활에 접목시켜서 알아보려한다. 이번 어댑터 패턴은 "오프라인 화장품 매장"에 접목시켜 알아보겠다. 어댑터 패턴이란? 호환되지 않는 인터페이스를 클라이언트는 코드 변경없이 그대로 활용할 수 있다. 클라이언트가 사용하려는 인터페이스가 자신이 사용하는 방식과 맞지 않더라도 어댑터를 이용하여 사용할 수 있게 되는 것이다. GoF Design Patterns에 따르면 아래와 같은 Class Diagram이 그려진다. "오프라인 화장품 매장"에 접목시켜보면 아래와 같은 Class Diagram이 그려진다. 화장품을 구매하려는 고객(Custom..
[Design Pattern] Strategy Pattern 이번 장에서는 전략(Strategy) 패턴에 대해서 알아보도록 한다. 샘플 코드는 여기 (링크) 프로젝트의 테스트 코드로 정리해두었다. 필자는 모든 디자인 패턴을 우리 일상 생활에 접목시켜서 알아보려한다. 이번 전략 패턴은 유명한 햄버거 브랜드 "버거킹"에 접목시켜 알아보겠다. 전략 패턴이란? 비슷한 기능을 하는 클래스(전략)들을 캡슐화하여 이를 선택적으로 사용하는 패턴이다. 사용하는 쪽에서 선택적으로 전략을 선택하기 때문에 이를 수행하는 클라이언트 쪽의 코드는 수정이 필요없다. GoF Design Patterns에 따르면 아래와 같은 Class Diagram이 그려진다. 전략 Interface를 생성하고 이를 구현하는 ConcreteStrategyA, ConcreteStrategyB, ConcreteS..
[SOLID] 객체지향 설계 5원칙 - DIP DIP (Dependency Inversion Principle) 위키에 다음과 같이 정의되어있다. 상위 계층(정책 결정)이 하위 계층(세부 사항)에 의존하는 전통적인 의존관계를 반전(역전)시킴으로써 상위 계층이 하위 계층의 구현으로부터 독립되게 할 수 있다. 이 원칙은 다음과 같은 내용을 담고 있다. 첫째, 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다. 둘째, 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다. 상당히 어렵게 설명이 되어 있는데 한 마디로 구현체가 아닌 Interface를 의존해야한다는 의미다. 이번에는 구현체를 숨기고 외부에서 의존성을 주입받는 방식에 대해서 알아보도록 한다. Spring을 사용한다면 쉽게 자..
[SOLID] 객체지향 설계 5원칙 - ISP ISP (Interface Segregation Principle) 인터페이스 분리 원칙은 클라이언트가 자신이 이용하지 않는 메서드에 의존하지 않아야 한다는 원칙이다. 한마디로 구현 객체는 무의미한 메소드의 구현을 방지하고 반드시 필요한 메소드만을 구현해야한다는 원칙이다. 만약 구현해야하는 Interface가 너무 크다면 해당 Interface를 세분화해야한다. 예를들어 2000년식 아반떼가 있고 2020년식 아반떼가 있다. 2020년식 아반떼에는 앞으로 간다, 뒤로 간다, 멈춘다라는 기본적인 기능 이외에 크루즈컨트롤, 무선충전, 네비게이션등 일반적인 차량 기능외에 많은 새로운 기능이 들어가있다. 이러한 점을 가지고 Car라는 Interface를 구현하면 아래와 같을 것이다. public interfac..
[JVM] GC 벤치마크 결과 데이터 이번 장에서는 GC별로 벤치마크 결과 데이터를 정리한다. 용어에 대한 자세한 설명은 다루지 않는다. 분석에 필요한 대부분의 용어는 [JVM] GC 벤치마크 분석 포인트 (링크)에 적어두었다. Serial GC Instance: m5.xlarge (vCPU: 4, Memory: 16 gb) Allocated Heap: 4.94 gb (JVM에서 자동으로 설정한 값) Request Throughput: 0.51 Transactions/Seconds Total Request Count: 1,828 Error Count (Ratio): 75 (4.10%) Average CPU Usage: 1.0% (User), 0.1% (System) Core-1: 0.9% (User), 0.1% (System) Core-2:..