자바

JAVA

[JAVA] 크리스마스 프로모션을 구현하면서 배운점

마지막 미션은 새로운 주제의 미션이었다. 이번에도 그전과 동일하게 회고의 느낌으로 작성할 예정이다. 내가 고민한 점과 적용한 점 수정했던 부분 및 이유를 작성할 것이다. 고민거리 이번에 enum을 적용해야 하는 상황이 거의 필수적으로 일어났다고 생각했다. 그래서 이를 적용했는데, 문제는 얼마나 나눌 것인가에 대한 고민이었다. 처음에는 카테고리마다 전부 나누고 메뉴판에서 통일하는 방식을 생각했다. 하지만 이러한 방법은 복잡도가 올라간다는 생각도 했고, 입력으로 들어온 값을 찾기가(이름으로 매칭되는 값) 번거롭다는 느낌을 받았다. 물론 분리가 잘되어있다는 생각이 들긴 함. 그래서 한눈에 보기에도 편하고 매칭되는 값을 찾기도 편하게 전부 모아서 관리하였다. 물론 정말 확장 가능성도 생각한다면 다른 방법이 더 ..

JAVA

[JAVA] 로또를 구현하면서 배운점

우아한테크코스 6기 프리코스 3주 차는 로또였다. 이번에도 그전과 동일하게 회고의 느낌으로 작성할 예정이다. 내가 고민했던 부분과 적용한 점 수정했던 부분을 이유로 작성할 것이다. 미션에서 Randoms.pickUniqueNumberInRange를 사용해야 했기에 이를 먼저 분석했다. validate를 통해 검증을 거치는데, 이때 validate 메서드의 이름이 validateRange로 되어있었다. 네이밍에 대한 고민이 많던 나에게는 큰 도움이 되었다. 범위 내의 숫자를 담고 셔플을 통해 섞은 다음 필요한 크기로 잘라내는 로직이었다. 이런 역할 분리를 보고 각각의 메서드가 하나의 일만 수행하며 적절히 분리되어 있다고 느꼈다. 그동안 정적 팩토리 메서드를 사용하는 모습과 거의 동일하여 이대로 진행하면 되..

JAVA

[JAVA] 자동차 경주를 구현하면서 배운점

우아한 테크코스 6기 프리코스 2주 차는 자동차 경주였다. 이번에도 저번 숫자 야구 게임에 이어서 회고의 느낌으로 작성할 예정이다. 내가 했던 고민과 수정했던 부분에 대한 이유를 주로 작성할 것이다. 고민거리 미션 중에 시도 횟수만큼 반복을 하는데, 이때 이 시도 횟수를 어떻게 처리할지에 대한 고민을 했다. 정확히 말하자면 나는 시도 횟수는 양의 정수여야 한다고 판단했다. 그렇다면 이 값에 대한 검증이 존재해야 하는데 이를 어디서 진행할 것인가? 나는 총 3가지를 고민했다. 첫 번째는 InputValidator였다. 즉 inputView를 받자마자 이를 예외를 검증하는 것이다. 하지만 이는 단순히 시도 횟수만을 위한 검증이라는 생각이 들기도 하였고, InputValidator는 빈 값만 체크하도록 전체 ..

JAVA

[JAVA] 숫자 야구 게임을 구현하면서 배운점

이번에 우아한 테크코스 6기 프리코스에서 숫자 야구 게임을 구현해 보았다. 공통 피드백도 나왔기에 회고의 느낌으로 작성할 예정이다. 평소에도 객체지향에 관심이 많았고, 이를 충분히 적용하려고 노력하였다. 하지만 역시 코드에 정답은 없기에 미션을 수행하면서도 많은 고민을 하였다. 우선 구현에 사용하도록 외부 라이브러리가 포함되어 있었다. 이를 분석하고, 사용하기 위해 클래스 내부를 뜯어보았다. 내부에서 ThreadLocalRandom를 사용하여 랜덤 값을 생성하는데, ThreadLocalRandom를 찾아보니 동시성 문제에도 성능 저하 없이 사용할 수 있다는 특징이 있었다. Console의 경우에는 scanner를 싱클톤으로 사용하여 효율적으로 리소스를 활용하는 모습이었다. 살아있는 문서 가장 처음 목표로..

PS/알고리즘 문제풀이

[백준] 9328번 열쇠(java)

https://www.acmicpc.net/problem/9328 9328번: 열쇠 상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열쇠가 www.acmicpc.net 이번에도 bfs 문제이다. 이와 비슷한 문제를 리트 코드에서도 풀었던 기억이 있는데, 그에 비하면 쉽다고 생각한다. 이유는 최단 거리를 찾는 문제는 아니기에 정보를 공유할 수 있기 때문이다. 핵심 우선 최단거리를 찾는 문제가 아니라 찾을 수 있는 열쇠의 수를 찾는 것이다. 이전에 bfs 특성상 어떤 열쇠를 먼저 먹고, 어떤 식으로 이동해야 가장 빠르게 도달할 수 있는지를 찾는 문제라면 복잡해질 수 있다.(아래..

PS/알고리즘 문제풀이

[백준] 13460번 구슬 탈출2(java)

https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' www.acmicpc.net 조금 난도가 있는 bfs 문제이다. 핵심 중요하다고 생각하는 부분은 빨간 구슬과 파란 구슬이 움직일 때 둘의 위치에 따라 먼저 움직이는 순서가 달라져야 한다는 것이다. 만약.. RB가 있을 때 왼쪽으로 움직인다면 R -> B순으로 움직여야 한다. 정답 코드 import java.util.LinkedList; import java.util.Queue..

JAVA

[JAVA] 체스를 구현하면서 배운점

저번 블랙잭을 이후로 이번에는 체스를 구현해 보았다. 우선 설계를 조금 디테일하게 잡아서 진행하였다. 물론 첫 설계를 끝까지 가져가지는 못했다.. 중간에 추가된 부분이 조금은 있다. 그래도 처음보단 설계하는 실력도 늘었다고 생각한다. 진행하면서 고민하고 배운 것을 정리하였다. 고민했던 것 우선 첫 번째 고민은 각각의 기물들의 위치와 기물을 Map으로 관리하였다. 이때 위치를 단순하게 String으로 관리하려 했다. 하지만 이럴 경우 예외처리를 하는 경계도 애매해지고, 관리하기가 힘들 것 같다고 판단하였다. 그래서 위치 즉 Location도 객체로 관리하여 예외를 처리하도록 하였다. 위치도 더욱 나눌 수 있기 때문에 행과 열을 체스의 용어에 맞게 분리하여 코드를 작성했다. 또 다른 고민으로는 기물이 없는 ..

PS/알고리즘 문제풀이

[LeetCode] 1601 - Maximum Number of Achievable Transfer Requests(java)

https://leetcode.com/problems/maximum-number-of-achievable-transfer-requests/ Maximum Number of Achievable Transfer Requests - LeetCode Can you solve this real interview question? Maximum Number of Achievable Transfer Requests - We have n buildings numbered from 0 to n - 1. Each building has a number of employees. It's transfer season, and some employees want to change the building they re leetc..

JAVA

[JAVA] 블랙잭을 구현하면서 배운 점

평소에 자바를 어느 정도 잘 안다고 생각하였지만, 실제 어떠한 요구사항이 있었을 때 이를 구현하는데 생각보다 어렵다는 것을 느꼈다. 기본기가 매우 중요하고 자바를 이론으로 아는것과 실제 적용하며 몸으로 깨닫는 것은 매우 큰 차이가 있기에, 평소에도 도움을 많이 받는 친구에게 코드리뷰를 받으며 블랙잭을 구현해 보았다. 그 과정에서 내가 느끼고 배운 것을 정리하려고 이 글을 작성한다. 배운 점 기본적인 자바 컨벤션, 클린코드, 네이밍 평소에도 이론적으로는 어느 정도 알고 있다고 생각하였지만, 스스로가 많이 놓치고 있는 부분이었다. 개행을 어느 부분에서 해야 하고, 메서드 순서를 어떤 식으로 해야 하는지에 대해 무지했던 것이다. 우선 개행의 경우 변수를 선언할 때 접근자가 달라지거나 final 키워드의 유무에..

JAVA

[JAVA] 불변 객체를 사용해야 하는 이유

불변 객체(Immutable Object)란? 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체이다. 불변 객체는 read-only 메소드만을 제공하며, 객체의 내부 상태를 제공하는 메소드를 제공하지 않거나 방어적 복사(defensive-copy)를 통해 제공한다. Java의 대표적인 불변 객체로는 String이 있다. String name = "Immutable"; name.toCharArray()[0] = 'A'; System.out.println(name); //Immutable Java의 String은 불변 클래스이기 때문에 위와 같이 String 내부의 char형 배열을 얻어 수정하여도 반영이 되지 않는다. Java에서는 배열이나 객체 등의 참조(Reference)를 전달한다. 그렇기..

javajoha
'자바' 태그의 글 목록