본문 바로가기

분류 전체보기116

정적 팩토리 메서드, 인스턴스 캐싱 TDD, 클린 코드 with Java - 로또 미션 GitHub - oneny/java-lotto: 로또 게임 구현을 관리하는 저장소 로또 게임 구현을 관리하는 저장소. Contribute to oneny/java-lotto development by creating an account on GitHub. github.com 한 사람이 LottoTicket 10장을 산 경우 60개의 LottoNumber 객체가 생성된다. 여기서 문제점은 LottoNumber는 1 ~ 45의 고정된 값인데에도 불구하고 같은 번호라도 새로운 인스턴스를 생성하고, 가비지 컬렉션 등 부담이 될 수 있다. 즉, 로또를 사려는 사람이 1만명인 경우 10장씩 사면 서로 다른 LottoNumber 인스턴스 60만개가 생성되는 것은 너.. 2023. 4. 30.
TDD, 클린 코드 - 로또(자동) 로또 자동 LottoNumber public class LottoNumber { public static final int LOTTO_MINIMUM_NUMBER = 1; public static final int LOTTO_MAXIMUM_NUMBER = 45; private static final String ILLEGAL_LOTTO_NUMBER_MESSAGE = "올바른 로또 번호를 입력해주세요. 입력된 번호 : "; private final int number; public LottoNumber(int number) { this.number = validatedLottoNumber(number); } public int number() { return number; } private int valid.. 2023. 4. 23.
TDD, 클린코드 - 문자열 사칙연산 계산기 2번째 미션 - 로또, TDD 로또 미션 이전에 자동차 경주 5단계까지 마무리했는데 스프링이나 DB 공부나 과제 미션 클리어하는데 집중한다고 제대로 블로그를 작성하지 못했다.. 지금부터라도 제대로 작성해보자! 이번 첫 단계인 문자열 사칙연산 계산기는 좋은 피드백도 많이 받아서 기분이 좋다ㅎㅎ 문자열 사칙연산 계산기 Operand 클래스 public class Operand { private static final Pattern NUMBER_PATTERN = Pattern.compile("^[0-9]*$"); private static final String ILLEGAL_NUMBER_MESSAGE = "양수를 입력해주세요."; private final String operand; // 양수만 입력가능하다.. 2023. 4. 19.
함수형 인터페이스와 람다식 + 전략패턴 함수형 인터페이스(Functional Interface) 함수형 인터페이스란? 함수형 인터페이스(Fuctional Interface)란, 하나의 추상 메서드(abstract method)만을 갖는 인터페이스를 말한다. 그리고 람다식은 이러한 함수형 인터페이스를 기반으로 작성이 가능하다. 왜 생겼을까? 위에서 말한 것처럼 함수형 인터페이스를 사용하는 이유는 람다식은 함수형 인터페이스로만 접근이 가능하기 때문이다. 사진에서 위 메서드는 Comparator의 추상 메서드이다. 그리고 아래는 람다식인데 람다식의 매개변수는 연관된 인터페이스의 메서드, 즉 추상 메서드에 의해 결정된다. 따라서 보는 것과 같이 Comparator의 경우, compare 메서드를 사용하기 때문에 두 개의 인수가 있고, 람다식을 사용할.. 2023. 4. 19.
익명 클래스, 인터페이스 익명 구현 객체 함수형 인터페이스에 대해 공부하던 중에,, 분명히 interface는 객체를 생성할 수 없다고 배웠는데 Consumer 인터페이스를 통해서 객체를 생성하고 있는 것에 대해 이해가 되지 않았다. 그래서 검색을 통해 찾아보니 인터페이스 익명 구현 객체라는 것을 통해서 구현을 할 수 있다는 것을 알게 되었다. 익명 클래스 익명 클래스는 내부 클래스(Inner class) 일종으로 단어 그대로 이름이 없는 클래스를 말한다. 익명, 이름이 없다는 것은 별로 기억되지 않아도 된다는 것이며, 나중에 다시 불러질 이유 즉, 재사용할 일이 없다는 뜻으로 프로그램에서 일시적(단발적)으로 한 번만 사용되고 버려지는 객체라고 볼 수 있다. 왜 생겼을까? 일회성의 구현 객체를 만들기 위해 소스파일을 만들고 클래스를 선언하는 것.. 2023. 4. 14.
TDD, 클린 코드 - 자동차 경주 자동차 경주 피드백 Car public class Car { private int distance; public Car() { this.distance = 0; } public int distance() { return distance; } // 람다식으로 표현할 수 있도록 GameStrategy를 Funtional Inteface로 만들었는데 이 부분에 대해 따봉 받았다! // Predicate Interface와 고민했는데 movable 메서드로 좀 더 의도적으로 표현하기 위해 GameStrategy Interface를 만들었다. public void forward(GameStrategy racingStrategy) { if (racingStrategy.movable()) { distance++; }.. 2023. 4. 13.
TDD, 클린 코드 - 문자열 덧셈 계산기 2단계 - 문자열 덧셈 계산기 StringAddCalculator class StringAddCalculator { private static final int ZERO = 0; private static final String RUNTIME_EXCEPTION_MESSAGE = "문자열 계산기에 숫자 이외의 값 또는 음수를 전달하는 경우 RuntimeException 예외를 throw한다."; private static final String ZERO_TO_NONE_REGEX = "^[0-9]*$"; private static final String DEFAULT_DELIMITER = "[,:]"; private static final Pattern CUSTOM_DELIMITER = Pattern.com.. 2023. 4. 8.
TDD, 클린 코드 학습 테스트 TDD, 클린 코드 with Java 16기 시작 백엔드 개발자가 되자 목표를 하고 2주 동안 열심히 Java를 공부하고 박재성님의 TDD, 클린 코드 강의가 시작되었다! 물론 내가 들을 수준은 아니지만 하나라도 배우자는 마인드를 가지고 열심히 달려보자! 1단계 학습 테스트 자동차 경주를 시작하기에 앞서 선수 과제가 있었고, 이에 대한 피드백을 정리! String 클래스에 대한 학습 테스트 package study; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.pro.. 2023. 4. 5.