서론 이전 장에서는 숫자야구게임의 정책문서를 작성하며, 테크스펙을 작성해 개발시 문제가 될 영역들을 체크해봤다. 이번 장에서는 도메인을 실제 구현해볼 예정이다. Number BaseBall Game에서 사용할 숫자를 Value Object로 정의내린 클래스입니다. 일단 Validate가 필요합니다. 이전 장에서 정책 문서에서 보면 실제 숫자는 1~9의 값만 가능합니다. 실제 그 숫자가 아닌 다른 값이 들어온다면 예외가 발생하여 버그를 방지하는 코드를 작성하였습니다. 또한 Value Object이기 때문에 실제 value가 같으면 해당 객체는 같은것으로 보는것도 중요합니다. 해당 게임에선 주소값이 같은게 같은 Number가 아니라 실제 숫자가 같은지를 보고 판단합니다. 그러기 때문에 eqauls & has..
Backend/Java
서론 Java의 학습을 위해, 미션 학습을 진행하고 있습니다. 첫번째 미션으로는 “숫자야구게임”을 진행해보려고 합니다. Step1부터 점진적으로 확장해 나가는것이 목표입니다. 가장 중요한건 확장가능한 설계와 도메인 모델 정의, 테스트 코드 작성을 통한 안정적인 애플리케이션 구현을 가지고 해당 미션을 진행해보려고 합니다. 의도적으로 꼼꼼한 테스트 코드와 원시값 포장을 진행하였습니다. 해당 부분은 참고해주시면 좋을거 같습니다. 미션 요구사항 숫자야구게임이란? 1부터 9까지 서로 다른 수로 이루어진 3자리의 수를 맞추는 게임입니다. 컴퓨터와 싸우는 게임으로 컴퓨터가 뽑은 랜덤의 숫자를 뽑을수 있도록 합니다. 상세 스펙 명령어 1을 입력하면 게임을 시작합니다. 9를 입력하면 애플리케이션을 종료합니다. 게임을 시..
서론 이번에 Java를 다시 학습을 목표로 미션을 만들어서 진행중에 있습니다. 그 첫번째 미션은 “숫자야구게임”을 현재 구현중에 있는데, 여기서 핵심적인 개념 중에 1~9까지의 숫자중에 중복되지 않는 3개의 숫자를 랜덤으로 뽑는 기능에 대해서 고민하던 중에 두가지 방법을 찾아 두가지 방법에 대해서 이야기를 해보려고 합니다. Collections.shuffle을 사용해서 subList로 3개의 값을 추출 Collections.shuffle() 은 리스트의 모든 요소를 랜덤으로 섞는 작업을 하는 메서드입니다. public static void shuffle(List list) { Random rnd = r; if (rnd == null) r = rnd = new Random(); // harmless rac..
서론 간단한 사칙 연산(+,-,*,/)이 가능한 애플리케이션을 만들 예정이다. 아래와 같은 출력물로 자바 콘솔에 수식을 입력하고 결과를 출력하게 된다. 참고로 연산자 우선순위는 적용하지 않는다. 1 + 2 결과 : 3 이렇게 실제 입력을 넣엇을때 출력이 잘되는지 테스트 코드를 작성하려고 합니다. 이걸 테스트 코드로 검증하기 위해선 어떻게 해야할지 작성해보겠습니다. 간단한 사칙연산 애플리케이션을 만들기 해당 포스팅은 프로덕션 코드를 잘 작성하기에 목적을 맞춘것이 아니라, 실제 콘솔 애플리케이션에서 어떻게 테스트 코드를 검증해야 하는지에 대해 초점을 맞춘것으로 실제 테스트할 코드는 간단하게 작성하겠습니다. import java.util.Arrays; import java.util.List; import ja..
💡 원본 글 : https://www.baeldung.com/java-testing-system-out-println 1. 소개 단위 테스트를 할 때 때때로 System.out.println()을 통해 표준 출력된 메시지를 테스트하고 싶을 수 있습니다. 일반적으로 표준 출력보다 로깅 프레임워크를 선호하지만 때때로 이를 사용할 수 없을 수도 있습니다. 이 빠른 튜토리얼에서는 JUnit을 사용하여 System.out.println()을 단위 테스트할 수 있는 몇 가지 방법을 살펴보겠습니다. 2. 간단한 print 메서드 이 튜토리얼을 진행하는 동안 작성하게 될 테스트는 주로 표준 출력 스트림에 결과를 출력하는 간단한 메서드를 대상으로 삼을 것입니다: private void print(String output..
💡 원본 글 : https://inside.java/2023/12/17/sip093/ Java 18과 21 사이에는 많은 새로운 기능이 추가되었지만, 일부 기능은 중단될 예정입니다. 더 이상 사용되지 않거나 제거된 몇 가지 주요 기능에 대한 대안을 검토해보도록 하겠습니다. Finalization Java 18 ~ 21 기간 사이에 더 이상 사용되지 않을 큰 기능은 finalization은 더 이상 사용되지 않는다는 것입니다. 이는 Java 18의 일부 변화였으며, JEP 421에서 다룹니다. removal of finalization이란? Java의 removal of finalization은 Java 11부터 도입된 기능으로, finalize() 메서드를 제거하는 기능입니다. finalize() 메서드..
서론 현재 프로그래머스 백엔드 데브코스 5기 멘토를 진행하던중, 아래와 같이 멘티의 질문이 있었다. Java11까지만 해봤기 때문에 toList()에 대해서 잘 알지 못한다고 생각해 아래와 같이 정리를 해봤다. stream의 최종연산을 List로 반환하기. stream의 최종연산을 List로 반환하는 방법은 Java11에선 아래와 두개가 있었다. List collectorToList = numbers.stream() .filter(it -> it % 2 == 0) .collect(Collectors.toList()); List collectorToUnmodifiabledList = numbers.stream() .filter(it -> it % 2 == 0) .collect(Collectors.toUnm..
Java String의 isEmpty와 isBlank 서론 String 타입에서 해당 값이 빈 문자열인지 체크하는 메서드가 두개가 있다. isEmpty와 isBlank의 차이점을 알고, 각각 어느 상황에 써야 하는지 이해하는 시간을 가져보려고 한다. 일단 결론부터 말하자면 whiteSpace(공백)과 tap(탭)까지 포함해서 빈 문자열로 인정할것인가 이다. isEmpty 실제 자바 구현체를 보면 아래와 같다. /** * Returns {@code true} if, and only if, {@link #length()} is {@code 0}. * * @return {@code true} if {@link #length()} is {@code 0}, otherwise * {@code false} * * @..
Java8에서 함수형 스타일로 리팩토링 : 레거시에서 람다로 By Venkat Subramaniam Java8에는 함수형 프로그래밍 기능이 추가되었지만, 실제로 함수형 프로그래밍으로 작성하기 위해서는 가이드가 필요할 수 있습니다. https://pragprog.com/newsletter/ 자바에서 우리는 명령형 스타일을 사용해 객체지향 코드를 작성하였습니다. Java8에선 함수형 스타일로 코드를 작성할 수 있게 되었습니다. 기존 모든 코드를 모두 변환할순 없겠지만 버그를 수정하면서 기존코드를 리팩토링 할때마다 함수형 스타일을 사용할 수 있습니다. 이 글에서 우리는 레거시 코드를 즉시 람다를 사용할수 있는 방법과 왜 변경해야 하는지를 알아보도록 하겠습니다. 왜 함수형 스타일인가? 명령형 프로그래밍에서 우리..
9 tips to Increase your Java performance(자바 성능을 향상시키기 위한 9가지 팁) 어떤 바보라도 컴퓨터가 이해할 수 있는 코드를 작성할 수 있습니다. 좋은 프로그래머는 인간이 이해할 수 있는 코드를 작성합니다. - 마틴 파울러 그러나 고성능 코드를 작성하고 싶은 마음은 어느 개발자나 가지고 있습니다. Java 코드를 더 빠르게 실행하는 방법을 알아보도록 하겠습니다. 참고 : JVM은 효과적으로 코드를 최적화 합니다. 일반적인 사용 사례에서 최적화할 필요는 없습니다. 그러나 JVM에 최대 성능을 내기를 원합니다. 여기에 초점을 맞춥니다. 모든 테스트는 Mackbook Pro 2017 노트북의 OpenJDK 12.0.1에서 수행되었습니다. 1. Instantiate in co..