Java

· Java
상태를 유지하며 일련의 시나리오를 테스트하고 싶으시다면 Junit의 DynamicTest를 활용해 보시면 좋을 것 같습니다. 지금처럼 상태를 공유하는 단위테스트는 지양하시는 것이 좋습니다. 체스 미션을 하면서 받았던 피드백입니다. 상태를 공유한다는 의미는 무엇일까? 시나리오 테스트는 무엇이고, DynamicTest는 어떻게 할 수 있을까? 코드를 수정해가며 알아보겠습니다! Bad 우선 문제의(?) 테스트 코드의 일부입니다. 게임의 상태 `GameStatus`를 전역변수로 공유하여 사용하고 있습니다. GameStatus gameStatus; // 상태를 공유하는 부분 Board board = new InitialBoardFactory().generate(); @BeforeEach void setUp() {..
· Java
Board를 어떻게 만드는지에 대한 제어를 하고 싶으시다면 제어하고 싶은 영역의 의존성을 역전시켜 보면 좋을 것 같습니다. 체스 미션을 수행하던 중 이런 리뷰를 받았었습니다. 왜 의존성 역전을 제안 하셨을까? 또 어떤 장점이 있을까? 기존 코드는 이러했습니다. public class Board { private static final List INITIAL_BOARD = List.of( "RNBQKBNR", "PPPPPPPP", "........", "........", "........", "........", "pppppppp", "rnbqkbnr" ); private final Map board; private int turnCount; private Board(Map board, int turnC..
· Java
블랙잭 미션을 수행하면서 이런 피드백을 받았었습니다. 돈과 관련된 건 BigDecimal을 사용해 보면 좋을 것 같습니다! 왜 int나 double로 연산하면 안 되는 걸까요? 직접 두 눈으로 확인해 보겠습니다. double vs BigDecimal 간단한 테스트를 먼저 해보겠습니다. 잔돈을 구하는 간단한 로직입니다. !!! 테스트는 실패합니다. 눈앞에서 소중한 `0.00000000000000002`가 사라졌습니다. BigDecimal으로 해보면 어떨까요? 소중한 `0.00000000000000002`를 되찾았어요! double이 정확한 소수점을 표현하지 못한 이유는 부동소수점이기 때문입니다. 즉, 정확한 값이 아닌 근사치 값으로 표현되고 있어 계산에 오차가 생겼던 것입니다. BigDecimal BigD..
· Java
1주 차 자동차 미션을 진행하면서 주 생성자/부 생성자 패턴에 대한 피드백을 받았었습니다. 생성자에도 패턴이 있다는 사실 알고 계셨나요?🤔 수정 전) 생성자 각각 초기화하는 상황 두 개의 오버로딩된 생성자가 보이네요. `name`만 인자로 받는 생성자와 `name`과 `movedDistance`를 함께 받는 생성자가 있습니다. public class Car { private final String name; private final int movedDistance; public Car(String name) { this.name = name; movedDistance = 0; } public Car(String name, int movedDistance) { this.name = name; this.mo..
· Java
사다리 타기 미션을 수행하면서, 이런 밑줄을 자주 마주하게 됐습니다. 처음에는 `인텔리제이는 인텔리전트하니까~`라는 이유만으로 변경을 했었습니다. 정말 그럴까요? 그렇다면, 질문! 변경 후 다가올 파급효과에 대해 알고 있나요? Record가 뭔가요? 우선, Record 클래스에 대해 간단하게 정리해 보겠습니다. Java 16부터 공식 기능으로 채택 불변(immutable) 객체를 쉽게 생성해 주는 클래스의 한 종류 record 필드에 인스턴스(instance) 변수를 선언할 수 없고, 정적(static) 변수만 가능 abstract로 선언 불가 레코드와 컴포넌트는 암시적으로 final로 선언 getter, toString, equals, hashCode 자동 생성 Convert to a Record는 리..
_JoJo
'Java' 카테고리의 글 목록