목록개발/우아한테크코스 (8)
LALA's blog
public class ProfitResult { private final ParticipantProfit dealerResult; private final List playersResult; public ProfitResult(List players, Dealer dealer) { players = new ArrayList(players); List playersResult = calculatePlayersResult(players, dealer); this.dealerResult = calculateDealerResult(playersResult, dealer); this.playersResult = playersResult; } private List calculatePlayersResult(Lis..
프리코스 때부터 많이 듣던 피드백 매직 넘버를 사용하지 말아라. 값을 하드 코딩하지 말아라. 상수로 치환해서 사용해라. 이 피드백을 받고부터는 " 왠지.. 모든 매직 넘버나 출력/에러 메세지는 상수로 관리해야 할 것만 같아...! " 이런 고정관념을 가지고 있었다. 그래서 이번 로또 미션 1단계까지도 모든 매직 넘버나 출력/에러 메세지를 집착하듯 상수로 빼서 관리했었다. private static final String REQUEST_MESSAGE_INPUT_PURCHASE_MONEY = "구입금액을 입력해 주세요."; private static final String ERROR_MESSAGE_TYPE_OF_MONEY = "금액은 숫자가 아닐 수 없습니다."; private static final Str..
java.util.List Interface - 자바는 배열과 같은 데이터를 효과적으로 관리하기 위해 배열 대신 List 를 제공한다. - List 는 ArrayList, LinkedList 두 가지 종류가 있다. - 일반적으로 ArrayList 를 가장 많이 사용한다. - List 는 배열에서 지원하지 않는 많은 기능을 제공한다. - 지금까지 배열을 사용했다면 배열 대신 List를 사용한다. ArrayList - 배열을 감싸서 사용할 수 있도록 기능을 제공해준다. - Object[] - 일급 컬렉션이라고 볼 수 있다. - 사이즈도 동적으로 늘린다. - 인덱스로 접근할 수 있다. O(n) LinkedList - Node 들을 가지고 있다. - 앞 뒤가 연결되어 있다. - 연결만 하면 되기 때문에 사이즈를..
문자와 문자열 - 문자열(String) 은 자바 프로그램이 실행되는 동안 가장 많이 생성되는 객체이다. - 문자열은 객체이지만 각각의 문자의 나열로 구성된다. char capitalA = 'A'; // 문자 Strinng a = "abc"; // 문자열 == 문자의 배열 String b = new String("abc"); // 이와 같이 구현하지 마라. String 은 가장 많이 사용되는 객체이기 때문에 가장 최적화가 잘 되어있다. 🤔. 문자열들은 어디서 관리되는 될까? - Constant Pool 에 저장이 돼서 계속 재사용할 수 있게 된다. - 아래의 두 문자열은 같은 객체를 바라보고 있다. String string1 = "string"; String string2 = "string"; String..
1단계 자동차 경주 미션을 수행하면서 Layer 간 데이터를 주고받기 위한 DTO를 사용해보았다. 이번에 알게 된 DTO와 관련된 개념들을 정리해보려 한다! DTO 란? DTO(Data Transfer Object)로서 계층(Layer) 간 데이터 교환을 위해 사용하는 객체이다. 데이터 교환만을 위해 사용하므로 로직을 갖지 않고, getter/setter 메소드만 갖는다. 로직은 없고, 데이터를 담고, 꺼내는 getter/setter 메소드만 담는다. 이런 단순한 개념이면 너무 쉽겠지만..? 우리는 메타인지를 해야하니깐 😙 DTO를 사용했을 때 어떤 장점을 가지고 있는지, 어떻게 사용하는지 알아보도록 하자! 먼저 DTO를 사용하지 않고 직접 Model 객체를 전달했을 경우를 살펴보자. // Car.jav..
벌써.. 3주차, 그리고 프리코스가 끝이 났다. 😱 이번 과제는 이전 과제들에 비해 난이도가 확실히 높아졌음을 느꼈고, 그만큼 더 많은 생각과 고민을 하며 과제를 진행하게 됐다. 과제는 난이도가 높아졌는데, 이번 과제 기간동안은 하필 시험, 병원, 일 등 때문에 너무 바빴어서 시간이 많이 부족해서 아쉬움이 너무 남는다. 그래도 과제가 끝나고 꼭 더 리팩토링하고 적용해봐야겠다! 어려웠던 점 설계 과정은 여전히 쉽지 않았다. 🙃 처음 보는 enum 클래스를 사용해야 했다. getter를 지양하고 객체에 메세지를 보내는 방식으로 구현했다. 비즈니스 로직과 UI 로직을 분리하려 노력했다. enum 클래스 이번 과제에서는 enum 클래스를 사용해서 구현해야하는 요구사항이 있었다. enum 은 단지 타입이 같은 값..
벌써 프리코스 2주 차도 끝이 났다. 😱 이번 과제에서 주신 피드백을 적용하기 위해 많은 고민을 하고, 조금이라도 더 확신이 드는 코드를 작성하기 위해 노력했다. 어려웠던 점 설계 과정은 여전히 쉽지 않았다. 🙃 클래스를 분리하고, 어떠한 책임을 부여할지 결정하는 부분이 어려웠다. 의도가 드러나는 변수, 클래스, 함수명을 짓는데 많은 고민을 했다. 1차보다 README.md 문서를 자세하게 작성하려고 노력했다. Stream을 적용해 보았다. 클래스 분리 JAVA에서 지향하는 OOP를 고려하여 클래스를 다음과 같이 설계했다. Car 이름과 위치를 저장한다. 전진 혹은 정지한다. 가장 앞선 위치에 있는지 체크한다. CarRepository 입력받은 차들을 저장한다. 난수를 발생시킨다. 우승자를 계산한다. G..
프리코스 1주 차를 끝마쳤다. 🥶 처음 과제를 봤을 땐 어렵지 않은 것 같다고 느꼈는데, 계속 수정해 나갈수록 부족함도 느끼고 어려움도 느꼈던 과정이었다. 부족했던 점 JAVA 개발이 처음이라 문법이나 IntelliJ 사용이 익숙하지 않아 삽질하는 시간이 꽤 있었다. 기능 구현 목록을 정할 때 눈에 보이는 것들만 작성하기 바빴다. 설계를 먼저 하지 않고 기능을 구현하는데 집중했다. 모든 코드를 class 하나에 다 넣었다. 즉, 모든 데이터와 입력, 출력, 계산 수행을 한 class에서 하도록 했다. 자료구조를 비교해보지 않고 선택했다. 아래 코드를 보시다시피 제일 처음 기능을 모두 완성했을 땐 한 Class에 모든 기능을 구현했다. 사실 최근에 알고리즘 문제를 많이 풀다 보니 해당 과제를 알고리즘 문제..