반응형

java 23

[JAVA] Cache를 이용한 재사용으로 성능을 높이자

Cache(캐시)란, 자주 사용하는 데이터를 복사해놓은 임시 장소를 의미한다. 알고리즘에서 Dynamic Programming (DP)를 공부했다면 이해하기 수월할 수 있다. 나는 Cache를 이용하여 성능을 높이는 방법을 알고리즘 문제풀이에서만 사용해왔고, 실제 JAVA 개발에선 사용해본 적이 거의 없었는데, 이번에 우아한테크코스 미션을 통해서 캐싱을 할 기회가 생겨서 기록해보려 한다! 블랙잭 미션에서 캐싱이 필요한 이유 블랙잭 룰을 알고 있는가? 딜러와 플레이어들이 카드 (2~10, J, K, Q, A)를 가지고 카드들의 점수 합과 카드 개수로 승부를 겨루는 게임이다. 블랙잭에서의 카드 개수는 총 52개 (4개의 문양 * 13개의 숫자/알파벳)으로 이루어져 있으며, 참가자들은 이 카드들을 랜덤으로 나..

[220311][JAVA] 루키와 파랑과의 3인페어 협업미션 회고

이번 주에도 어김없이 페어 협업미션이 시작됐다. 나의 팀원은 누구일까 설렘반 긴장반으로 결과를 확인해보았다. 한번도 해보지 않은 3인 페어로 미션을 진행하게 되었다! 좋은건지 안좋은건지 예상이 되지 않아 조금 걱정도 됐지만, 페어들과 오프라인 일정을 잡으면서 서로 배려해주는 느낌을 받아 이번 미션도 크게 걱정없이 진행할 수 있겠다는 생각이 들었다 :) 3인페어의 장단점 3인 페어의 장점으론 보다 재밌게 소통하면서 개발할 수 있다는 점! 서로 얘기할 거리도 많고, 팀원들이 누구였는지, 자소서를 어떻게 썼는지, 평소에 어떤 개발을 해왔는지 수다떨면서 더 친해질 수 있었다. 3인페어다 보니 서로 주제가 끊임없이 많이 나오고, 대화가 끊기지 않아 더 친해질 수 있었던 듯 하다 :) 협업 마지막 날에는 파랑 크루..

[220305][JAVA] 로또 미션 리뷰 피드백을 통해 배운 점

2월 말부터 현재까지 2주동안 로또 미션을 진행했다. 로또 미션은 총 두단계로 나뉘어져 있으며, 1단계는 로또(자동) 기능을 페어와 함께 구현하는 것이고, 2단계는 로또(수동) 기능을 혼자 추가하고 리팩토링하는 과정을 거치는 것이다. 이번 미션에서 리뷰어 던의 피드백을 받으면서 배우고 느낀 점을 적어보려 한다. 전체 리뷰 피드백 및 내 코드는 여기서 볼 수 있다. https://github.com/woowacourse/java-lotto/pull/418 [2단계 - 로또(수동)] 케이(김태현) 미션 제출합니다. by kth990303 · Pull Request #418 · woowacourse/java-lotto 던, 안녕하세요! 2단계에서도 잘 부탁드립니다 :) 수동 미션을 추가하면서 변경에 유연한 코..

Collections.EMPTY_LIST vs Collections.emptyList() 무엇이 다를까?

java를 사용한다면 빈 객체를 넘겨줘야할 일이 한번쯤은 발생할 것이다. 이 때, null을 넘겨주는 것은 굉장히 위험하니 빈 list를 넘겨줘야 되는 경우가 많이 발생한다. (아이템 54. null이 아닌, 빈 컬렉션이나 배열을 반환하라) 이 경우, 우리는 두 가지 선택지가 존재한다. Collections.EMPTY_LIST를 쓸지, Collections.emptyList()를 쓸지. 전자의 경우(EMPTY_LIST 사용) 빈 객체를 넘겨주기 위해 EMPTY_LIST 상수값을 넘겨주었다. 이제 테스트를 돌려보자. 아래와 같은 경고가 발생한다. uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 형변..

null을 반환하지 말고 빈 객체, 또는 Optional을 반환하자

우아한테크코스 미션을 진행하면서, 그리고 이펙티브 자바를 읽으면서 null 반환의 위험성을 알게 됐다. 로또 미션을 진행하면서 로또 구매 방법에는 자동, 수동이 존재한다. 수동으로 구매할 것이라면 구매할 로또 번호들을 입력하고, 구매하지 않을 것이라면 생략해주자 수동 로또를 구매할 개수를 입력받을 때, 0이 아닌 특정 자연수값이라면 번호를 List에 담은 객체를 넘겨주면 되지만, 0이 입력됐을 경우, 두 가지 방법이 존재한다. null을 반환해준다. 빈 객체(Collections.emptyList())를 반환해준다. 1번 방법은 위험한 방법이다. null을 반환해줄 경우, 이를 사용하는 프로덕션 메소드에서 null일 때에 따로 처리하는 로직을 추가로 만들어주어야 한다. 그렇지 않을 경우, 우리를 자주 괴..

[220225][JAVA] 크리스와 페어 협업미션을 통해 배운 점 (로또(자동) 미션)

로또 1단계 미션을 크리스와 함께 진행하였다. 크리스는 보이는 라디오에서도 나와 같이 활동했고, 회식도 함께 진행한 덕에 서로 편하게 소통할 수 있었으며, 거주지도 서로 가까워 페어 미션동안 오프라인으로 만나면서 진행하였다. 이번 시간에도 페어에게 정말 많은 걸 배울 수 있었고, 크리스에게 java 개념들과 특정 구조에 대한 이점을 배울 수 있었다 :) 정규식 성능 개선 그 동안은 정규식 String만 따로 위에 빼준 다음에, String.matches()로 정규식을 비교해주었다. 그러나, String.matches()를 이용할 경우 아래와 같은 작업이 발생한다. matches 과정마다 Pattern.compile이 발생하는데, 이 때 Pattern.compile이 컴파일 과정에서 성능을 좀 많이 잡아먹..

[220211][JAVA] 페어 협업미션 리뷰어의 피드백_문자열 덧셈 계산기

저번에 알렉스와 함께 페어 프로그래밍을 진행한 '문자열 덧셈 계산기', '자동차 경주 미션'이 벌써 피드백이 올라왔다! 리뷰어님(이하 미르)께서 새벽 2시에 피드백해주셨던데, 미르의 성실함에 감탄하지 않을 수 없었다... 전체 피드백 내용은 https://github.com/woowacourse/java-racingcar/pull/256 에서 볼 수 있다. [1단계 - 자동차 경주 구현] 케이(김태현) 미션 제출합니다. by kth990303 · Pull Request #256 · woowacourse/j 선배님 안녕하세요! 우테코 4기 케이입니다. 열심히 배우겠습니다. 잘 부탁드립니다! 미션을 진행하면서 궁금했던 점이 있습니다. CarNameValidator 클래스에서 조건문 내부에 name.isBla..

[220210][JAVA] 알렉스와의 페어 협업미션을 통해 배운 점

오늘은 우아한테크코스 4기 활동이 본격적으로 시작된 두번째 날이다. 오전에 데일리 미팅을 진행하고, 오후에는 스터디룸을 대여해서 알렉스와 함께 하루종일 페어 미션을 진행하였다. 알렉스는 코딩 경험이 풍부하여 많은 부분에서 배울 점이 많았으며, 굉장히 친절하신 형이었어서 재밌게 작업하면서 많은 점을 배울 수 있었다. 오늘은 페어 프로그래밍을 통해 배운 점을 기록해보려 한다. 1. java.lang.String 클래스의 isEmpty()와 isBlank() 차이 자동차 경주 미션을 진행하면서, 자동차 이름이 공백일 때와 빈 문자열일 때 예외처리를 해주어야 하는 상황이 발생했다. 이 때 String의 isBlank() 메소드를 사용하면 빈 문자열일 때 뿐만 아니라 공백만 포함돼있을 때도 true를 리턴해준다...

[211219] 유스콘 2021 웨비나 컨퍼런스를 듣고 왔다

우아한형제들, 인프랩, 넥스트스탭에서 주최한 유스콘 2021 웨비나를 듣고 왔다. 마침 어떻게 공부할지 고민이 많기도 했고, 웨비나 들은 경험이 많이 없기도 했으며, 스프링과 java 웨비나라서 한 번 들어보는 것도 좋겠다 싶어서 참여하였다. https://frost-witch-afb.notion.site/YOUTHCON-21-365e94c3df3443e5b1322520a8b1a2ef YOUTHCON'21 유쾌한 스프링방에서 탄생한 유스콘은 👨‍🎓 젊은 개발자와 👨‍🏫 선배 개발자가 함께 가치 있는 기술에 관한 정보와 경험을 공유하는 콘퍼런스입니다. 여기서 발표하는 사람들을 잘 기억 frost-witch-afb.notion.site 다 듣지는 않았고 일부 참여하였는데 간단하게 요약 및 느낀점을 포스팅하겠..

[211206] 우아한테크코스 프리코스 2주차 후기

1주차 후기: https://kth990303.tistory.com/220 이번 2주차 미션은 3기 기수분들도 작년에 진행했던 '자동차 경주 게임'이었다. 자세한 요구사항은 https://github.com/woowacourse/java-racingcar-precourse 로 들어가면 확인할 수 있다. 여러 대의 Car 객체를 이용하여 클래스 분리 능력을 키워주려는 목적이 보이는 듯했고, 에러 처리 또한 try-catch를 이용하면서 indent를 보다 빡세게 제한하겠다는 의도가 보이는 미션이었다. 1주차 때와 다른 점이라면, 게임이 끝난 후 재시작을 할 필요가 없다는 점. 내 코드는 https://github.com/woowacourse/java-racingcar-precourse/pull/356 여기..

반응형