본문 바로가기

전체 글143

자바 커맨드(Command) 패턴 설명 커맨드 패턴은 요청을 객체의 형태로 캡슐화하여 사용하는 패턴입니다. 객체의 행동을 변화시키는 요구나 명령을 클래스로 표현하는 패턴입니다. 왜 사용해야 하는지 다양한 요청을 안전하게 처리할 수 있다. 각각의 커맨드들은 특정 객체에 의존하지 않도록 만들어지므로 재활용성이 매우 높습니다. 예시 저희는 이제 리모컨을 만들어 보겠습니다. 리모컨에는 4개의 버튼과 4가지 기능이 있는데요. 우선 커맨드를 인터페이스로 정의해보겠습니다. public interface ButtonCommand { public void run(); } 그다음 4가지 버튼의 기능을 만들어 보겠습니다. public class PowerOnButton implements ButtonCommand { @Override public void .. 2022. 12. 12.
2장:데이터 중심 애플리케이션 설계 이번 챕터를 읽고 얻고 싶은 목표 어플리케이션 개발자로써 적합한 데이터 모델을 선택 할때 도움을 얻고 싶다. 다양한 범용 데이터 모델 역사적으로 데이터 모델이 많이 생기고 사라졌지만 현대에 주로 사용하는 데이터 모델은 3가지 입니다. 관계형 데이터베이스 문서 데이터베이스 그래프 데이터베이스 그리고 각 데이터 베이스는 장단점이 있고 각각의 특화된 질의언어(Query Language)를 가지고 있습니다. 관계형 데이터베이스 오늘날의 가장 잘 알려진 데이터 모델 : 1970년 에드가 코드(Edgar Codd)가 제안한 관계형 모델이다. 관계형 데이터베이스의 근원은 비즈니스 데이터 처리에 있다. 트랜잭션 처리와 일괄 처리 등등을 할수 있다. 문서 데이터베이스 NoSQL은 관계형 모델의 우위를 뒤집으려는 가장 최.. 2022. 12. 12.
1장:데이터 중심 애플리케이션 설계 데이터 중심 애플리케이션 설계 책을 읽고 정리하였습니다. chapter 단위로 내용을 정리해서 올릴 예정입니다. 서문 급격한 기술 변화에도 변하지 않는 원리가 있다. 이 원리는 사용하는 도구의 버전과도 상관이 있다. 이 책은 성공적인 데이터 시스템을 예로 들어 여러 유명 애플리케이션의 기반 기술을 설명하고 서비스 환경에서 확장성과 성능, 그리고 신뢰성 요구사항을 항상 충족하기 위해 사용하는 기술을 설명한다. 데이터 시스템의 동작 방식뿐만 아니라 왜 그런 식으로 동작하며 어떤 질문을 해야 하는지를 알아본다. 이 책을 다 읽고 나면 특정 목적에 어떤 기술이 적합한지 결정하는 능력과 좋은 애플리케이션 아키텍처의 기반을 만들기 위해 도구를 조합하는 방법을 이해하는 능력이 생긴다. 이 책에서 다루는 내용 데이터 .. 2022. 12. 6.
자바 데커레이터(Decorator) 패턴 설명 Decorator 뜻은 장식으로 주어진 상황 및 용도에 따라 어떤 객체에 책임을 덧붙이는 패턴입니다. 객체의 결합을 통해 기능을 동적으로 유연하게 확장 할 수 있게 해주는 패턴입니다. 왜 사용해야 하는지 상속을 통한 기능의 확장은 각 기능별로 클래스를 추가해야하는 단점이 있습니다. 각 추가 기능별로 개별적인 클래스를 설계하고 기능을 조합할 때 각 클래스의 객체 조합을 이용하면 됩니다. 그리하여 이 설계는 추가 기능의 수가 많을수록 효과가 좋습니다. 예시 까페 레시피를 프린트하는 프로그램을 만들어 보겠습니다. 먼저 커피 재료를 리턴하는 메서드를 지닌 인터페이스를 만듭니다. public interface Coffee { String recipe(); } 그다음 커피데코레이터 추상클래스를 만듭니다.(커피.. 2022. 11. 15.
자바 상태(State) 패턴 설명 상태를 객체로 만들어서 각 상태 별 동작을 처리하는 패턴입니다. 클라이언트 코드가 직접 호출하는 Context class에서 상태별로 다른 State 구현객체를 사용하여 상태별로 다른 처리가 가능하도록 합니다. 구성요소 💡 - State Interface - State Concrete Class : State Instance (implement each State Concrete Class) - Context Class 상태 Interface : 기능만 명세화 상태 구현클래스 (Concrete Class) : 각 상태별 기능을 구현 컨텍스트 클래스 : 클라이언트 코드에서 직접 호출하는 클래스 로직구현코드가 없고, 상태객체를 호출하여 기능을 수행 → 클라이언트 코드에게 결과를 반환한다. 필드로 상태 .. 2022. 11. 8.
자바 전략 패턴 설명 및 왜 사용해야 하는지 알고리즘을 클래스화해서 객체의 행동을 쉽게 변경할 수 있는 패턴입니다. 실시간으로 객체의 행동을 변경해야 할 필요가 있을때 사용합니다. 전략의 수정과 추가에 따른 클라이언트의 의존성을 제거하여 전략을 쉽게 변경 할 수 있습니다. 실시간으로 전략을 선택하여 객체의 행동을 변경 할 수 있습니다. 예를 들어서 포토샵에서 작업한 이미지를 여러 포맷(jpg,gif,png)로 저장할때 게임 캐릭터의 공격무기를 다양하게 선택 할때 입니다. 예시 저희는 이제 포토샵 개발자가 되었습니다! 포토샵에서 이미지를 저장할때 pdf, jpg, 클립보드 등 다양한 포맷으로 저장을 하게 하는데요. 저장 방식을 전략패턴으로 한번 코딩해보겠습니다. 우선 추상클래스로 Image가 있습니다. public abs.. 2022. 11. 3.
자바 프록시 패턴 설명 및 왜 사용해야하는지 Proxy를 번역하면 대리자 입니다. 즉 프록시 패턴이란 어떤 객체의 접근을 제어하는 대리 객체를 제공하여 다양한 선행처리(접근제한, 캐시 등)을 이용하는 패턴입니다. 대리(Proxy)객체는 부모객체를 상속받고 위임도 받아서 사용합니다. 예시 ride()메서드를 가진 자전거를 간단하게 객체 생성하고 ride를 실행해보는 작업을 진행해보겠습니다. 먼저 타다 라는 메서드를 지닌 자전거 인터페이스가 있습니다. public interface Bicycle { void ride(); } 자전거는 구현체를 지니고 있는데요. 다이아몬드백이 자전거의 구현체입니다. public class DiamondbackBicycle implements Bicycle { @Override public vo.. 2022. 11. 1.
자바 빌더 패턴 빌더 패턴 이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴입니다. 생성패턴 중 하나로 빌더 패턴의 장점은 생성패턴 객체의 인스턴스생성과정을 추상화, 객체생성과 참조과정을 캡슐화하여 → 객체 생성/변경이 프로그램 구조에 영향을 받지 않도록함 → 결국 프로그램 유연해집니다. 스프링에서 사용 예시 대표적인 예시로 spring-security가 있습니다. docs의 example을 보면 HttpSecurity, UserDeatails객체를 build하여 만들고 사용합니다. HttpSecurity (spring-security-docs 5.7.4 API) HttpSecurity (spring-security-docs 5.7.4 API) Al.. 2022. 10. 30.
자바 팩토리 메서드 패턴 설명 팩토리 메소드 패턴은 객체를 생성할 때 어떤 클래스의 인스턴스를 만들지 서브 클래스에서 결정하게 합니다. 즉, 인스턴스 생성을 서브 클래스에게 위임합니다. 객체를 생성하는 공장 클래스를 만들어서 생성의 역할을 가지는 클래스를 만드는 것이 핵심! 또한 자식 팩토리 클래스에 구현을 하여 결정합니다. 왜 사용해야 하는지 팩토리 패턴을 사용하는 이유는 객체를 생성하는 역할을 분리하겠다는 취지가 담겨있습니다. 객체의 생성 코드를 별도의 클래스/메서드로 분리함으로써 객체 생성의 변화에 대비하는데 유용합니다. 예시 먼저 추상객체로 피자가 있습니다. 이 피자의 종류로 구현객체인 씨푸드피자, 베이컨피자, 치즈피자가 있습니다. import java.math.BigInteger; public abstract class.. 2022. 10. 25.
gradle test코드를 패키지 단위로 제외시키는 방법 test 코드를 패키지 단위로 제외시키는 방법 실무에서 테스트 자동화 도입시 study를 위한 테스트 코드는 제외해야되는 경우가 생겼습니다. gradle에서 test 메소드를 만들때 아래와 같이 exclude를 하면 해당 패키지는 test할때 제외 됩니다. test { systemProperty 'spring.profiles.active', 'test' useJUnitPlatform { exclude("com/study/**/*.class") } } 2022. 9. 16.
CompletableFuture와 daemon Thread 기본적으로 CompletableFuture 내부적으로 ForkJoinPool.commonPool() 을 사용합니다. (구현 참조 CompletableFuture). 그리고 ForkJoinPool.commonPool()은 데몬 스레드만 생성합니다. jvm은 데몬 스레드의 종료를 기다리지 않습니다. jvm이 종료되는 과정에서 실행중인 데몬스레드가 있다면 그냥 죽인다. 그래서 join, get으로 기다리게끔 처리하여야 로직에서 계속 처리를 기다린다. import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import java.time.LocalDateTime; import java.util.concurrent.*; public .. 2022. 9. 2.
함께 자라기를 또 읽고 나서 최근 지인이 함께 자라기 책을 읽은 후기를 가볍게 나누는 스터디를 모집 중이였고 관심이 생겨 참여 했습니다. 작년즈음에 함께 자라기를 읽은 적이 있습니다. 스터디를 꼭 참여 할 필요는 없었지만 상기하고자 한번 읽으려고 합니다. - 머릿말 중에서 스스로 변하고 싶지만 계속 실패하는 사람, 혹은 조직을 개건하기 위한 시도를 하다가 오히려 데어본 사람, 하루하루가 답답한 사람들을 위해 이 책을 썻습니다. 머릿말을 다시 읽으니 지금이 이책을 보기 적합한 시기인거 같습니다. 자라기 상반된 의견과 정보 속에서 스스로 생각하는 훈련을 해나가야 한다. 현실에서는 야생학습이 중요하고 더 많이 필요합니다. 어떤 경우에 야생학습이 필요할까요? 일반적으로 불확실성이 높은 경우일수록 중요합니다. 불확실하고 목표가 불분명한 것이.. 2022. 8. 21.
반응형