본문 바로가기
728x90
반응형

Programming56

[Design Pattern] Singleton Pattern, 싱글톤 패턴 말도 많고 탈도 많은 패턴계의 뜨거운 감자 싱글톤 패턴. 개인적으로 디자인 패턴이라기보다 코딩 기법이라고 생각한다. 애플리케이션 전체적으로 단 하나의 인스턴스를 사용하기 위해 사용되는 코딩 기법. 싱글톤이 늘 논의가 되는 곳은 자바 세상이기도 하고 각 언어마다 멀티스레드 환경을 제어하는 방법이 다르기는 하지만 자바, 코틀린, 고, 타입스크립트에서 어떻게 구현하는지 알아보자. 자바에서 일반적으로 알려진 싱글톤 코딩 기법이 왜 멀티스레드에서 깨지는지 등의 논의는 접어두고 각 언어마다 내 마음에 든 기법을 하나씩 소개하려고 한다. Java Singleton Pattern 멀티 스레드를 락으로 동기화하는 synchronized, 캐시가 아닌 항상 메인 메모리에서 인스턴스를 가져오는 volatile 등이 필요 없.. 2022. 5. 2.
[Design Pattern] Abstract Factory Pattern, 추상 팩토리 패턴 팩토리 메서드 패턴이 제품을 생산하기 위한 것이라면 추상 팩토리 패턴은 제품을 구성하는 부품? 재료? 를 생산하기 위한 것이다. [Design Pattern] Factory Method Pattern, 팩토리 메서드 패턴 DIP(Dependency Inversion Principle), 의존성 역전 원칙 변경에 강한 설계를 하기 위한 방법 중 잘 알려진 SOLID 원칙의 하나로 의존 흐름을 역전시키는 방법으로, 육각형 아키텍처의 포트-어댑터도 이 방법 tinkerbellbass.tistory.com Abstract Factory Pattern 제품을 구성하는 부품들 중 연관이 있는 것을 묶어 생산하는 것이 추상 팩토리 패턴의 핵심이다. 구체적으로는 제품을 구성하는 부품을 만드는 인터페이스를 정의하고 그 .. 2022. 4. 29.
[Design Pattern] Factory Method Pattern, 팩토리 메서드 패턴 DIP(Dependency Inversion Principle), 의존성 역전 원칙 변경에 강한 설계를 하기 위한 방법 중 잘 알려진 SOLID 원칙의 하나로 의존 흐름을 역전시키는 방법으로, 육각형 아키텍처의 포트-어댑터도 이 방법으로 구현할 수 있다. UploadService 의 upload 메서드에서 S3Storage 인스턴스를 생성하고 있기 때문에 UploadService 는 S3Storage 에 의존하고 있으며 강하게 결합하고 있다. S3Storage 는 물리적으로 파일을 업로드하는 인프라적인 영역이므로 포트-어댑터에서 외부 영역으로 볼 수 있는데 서비스 로직이라는 핵심 영역이 외부 영역에 의존하고 있는 형태이다. 이 둘의 관계를 느슨하게 만들기 위해서 의존성 역전이라는 방법을 사용한다. Upl.. 2022. 4. 25.
[Design Pattern] Decorator Pattern, 데코레이터 패턴 OCP(Open-Closed Principle), 개방-폐쇄 원칙 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다. 기존 코드의 변경 없이 기능을 확장해야 한다는 의미인데, 이 원칙을 지키기 위해서 기존 클래스를 상속받아 사용하거나, 의존 관계를 통한 구성을 사용해야 한다. OCP 의 단골인 DB 커넥션 부분을 살펴보자. 어느 날 갑자기 MySQL 에 심각한 버그가 발견되어 다른 DB 로 교체해야 한다고 하면, MySqlCon 을 사용해서 커넥션을 얻어오는 Repository 클래스의 생성자를 수정해야 한다. Repository 클래스가 MysqlCon 구상 클래스에 강하게 결합되어 있기 때문이다. 이런 코드 변경 없이 확장을 하기 위해서는 슈퍼 타입을 상속 또는 구현한 서브 타입의 인스턴스는 슈퍼.. 2022. 4. 21.
[Design Pattern] Observer Pattern, 옵저버 패턴 구현보다는 인터페이스에 맞춰서 코딩 AObserver 와 BObserver 는 실체를 가지는 클래스로 구현되었다고 할 수 있다. 구현된 클래스를 직접 사용하는 것, 즉 구현에 맞춰서 코딩하는 것은 무엇이 문제일까? class Subject { private final AObserver aObserver; private final BObserver bObserver; public Subject(AObserver aObserver, BObserver bObserver) { this.aObserver = aObserver; this.bObserver = bObserver; } public void notify(string message) { aObserver.update(message); bObserver.u.. 2022. 4. 19.
[Design Pattern] Strategy Pattern, 전략 패턴 헤드퍼스트 디자인 패턴 개정판이 출판되었다. 안 살 이유는 없지. 바로 사서 다시 처음부터 읽어보고 있는데, 이번에는 블로그에 정리를 좀 해볼까 한다. 확장(extends) 과 구성(composition) 상속이라는 말을 좋아하지 않아서 확장이라고 했다. 추상화된 객체를 조금 더 구체적인 객체로 확장해 나가는 것이 확장이다. 예를 들어 '마법사' 객체를 확장해서 '불 마법사', '물 마법사' 등의 객체를 만들 수 있고, '불 마법사' 객체를 확장해서 '공격형 불 마법사', '방어형 불 마법사' 등의 객체를 만들 수 있다. '마법사'보다는 '불 마법사'가 더 구체적이고, '불 마법사'보다는 '공격형 불 마법사'가 더 구체적이다. 구성은 의존관계를 맺는 것이라고 생각하면 된다. 예를 들어 '자동차'라는 객체.. 2022. 4. 18.
728x90
반응형