본문 바로가기
반응형

분류 전체보기138

[이펙티브 자바] 아이템 1 - 생성자 대신 정적 팩터리 메서드를 고려하라 나는 주로 회사에서 DTO 를 생성할 때 정적 팩터리 메서드 방식으로 개발했었다. 사실 메서드 명으로 어떤 역할을 하는지 표현이 되니까 사용했지, 생성자 방식에 비해 어떤 장단점이 있는지는 명확히 모르는 상태였다. 책을 보면서 개념을 정리해보자. 정적 팩터리 메서드의 장점 1. 이름을 가질 수 있다. 생성자를 사용한 경우 정적 팩터리 메서드를 사용한 경우 아래의 경우가 확실히 메서드의 역할을 잘 설명한다. 참고로 책에서 시그니처에 대한 말이 나와서 이게 뭔지 이해가 안갔는데, 블로그를 검색해보니 ‘메서드 명 + 파라미터’ 를 합친 말인 것 같다. 즉, 메서드 명과 파라미터가 같은 경우, 같은 시그니처이다. (리턴 타입과 예외 등은 달라도 무방하다) 참고 : Java Method Signature :: 한.. 2023. 3. 14.
네트워크 본 풀이는 java 언어를 사용하였습니다. 문제 보러가기 풀이 문제가 잘 이해가 안되었었는데, 컴퓨터가 하나의 선으로 연결되어 있어야지만 1개의 네트워크로 인정된다. 즉, 아래의 경우는 2개의 네트워크가 된다. 컴퓨터 한 대가 어디까지 연결되어 있는지 끝까지 탐색해야 하므로, 깊이 우선 탐색인 DFS 를 사용했다. DFS 는 재귀나 Stack 을 이용해서 풀 수 있는데 나는 재귀를 이용했다. 코드 public class Solution { public static final int CONNECT = 1; public int solution(int n, int[][] computers) { int answer = 0; boolean[] visited = new boolean[n]; for (int i = .. 2023. 3. 10.
인텔리제이에 Google Formatter 를 적용해보자! 인텔리제이 기본 Formatter 도 쓸만하지만 약간 불편한 부분이 있어 유명한 Formatter 중 Google Formatter 를 적용해보도록 하겠다. Google Formatter 다운로드 먼저 Formatter xml 파일을 다운받는다. styleguide/intellij-java-google-style.xml at gh-pages · google/styleguide · GitHub IntelliJ Formatter 적용 command + , -> Editor > Code Style 탭으로 들어간다. 그 후 아래와 같이 다운받은 XML 을 import 한다. APPLY -> OK 시 적용 완료 이후에는 Command + Option + L 을 누르면 현재 위치의 코드가 구글 스타일로 변환됨. 주.. 2022. 12. 21.
if Kakao dev 2020 - 카카오 대 장애 회고 정리 원인 분석 데이터센터 간 이중화 미흡 일부 시스템이 판교 데이터센터에서만 설치되어 있어 이를 사용하는 서비스들의 복구가 늦어짐 카카오 로그인, 카카오 사진 전송 기능 등이 여기에 속함 하나의 데이터 센터에서 장애가 발생하면, 다른 데이터 센터로 자동 전환하는 시스템이 작동해야 하는데, 해당 시스템도 판교 데이터 센터에서만 존재했음 -> 수동 전환 작업으로 늦어짐 운영 관리 도구의 이중화가 부족 컨테이너 이미지를 저장하고 관리하는 시스템이 화재 여파로 사용할 수 없게 됨 이중화 전환 후 가용 자원 부족 판교 데이터 센터 전체를 대신할 만큼의 가용 자원이 확보되지 않아, 판교 데이터 센터가 복구될 때 까지 해결이 늦어짐 장애 복구를 위한 인력이 부족 재발 방지를 위한 대책 판교 데이터 센터 내에서만 32,0.. 2022. 12. 7.
우아한 테크코스 프로 - 프리코스 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.