반응형 객체지향9 Five Lines of Code - 4장. 타입 코드 처리하기 Five Lines of Code - 4장. 타입 코드 처리하기 if else 를 사용하지 말자 public play(User user) { if (user.getStatus == Status.RUN) { user.setStamina(user.getStamina - 1); } else if (user.getStatus == Status.WAIT) { user.setStamina(user.getStamina + 1); } } 위 코드에서 user status ‘ATTACK’ 이 추가되었다. public play(User user) { if (user.getStatus == Status.RUN) { user.setStamina(user.getStamina - 1); } else if (user.getStat.. 2023. 9. 22. [이펙티브 자바] 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 나는 주로 회사에서 DTO 를 생성할 때 정적 팩터리 메서드 방식으로 개발했었다. 사실 메서드 명으로 어떤 역할을 하는지 표현이 되니까 사용했지, 생성자 방식에 비해 어떤 장단점이 있는지는 명확히 모르는 상태였다. 책을 보면서 개념을 정리해보자. 정적 팩터리 메서드의 장점 1. 이름을 가질 수 있다. 생성자를 사용한 경우 정적 팩터리 메서드를 사용한 경우 아래의 경우가 확실히 메서드의 역할을 잘 설명한다. 참고로 책에서 시그니처에 대한 말이 나와서 이게 뭔지 이해가 안갔는데, 블로그를 검색해보니 ‘메서드 명 + 파라미터’ 를 합친 말인 것 같다. 즉, 메서드 명과 파라미터가 같은 경우, 같은 시그니처이다. (리턴 타입과 예외 등은 달라도 무방하다) 참고 : Java Method Signature :: 한.. 2023. 3. 14. 우아한 테크코스 프로 - 프리코스 2주차 1주차에 이어 2주차도 진행이 되었는데, 진행하면서 느낀점을 적어보려고 한다. 느낀점 Random 값을 어떻게 테스트해야할까? 나는 자동차에 관련된 부분을 Car 클래스가 담당하도록 하고 이동 거리에 대한 부분은 play() 메서드가 담당하도록 하였다. 움직일 수 있는 조건에 해당하면 거리를 1 증가시키게 해두었다. 거리는 Random 값으로 나온 수가 지정한 값 이상일 경우에만 증가할 수 있도록 하였다. 그러다보니 테스트를 작성할 때 Random 값을 고정할 수 없어 테스트를 돌릴때마다 성공, 실패 되어버리는 문제가 있었다. '어떻게 하면 Random 값을 테스트할 수 있을까?' 고민하다가 canMove 메서드 안에서 랜덤값을 생성하지 말고 아래와 같이 랜덤한 값을 바깥에서 생성한 뒤 파.. 2022. 10. 10. 우아한 테크코스 프로 - 프리코스 1주차 좋은 개발자로 한 단계 더 성장하고 싶다는 니즈가 계속 있었는데, 운이 좋게도 해당 시기에 우아한 테크코스 프로 과정을 모집 중이어서 바로 신청했다. 지금은 프리코스 과정을 통해 과제 미션을 진행하고 있는데, 과제를 진행하면서 느낀 점을 적어보려고 한다. 느낀점 indent depth 를 2가 넘지 않도록 구현한다 과제를 진행하면서 요구되는 기본 사항이 있었는데, 그중에 depth를 1까지만 허용한다.는 규약을 지키기가 어려웠다. 사실 실무에서는 depth에 대해서 깊은 고민 없이 구현했었기 때문에 더 어려웠던 것 같다. 일반적인 상황에서는 메서드 분리를 통해서 depth를 줄일 수 있었지만, 아래 코드에서 고민을 정말 많이 했다. Enum 의 값을 values() 로 순회하면서 state 가 일치하는 .. 2022. 10. 2. 2019 KAKAO BLIND RECRUITMENT 오픈채팅방 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 잘 생각해보면 유저의 아이디는 변하지 않고, 변하는 건 유저의 닉네임이다. 따라서 유저의 아이디 닉네임을 HashMap 으로 저장해놓고, 결과를 출력하기 전에 모든 record 를 순회하면서 HashMap 에 있는 유저의 닉네임으로 변경시켜준 후 결과를 출력하면 쉽게 풀수있다. 먼저 아이디, 닉네임을 저장 할 HashMap 을 하나 만들어준다. Map userIds = new HashMap(); 그 후 record 를 순회하면서 값을 체크해주는데, Leave 의 경우 2 단어 (행동, 아이디) 로 들어오기 때문에 닉네임을 임의로 빈 값으로 지정한다. for (String userInfo : record) { StringTokenizer st .. 2022. 7. 7. 토비의 스프링 3.1 - 1장 토비의 스프링 chap 1 이전에 토비의 스프링 1권을 읽다가 바쁘다는 핑계로 미뤄두었었는데, 한번쯤 정독해볼 시기인 듯 하여 다시 읽어보기로 하였다. 책은 Spring 으로 프로젝트를 구성했지만, 필자는 SpringBoot 를 사용하기로 하였다. DB 데이터베이스는 학습 목적이기 때문에 간단하게 H2 를 사용했다. H2 Database Engine 실습 코드 코드는 GitHub - gbeea1004/toby-spring: 토비의 스프링 실습 깃허브에 올려두었다. chap 별로 브랜치로 나눠두어서 실습하고자 하는 브랜치에서 진행하면 된다. UserDao p.56 에서 UserDao 를 만들어서 '회원가입'과 '회원조회' 기능을 만든다. 여기 코드에서 문제가 있는데, Conne.. 2022. 5. 25. 이전 1 2 다음