java 55

[디자인 패턴] 생성패턴 - 빌더 패턴 (Builder Patterns)

(인프런) 코딩으로 학습하는 GoF의 디자인 패턴 - 백기선, 강의를 보고 정리한 글입니다. 코드는 GitHub 에 있습니다 #1. 객체 생성 관련 패턴 #2. 구조 관련 패턴 #3. 행동 관련 패턴 싱글톤 패턴 팩토리 메소드 패턴 추상 팩토리 패턴 빌더 패턴 프로토타입 패턴 어댑터 패턴 브릿지 패턴 컴포짓 패턴 데코레이터 패턴 퍼사드 패턴 플라이웨이트 패턴 프록시 패턴 책임 연쇄 패턴 커맨드 패턴 인터프리터 패턴 이터레이터 패턴 중재자 패턴 메멘토 패턴 옵저버 패턴 상태 패턴 전략 패턴 템플릿 메소드 패턴 방문자 패턴 ✔️ 빌더 패턴 동일한 프로세스를 거쳐 다양한 구성의 인스턴스를 만드는 방법 멤버변수가 많고, 생성자가 많아질 경우 복잡하고 파악하기 힘든 생성과정이 생기는 것이므로, 이를 순차적이고 선..

Java/Design Pattern 2023.02.10

[디자인 패턴] 생성패턴 - 추상 팩토리 패턴 (Abstract Factory patterns)

(인프런) 코딩으로 학습하는 GoF의 디자인 패턴 - 백기선, 강의를 보고 정리한 글입니다. 코드는 GitHub 에 있습니다 #1. 객체 생성 관련 패턴 #2. 구조 관련 패턴 #3. 행동 관련 패턴 싱글톤 패턴 팩토리 메소드 패턴 추상 팩토리 패턴 빌더 패턴 프로토타입 패턴 어댑터 패턴 브릿지 패턴 컴포짓 패턴 데코레이터 패턴 퍼사드 패턴 플라이웨이트 패턴 프록시 패턴 책임 연쇄 패턴 커맨드 패턴 인터프리터 패턴 이터레이터 패턴 중재자 패턴 메멘토 패턴 옵저버 패턴 상태 패턴 전략 패턴 템플릿 메소드 패턴 방문자 패턴 ✔️ 추상 팩토리 패턴 추상 팩토리 패턴은 팩토리 메소드 패턴과 팩토리 부분은 매우 유사하지만, 팩토리를 사용하는 Client에게 맞춰져 있습니다. 추상 팩토리 패턴의 목적은 : 팩토리에..

Java/Design Pattern 2023.02.09

[디자인 패턴] 생성패턴 - 팩토리 메소드 패턴이란 (Factory Method patterns)

(인프런) 코딩으로 학습하는 GoF의 디자인 패턴 - 백기선, 강의를 보고 정리한 글입니다. 코드는 GitHub 에 있습니다 #1. 객체 생성 관련 패턴 #2. 구조 관련 패턴 #3. 행동 관련 패턴 싱글톤 패턴 팩토리 메소드 패턴 추상 팩토리 패턴 빌더 패턴 프로토타입 패턴 어댑터 패턴 브릿지 패턴 컴포짓 패턴 데코레이터 패턴 퍼사드 패턴 플라이웨이트 패턴 프록시 패턴 책임 연쇄 패턴 커맨드 패턴 인터프리터 패턴 이터레이터 패턴 중재자 패턴 메멘토 패턴 옵저버 패턴 상태 패턴 전략 패턴 템플릿 메소드 패턴 방문자 패턴 ✔️ 팩토리 메소드 패턴 구체적으로 어떤 인스턴스를 만들지를 서브 클래스가 정하는 패턴을 말합니다. 팩토리 메소드 패턴은, 기능혹은 역할에 따른 다양한 구현체가(Product) 가 존재하..

Java/Design Pattern 2023.02.08

[디자인 패턴] 생성패턴 - 싱글톤 패턴이란 (Singleton patterns)

(인프런) 코딩으로 학습하는 GoF의 디자인 패턴 - 백기선, 강의를 보고 정리한 글입니다. 코드는 GitHub 에 있습니다 #1. 객체 생성 관련 패턴 #2. 구조 관련 패턴 #3. 행동 관련 패턴 싱글톤 패턴 팩토리 메소드 패턴 추상 팩토리 패턴 빌더 패턴 프로토타입 패턴 어댑터 패턴 브릿지 패턴 컴포짓 패턴 데코레이터 패턴 퍼사드 패턴 플라이웨이트 패턴 프록시 패턴 책임 연쇄 패턴 커맨드 패턴 인터프리터 패턴 이터레이터 패턴 중재자 패턴 메멘토 패턴 옵저버 패턴 상태 패턴 전략 패턴 템플릿 메소드 패턴 방문자 패턴 ✔️ 싱글톤 패턴 인스턴스를 오직 한개만 제공하는 클래스 ✔️ 싱글톤 패턴을 사용하는 이유 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러 개 일 때 문제가 생길 수 있는 객..

Java/Design Pattern 2023.02.08

[JAVA] 그 날의 주차 구하기 (week of day)

저는 일관성 있는 데이터를 저장하기위해서, 주 간 어떤날을 입력하든 그 주의 특정 요일 날짜를 반환하는 로직이 필요했습니다. 이에 대한 해답을 자바 8 이후로 나온 날짜및 시간 작업 라이브러리 중, TemporalAdjuster 와 DayOfWeek Enum 클래스를 사용하였습니다. Code public final class DateUtil { private final LocalDate date; public static DateUtil of(final LocalDate date) { return new DateUtil(date); } public int getCompareDayOfWeekNumber(final DayOfWeek dayOfWeek) { return dayOfWeek.getValue() -..

Java/Java 문법 2023.01.12

[Junit] @ParameterizedTest 객체에 값을 자동으로 넣어주는 Auto Param - @autosource

지인이 테스트 코드를 짤 떄, 파라미터의 값을 자동으로 세팅해주는 요상한게 생겼다고 해서 사용을 해보았습니다. 강남언니 CTO 이규원님이 만든 오픈소스라고 하더군요 AutoParams는 AutoFixture에서 영감을 받은 Java의 매개변수화된 테스트를 위한 임의 테스트 데이터 생성기입니다. Auto Param 이 제공하는 기능은, 매개변수에 값을 자동으로 주입해줍니다. 리터럴 변수, Enum, Object, Generic, Collection, Primitive Type Stream 까지 지원을 해줍니다.. (굉장해) @AutoSource 사용해보기 @ParameterizedTest 와 @AutoSource 어노테이션을 사용이용해서 간편하게 사용할 수 있습니다. Auto Param을 사용하기 위해서는..

[Spring] WebClient 사용방법 가이드

아래의 글 순서대로 읽으시면 해당 글을 이해하시는데 족흠 도움이 됩니다 🙏 ⚙️ Block, Non-Block, sync(동기), Async(비동기) 의 간단한 개념 [Spring] Webclient 란❓ (RestTemplate vs WebClient) [Spring] WebClient 사용방법 가이드 (now) [spring] WebFlux란 + Reactor 객체란 (Mono 와 Flux) 저번 포스팅에 이어서 WebClient 사용방법에 대해 공부해보겠습니다. 📌 Spring WebClient 사용하기 공식문서에 나온내용을 토대로 해석해놓은 블로그글이 굉장히 많기 때문에 공식문서를 하나씩 보기보다는, 간단한 사용방법과 제가 어려웠던 부분을 토대로 정리를 해보겠습니다. 1) WebClient 종속성..

Spring/Spring Boot 2022.11.23

🚀 Spring Request DTO 추상클래스로 받아오기 (까지의 트러블 슈팅..😂)

이번 포스팅은 스프링에서 Client 에서 받는 Json 데이터를, 조건에 따라 다른 유효성 검사를 하기위한 과정에서의 트러블 슈팅 기록입니다.. ➡️ 상황 사내에서, 쿠폰 정책에 따라 각각의 쿠폰을 등록할 떄, 필요한 조건이 달라졌기 때문에 기존의 단일 유효성 검사에서, 어떤 쿠폰이냐에 따라서 Custom 한 Validation 을 적용해야하는 상황이였습니다. [문제 직면부터 시도과정] @RequestBody 로 받아오는 DTO 클래스 생성자에 throw Exception ➡️ 내가 던진 Exception 이 아닌 예상치 못한 `Json Parse Error : HttpMessgeException` 이 던져지고, `ClassCastException`이 터짐.. 문제 해결 후, 확장성을 고려하여 DTO ..

Spring/Spring Boot 2022.11.17

[Junit] Test Fixture 란 ❓

Test Fixture 의 이해를 위한 글입니다. Test Fixtures 개념을 실제로 사용하는 2가지 방법을 다룹니다. 코드는 ⚙️ Github 에 있습니당!! Test Fixture 란 일종의 개념이라고 생각합니다. 중복 발생되는 무언가(행위)를 고정시켜 한곳에 관리하도록 하겠다는 개념. Test Fixture 를 사용 예시 금액과 나라를 가지고있는 Money 객체가 있다고 해봅니다. @Getter @AllArgsConstructor @EqualsAndHashCode public class Money { private int money; private String country; /** 돈 더하기 **/ public Money add(Money anotherMoney) { checkOrigin(an..

[Spring DB 1편] (3) 트랜잭션의 이해

인프런 김영한 - 스프링 DB 1 강의를 듣고 정리한 글 입니다. 목차 1. 트랜잭션이란 트랜잭션(Transaction)을 이름 그대로 번역하면 거래라는 뜻입니다. 이것을 풀어 이야기하면, 데이터베이스에서 트랜잭션은 하나의 거래를 안전하게 처리하도록 보장해주는 것을 뜻합니다. 모든 작업이 성공해서 데이터베이스에 정상 반영하는 것을 커밋(Commit)이라 하며, 작업 중 하나라도 실패해서 거래 이전으로 되돌리는 것을 롤백(Rollback)이라고 합니다. 2. 트랜잭션 특징 (ACID) 트랜잭션은 ACID라 하는 4가지 특징을 보장해야합니다. 원자성 (Actomicity) : 트랜잭션 내에서 실행한 작업들은 마치 하나으 ㅣ작업인 것처럼 모두 성공하거나 모두 실패해야한다. 일관성 (Consistency) : ..