본문 바로가기

우아한테크코스

(33)
[코드리뷰 정리] Level 1. 체스 미션 - JDBC 2021-04-10글 JDBC (Java DataBase Connectivity) JDBC는 DB에 접근할 수 있도록 Java에서 제공하는 API로, 모든 Java의 Data Access 기술의 근간이다. 모든 Persistence Framework는 내부적으로 JDBC API를 이용한다. JDBC를 통한 DB 연결 1. 드라이버 로드 try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { System.err.println(" !! JDBC Driver load 오류: " + e.getMessage()); e.printStackTrace(); } 제공되는 클래스를 인스턴스화해서 내부적으로 저장해 메모리에 드..
[코드리뷰 정리] Level 1. 체스 미션 -DTO 이번 체스 미션에서는 웹 적용을 하면서 새롭게 배운 개념들이 너무 많았다. 때문에 이번 미션을 진행하면서 새로 배운 개념들과, 휴가 주신 피드백을 정리하는 방안으로 기록해야겠다 ✍️ step1에서의 DTO 사실 DTO의 개념은 대략 알고 있으나, 전 미션까지는 DTO의 필요성을 잘 못느끼고 있어서 사용하지는 않았었다. 이때 같은 경우는 현재 기물들을 나타내는 Pices 객체들만이 존재할 뿐인데 View에서는 64개의 position에 대한 정보를 출력하기 위해 Pieces의 메소드를 통해pieces.findByPosition(CACHE.get(xy)); 로 도메인에 대한 의존성이 생기고 있었다. 그래서 이를 제거하기 위해 휴의 리뷰대로 DTO를 만들어 View에 필요한 데이터들을 전달해주기로 하고 이 방..
📝 객체지향 설계 강의 노트 2021-03-23글 랜덤넘버는 구현체이니까 Number로 받자 이러면 모두가 움직이는데 ? 의존성 주입 DI 스프링 프레임 워크는 DI를 구현하도록 강제되어 있다. 의존성 주입을 위해서는 스프링을 써야한다는 말이 있는데 그렇지 않다. 스프링 프레임 워크를 쓰지 않은 채로 DI를 해본 적이 있습니까 ? 생성자 의존성 주입 ❓ randomNumbers를 객체의 변수로 두고있는데, move()의 인수로 넘겨받는 것은 어떨까요? -> 상관 없음 move 메서드를 사용할 때마다 객체를 생성해야하니 인자가 많아졌을 떄는 생성자를 전달하는 것이 좋을 수도.. ❓ 의존성 주입을 위한 setter는 괜찮나요 ? -> 어떤 객체냐에 따라 다른데, 지금은 Cars의 상태 데이터를 가지고 있는 현제 예시에서는 final로 ..
📝 엘레강트 오브젝트 뽀개기 1 강의 정리 2021-03-20글 강의를 들으며 정리하기 ✍️ 엘레강트 오브젝트 문자열과 원시값을 포장해라 반환 값은 모두 일급 컬렉션 인자의 값으로 null을 절대 허용하지 마세요 public Iterable find(String mask) { if (mask == null) { // . } else { // . } } null을 체크하는 로직을 구현하는 것은 객체를 무시하는 것이다. mask 객체를 존중했다면 조건의 존재 여부를 객체 스스로 결정하게 했을 것이다. 이를 위해 원시 값과 문자열을 포장하면 null을 허용하지 않을 수 있다. 이 부분이 randomNumber를 무시하는 것이 아닌가. randomNumber를 객체로 만든다. (원시값 포장). 객체에게 메시지를 보내도록 리팩토링한다. 테스트 가능하게 오..
[코드 리뷰 정리] Level 1. 블랙잭 2021-03-15글 Controller에 있는 도메인 로직 게임 진행을 위해 Controller에 많은 역할을 구현했었다. 위 피드백을 받고 BlackjackGame이라는 객체를 만들어 게임의 진행을 하도록 구현했다. 각각의 플레이어들의 게임을 진행에 Input과 Output이 연결되어 있어서 처음 리팩토링에서는 BlackjackGame에서 플레이어들을 꺼내오고, 플레이어 하나 하나마다 게임을 진행하게 되었다. BlackjackController 일부 private void askWantToHit(Player player, BlackjackGame blackjackGame) { while (isAbleToAskHit(player, blackjackGame) && Answer.of(InputView.in..
[코드 리뷰 정리] Level1. 로또 2021-03-01글 1단계 피드백 객체인 Controller LottoFactory를 인스턴스 변수로 두지 않았던 이유는 Controller는 객체가 아니라 데이터를 가지면 안된다고 생각하고 있었다. 당연히 Domain만 객체라고 생각했었다. (모르는건 부끄러운게 아니다 🥲) 하지만 생각해보니 Controller도 도메인과 뷰를 이어주는 동시에, 객체를 생성하는 책임이 있다. 인스턴스 변수로 가지고 있게 된다면 getLottoTickets 메소드에서 매번 객체를 생성할 필요가 없다. 일단 이 코드에서 중요한 점은 어차피 지금 로또를 생성하는 책임을 컨트롤러에서 하고 있었으니 "불필요한 객체 생성을 방지하도록 인스턴스 변수로만들어서 재활용하자"가 목적이다. 반영한 커밋 반복되는 상수 처리 미션 데드라인을..
[강의] Level 1. TDD 강의 정리 2021-02-20 이번 로또 미션을 구현하면서 페어와 TDD를 연습하면서 강의에서 들었던 모든 이점들을 느낄 수 있었다. 사실 완벽하게 TDD를 진행했다고 자신할 수 없으나, 강의 내용에서 들었던 이점들을 페어와 함께 TDD를 진행하면서 경험할 수 있었다. 여기서는 TDD 강의 내용을 들으면서 정리한 것을 조금 가공해서 정말 간단히 기록한다 ✍️ TDD, 리팩토링이란? TDD(Test Driven Development) - 테스트 주도 개발 프로덕션 코드 프로그램 구현을 담당하는 코드 테스트 코드 프로덕션 코드가 정상적으로 동작하는지 확인하는 코드 TDD란? 일반적으로는 프로덕션 먼저 구현 후 테스트 였는데 이건 테스트를 먼저 한 후 프로덕션을 개발한다. TestFirstDevelopment + 리팩토..
[코드 리뷰 정리] Level 1. 자동차 경주 게임 2021-02-15 글 우테코 레벨 1 난생 처음으로 코드리뷰를 받게 되었다. 사실 TDD도 처음이고, 누군가 내 코드를 읽고 피드백 받는 것 또한 처음인데 이런 기회가 정말 감사하면서도 떨렸던 첫 리뷰 요청이었다 👀 코드 리뷰를 받으니 내가 모르는 부분과 나의 실수들을 명확히 볼 수 있었다. 또한 리뷰를 보니 나의 잘못된 코딩 습관도 발견할 수 있었다. 덕분에 고민하고 공부해봐야 할 것들을 알 수 있어 정말로 나에게 너무나도 큰 도움이 되었다 🙇‍♂️ 피드백 받은 부분에서 계속 머릿 속에 박기 위해 몇 가지는 정리하고 넘어가는 것이 좋을 것이라 판단이 되었다. 불필요한 객체 생성을 피하라 Pattern 객체는 비싸다 나는 지금껏 올바른 숫자인지, 문자인지 등을 검증할 때 대부분 Pattern 객체를 정..