본문 바로가기

Java27

Design Patterns - Factory Method 구체적으로 어떤 인스턴스를 만들지는 서브 클래스가 정한다 다양한 구현체(Product)가 있고, 그중에서 특별한 구현체를 만들 수 있는 다양한 팩토리(Creator)를 제공할 수 있다. 확장에 열려있고 변경에 닫혀있는 구조로 만들어보자 public interface ShipFactory { default Ship orderShip(String name, String email) { validate(name, email); prepareFor(name); Ship ship = createShip(); sendEmailTo(email, ship); return ship; } void sendEmailTo(String email, Ship ship); Ship createShip(); private void .. 2021. 11. 17.
Design Patterns - Singleton 인스턴스를 오직 한개만 제공하는 클래스 시스템 런타임, 환경 세팅에 대한 정보 등, 인스턴스가 여러개 일 때 문제가 생길 수 있는 경우가 있다. 인스턴스를 오직 한개만 만들어 제공하는 클래스가 필요하다. 싱글톤 패턴을 가장 단순히 구현하는 방법 public class Settings1 { private static Settings1 instance; private Settings1() { } public static Settings1 getInstance() { if (instance == null) { instance = new Settings1(); } return instance; } } 생성자를 private으로 만든 이유 : 외부에서 해당 인스턴스에 직접 접근을 막기 위해 getInstance(.. 2021. 11. 11.
Lotto - 3. 등수 매기기 LastWeekLotto public class LastWeekLotto { private final Lotto lastWeekLottoNum; private final int bonusNum; protected LastWeekLotto(List lastWeekLottoNum, int bonusNum) { this.lastWeekLottoNum = Lotto.createLotto(lastWeekLottoNum); this.bonusNum = bonusNum; } public static LastWeekLotto of(List lastWeekLottoNum, int bonusNum) { validateBonusNum(bonusNum); return new LastWeekLotto(lastWeekLottoN.. 2021. 11. 9.
Lotto - 2. Lottos (일급 컬렉션) / Shop Lottos public class Lottos { private final List lottos = new ArrayList(); private final int cost; public Lottos(int count, List manualLottoNums, int cost) { this.cost = cost; for (int i = 0; i < count; i++) { lottos.add(Lotto.createLotto()); } for (List manualLottoNum : manualLottoNums) { lottos.add(Lotto.createLotto(manualLottoNum)); } } public static Lottos createLottos(int count, int cost) { .. 2021. 11. 9.
Lotto - 1. Lotto 여름쯤해서 NextStep에서 하는 TDD, Clean Code with Java 12기에 참여했었다. 이 당시에는 자바를 이용해서 구현했는데 이번에 Kotlin으로 다시한번 구현해보았다. 이번 게시글에서는 기존에 구현했던 자바코드와 코틀린 코드가 어떻게 다른지 비교해보려 한다. 자바코드를 보고 코틀린 코드를 짠 것이 아니기 때문에 구현상 다른점이 존재합니다 Lotto 제일 처음부분인 Lotto 클래스이다. Lotto 클래스는 로또를 구매했을 때 하나의 번호 세트(6개의 번호)를 구현한 클래스이다. 이 Lotto 객체의 생성자는 직접 로또번호를 입력하는 경우, 자동으로 구매하는 경우 2가지가 있다. private static final List lottoRange = Stream.iterate(1, n .. 2021. 11. 7.
JPA - Cascade(영속성 전이) 영속성 전이 JPA에서 처리하는 Entity의 상태에 따라 종속적인 객체들의 영속성도 함께 처리되는 것이며 총 5개의 옵션이 있다. 이번 게시글에서는 PERSIST와 REMOVE에 대해 테스트해보려 한다. 테스트에 사용할 Entity들은 Team과 Member이며 OneToMany로 양방향 매핑되어있다. @Entity public class Team { @Id @GeneratedValue @Column(name = "team_id") private Long id; private String name; @OneToMany(mappedBy = "team") List members = new ArrayList(); ... } @Entity public class Member { @Id @GeneratedVal.. 2021. 6. 10.