다른 사람들의 리뷰에서 배운 점입력값에 대한 검증 책임입력값 검증의 책임을 어디에 두어야 할지 정말 많이 고민했었다. 처음에는 `InputValidator`을 통해 입력값이 비었는지를 검증했고, 이 검증은 `Controller`에서 수행하도록 했다. 이후 입력값은 모두 도메인 객체로 넘겼는데, 이는 원시값 포장을 위해서였다. "양수여야 한다" 같은 규칙은 비즈니스 로직으로 보고 도메인에서 처리했다. 파싱 과정도 비슷했다. 입력값을 문자열 그래도 생성자에 넘기고, 생성자 내부에서 해당 값을 알맞은 타입으로 변환하거나 형식을 검증하도록 했다. 다만, 입력을 `split`해야 하는 등 복잡한 파싱 로직의 경우에는 도메인 안에 넣는 건 책임이 과하다고 생각해 `InputParser` 클래스를 따로 분리했고, ..

전체 글
NsTest전체 코드package camp.nextstep.edu.missionutils.test;import camp.nextstep.edu.missionutils.Console;import org.junit.jupiter.api.AfterEach;import org.junit.jupiter.api.BeforeEach;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.OutputStream;import java.io.PrintStream;import java.util.NoSuchElementException;public abstract class NsTest { private PrintStr..
·Java
Java 14 이전에는 보일러플레이트 필드와 메서드를 가진 클래스를 작성해야 했으며, 이는 사소한 실수와 혼란스러운 의도를 초래할 수 있었습니다.Java 14가 출시되면서, 이제 이러한 문제를 해결하기 위해 레코드를 사용할 수 있게 되었습니다. 보일러플레이트 : 최소한의 변경으로 여러 곳에 재사용되며 반복적으로 비슷한 형태를 띄는 코드, 강철로 찍어내는 것처럼 최소한의 수정으로 여러 곳에서 자주 반복되는 코드 목적데이터베이스 결과, 쿼리 결과 또는 서비스에서 받은 정보를 단순히 저장하기 위해 클래스를 작성하는데, 이 때 대부분의 경우에 불변 객체를 사용한다. 불변 객체를 사용하게 됨으로써 내부 필드 값의 불변성을 보장해 주어서 유지보수에서 많은 이점을 챙길 수 있다. 이를 달성하기 위해 다음과 ..
·책
시작객체지향 프로그래밍이란 현실 속에 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업이다. 따라서 그 결과물인 객체지향 소프트웨어는 실세계의 투영이며, 객체란 현실 세계에 존재하는 사물에 대한 추상화라고 한다. 그러나 실세계의 모방이라는 개념은 객체지향의 철학적인 기반을 설명하는 데는 유용하지만 유연하고 실용적인 관점에서 객체지향 분석이나 설계를 설명하기에는 한계가 있다. 객체지향의 목표는 실세계를 모방하는 것이 아니라 오히려 새로운 세계를 창조하는 것이다. 즉, 소프트웨어 개발자의 역할은 현실을 복제하는 것이 아니라 고객과 사용자를 만족시킬 수 있는 신세계를 창조하는 것이다. 그런데 왜 여전히 객체지향을 실세계와 비교하려 할까?이는 객체지향의 다양한 측면을 이해하고 학습하는 데 ..
자바에서 객체를 만드는 가장 기본적인 방법은 `new` 키워드와 함께 생성자를 호출하는 것이다. 그러나 Joshua Bloch는 Effectvie Java에서 이렇게 말한다. "생성자 대신 정적 팩토리 메서드를 고려하라." 즉, 객체를 만드는 방식 자체를 메서드로 추상화하라는 의미입니다. 정적 팩토리 메서드란?생성자(Constructor)public class Car { private final String name; private int position; public Car(String name) { if (name == null || name.trim().isEmpty()) { throw new IllegalArgumentException("자동차 이름..
개요모듈: `java.base`패키지: `java.lang`클래스: `Enum>`타입 매개변수: `E` - 열거형 하위 클래스의 타입구현된 모든 인터페이스: `Serializable`, `Comparable`, `Constable`Java Enum은 Java 5에서 처음 도입된 특별한 클래스 타입으로, `java.lang.Enum` 클래스를 확장한다. Enum을 사용하면 코드의 가독성을 높이고, 컴파일 타임에 값이 검증되도록 만들어 안전한 코드를 작성할 수 있다. 모든 자바 열거형(`enum`) 클래스의 공통 부모 클래스이다.즉, 자바에서 우리가 `enum`을 선언하면 이는 컴파일 시 자동으로 `java.lang.Enum` 클래스를 상속한 자식 클래스로 변환된다. 예를 들어 다음과 같다.public en..
