Java의 메서드 참조 방식 4가지 정적 메서드 참조 : Static method reference생성자 참조 : constructor reference바운드 비정적 메서드 참조 : bound non-static method reference언바운드 비정적 메서드 참조 : unbound non-static method reference 정적 메서드 참조 @Test void staticMethodReference() { Function asLambda = s -> Integer.parseInt(s); Function asRef = Integer::parseInt; Integer i = asLambda.apply("10"); Assertions..
단일책임원칙 single responsibility principle, SRP클래스와 모듈(Module)은 하나의 책임만 가지고 있어야 한다. 여기서 모듈은 하나의 역할을 위해 만들어진 클래스의 군집으로 이해하면 된다. 하나의 클래스는 하나의 역할을 해야 하며, 하나의 모듈 내에 있는 다수의 클래스들은 더 큰 하나의 역할을 처리하기 위한 기능들로 구성되어야 한다. 이 책임(역할)을 벗어나는 기능이나 로직이 클래스 또는 모듈 내에 있다면 클래스 설계 관점에서 클래스 또는 모듈의 분리 대상이 된다. 단일책임원칙에서 클래스 분해의 수준은 프로젝트의 규모나 복잡도에 따라 달라질 수 있다. 이 해석이 모호하다면 코드의 가독성, 확장성, 재사용성, 유지보수성을 판단해서 적정한 수준까지 설계하면 된다. 아래 암호..
https://martinfowler.com/articles/mocksArentStubs.html Mocks Aren't StubsExplaining the difference between Mock Objects and Stubs (together with other forms of Test Double). Also the difference between classical and mockist styles of unit testing.martinfowler.com 요약 비교표구분Mockist Style (Mock을 활용하는 TDD)Classical Style (전통적인 TDD)검증 대상행동 검증상태 검증검증 방식객체 간의 상호작용을 검증함.객체의 최종 상태를 검증함.초점시스템 간의 행동이 어떻게 연..
https://projectreactor.io/ 효율적인 반응형 시스템 만들기 리액티브 코어 완전 논-블로킹 함수형 인터페이스, CompletableFuture, Stream, Duration과 직접적인 상호작용 [Duration ???] 나 : Reactive Core 에서 duration이 어떤 특징인지 설명해 줘. GPT-4 : Reactive Core, 특히 Project Reactor에서 Duration의 사용은 반응형 프로그래밍에서 시간 기반의 연산을 수행할 때 핵심적인 역할을 합니다. Project Reactor는 비동기 데이터 스트림 처리를 위한 Java 라이브러리 중 하나로, Reactor Core는 이 라이브러리의 중심적인 부분입니다. Duration은 이러한 반응형 프로그래밍 패러다임..
[프로젝트 구성] 새 프로젝트 생성 IntelliJ -> File -> New Project Gradle, Java Name 셋팅 완료 plugins { id 'java' } group 'org.example' version '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' } test { useJUnitPlatform() } Gradle 업데이트 ./gradlew wrapper --gradle-version 8.1.1 작..
DSL(Domain Specific Language) 개요 도메인 전용 언어 : 특정 비즈니스 도메인의 문제를 해결하려고 만든 언어 특정 비지니스의 문제를 어떻게 해결할지에만 집중 특정 비지니스의 복잡성을 더 잘 다룰 수 있다. 저수준 구현의 세부사항을 숨기고 사용자가 비지니스 문제에 집중할 수 있게 한다. DSL의 필요성 의사 소통 : 코드(Language)의 의도가 명확히 전달되어야 하며, 프로그래머가 아닌 사람도 이해할 수 있어야 한다. 가독성 : 한 번 코드를 구현하지만, 반복적으로 사용하며, 여러 번 코드를 읽는다. 즉, 코드의 가독성이 중요한 비즈니스 로직이다. DSL 장점 간결함 가독성 유지보수 높은 추상화 집중(생산성) : 비즈니스 도메인의 규칙을 표현할 목적으로 설계된 언어라서 프로그래머..