전체 글

Dev/Java

[Java] isPresent() vs. ifPresent()

회원가입 로직을 구현하던 중 ifPresent()를 사용하게 되었다. 나중에 요긴하게 쓸 것 같아 정리하려고 한다. isPresent() boolean 타입 Optional 객체가 값을 가지고 있으면 true, 없으면 false를 반환한다. ifPresent() void 타입 Optional 객체가 값을 가지고 있으면 실행, 없으면 넘어간다. 회원가입을 하는 과정에서 같은 이름이 있으면 ifPresent()를 사용하여 예외를 발생시키는 코드이다. 참고 https://sin0824.tistory.com/25

Dev/Spring

[Spring] @ResponseBody

인프런 김영한 선생님 스프링 입문 강의를 보고 정리한 내용입니다. @ResponseBody html에 나오는 바디 태그가 아니라 http body에 이 데이터를 직접 넣어주겠다는 의미 해당 어노테이션을 작성하면 ViewResolver 대신 HttpMessageConverter가 동작한다. 문자열인 경우 문자열 그대로 반환 (StringConverter) 객체인 경우 JSON 형식으로 반환 (JsonConverter / MappingJackson2HttpMessageConverter) 위처럼 리턴값을 작성하면 뷰 대신 문자열을 출력하며, 위처럼 리턴값이 객체이면 JSON을 출력한다. 주소창에 입력하면 이렇게 JSON이 반환된 것을 확인할 수 있다.

PS/백준

[백준] 4195번 친구 네트워크 (Python)

https://www.acmicpc.net/problem/4195 4195번: 친구 네트워크 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스의 첫째 줄에는 친구 관계의 수 F가 주어지며, 이 값은 100,000을 넘지 않는다. 다음 F개의 줄에는 친구 관계가 생긴 순서대로 주어진 www.acmicpc.net 백준 1717번 '집합의 표현'을 풀었다면 약간의 코드 수정으로 풀 수 있다. 유니온 파인드 문제들은 대부분 결이 비슷한 것 같다. 정답 코드 import sys input = sys.stdin.readline def find(a): if a == parent[a]: return a parent[a] = find(parent[a]) return parent[a] def union(a, ..

PS/프로그래머스

[프로그래머스 Lv.2] 주차 요금 계산 (Python)

https://school.programmers.co.kr/learn/courses/30/lessons/92341 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 파악 먼저 IN과 OUT을 구분해 주어야겠다고 생각했다. IN일 때는 딕셔너리 차량 번호 = 입차 시간으로 넣어주고 OUT일 때는 출차 시간에서 입차 시간을 뺀 값을 계산해 준 후 딕셔너리에서 pop 해주었다. 이때 datetime.strptime은 초(second) 단위로 계산되기 때문에 나누기 60을 해주었다. 반복문이 끝난 후 입차는 했지만 출차하지 않은 차량을 확인해 주었다. 즉, 반..

Dev/Java

[Java] pickNumberInRange ArrayIndexOutOfBoundsException

우테코 menu 문제 기능 구현을 끝내고 테스트 코드를 돌렸는데 위 에러가 떴다. 여기서 의문이 든 게 나는 pickNumberInRange 범위를 0에서 4로 맞춰놨기 때문에 5가 나올 수 없는 구조였다. 도대체 어디서 날아온 건가.. 구글링으로도 답을 못 찾다가 20분 삽질로 원인을 찾아냈다. 테스트 코드에서 5를 넘겨주고 있다.. 당연히 5가 넘어올 수밖에 없는 상황이었다.. 도저히 5의 출처를 못 찾겠어서 설마 테스트 코드에서 넘어오는 건가 하고 확인해 보니 설마가 맞았다. 우테코에서 제시한 테스트 코드를 써야했기 때문에 발생한 특수한 문제같다. 이런 경우가 또 생길지는 모르겠지만 기억하고 있어야겠다.

IT

클래스 다이어그램으로 분석 단계 UML 작성해보기

우아한 테크코스 예전 문제인 다리 건너기 게임을 풀고 있는데 3번 정도 코드를 갈아엎고 나서야 설계의 중요성을 깨닫게 되었다. 사실 설계의 중요성은 이전에도 알고 있었지만 간단한 게임 정도는 기능 요구 사항 작성만으로 충분할 줄 알았다.(큰 오산) 다리 건너기 게임은 게임 진행이 간단한 편이지만 결과 출력이 정말 까다로운 문제이다. 위쪽 다리와 아래쪽 다리를 동시에 기록하면서 동시에 출력해야 하기 때문에 메서드에서 필요로 하는 값을 정하기 어려웠다. 그래서 이번에는 코드를 작성하기 전에 UML을 작성한 후 구현에 들어가려고 한다. UML 종류가 워낙 많아서 어떤 타입으로 작성할지 고민했지만 가장 많이 사용되는 클래스 다이어그램으로 작성했다. 까다로운 다리 출력 처음 구현했을 때 정말 정말 지저분하게 다리..

Dev/Java

[Java] IllegalArgumentException vs. IllegalStateException

요즘 코드를 작성하면서 예외처리에 집중했는데, 그 과정에서 IllegalArgumentException를 매우 매우 자주 작성했다. 그러다 보니 IllegalStateException가 있다는 건 알고 있는데 언제 쓰는 거지? 라는 생각이 들며 궁금해졌다. 그래서 두 예외의 차이를 찾아보았다. IllegalArgumentException 적절하지 않거나 유효하지 않은 데이터를 받았을 때 발생되는 예외 양수를 파라미터로 기대하고 있었는데 음수가 넘어왔을 때나 API를 통해 넘어온 값이 올바르지 않을 때 발생 (파라미터에 따른 예외처리를 많이 하기 때문에 이 예외를 훨씬 자주 쓰는 듯 하다) IllegalStateException 죽은 스레드로부터 불려지는 경우와 같이 불려져서는 안될 시간에 메소드가 호출될..

IT

책임과 협력

필요한 행위(메스드)를 선별한다. 그리고 해당 행위를 누군가에게 책임으로 준다. 이때 행위 관련 필드가 필요하면 추가해준다. 여기서 알 수 있듯이 필드보다 행위 정의가 먼저이다. 필드는 그저 행위에 필요한 상태. 때문에 필드는 관련 메서드가 책임진다. 어떠한 행위를 하는 과정에서 혼자로는 힘들다고 판단? 그러면 협력자를 구하자. 협력하기 위해 필요한 것들은 협력자에게 넘겨준다. 이것이 곧 파라미터.

yo0oni
기록 기록 기록