전체 글 프로그래머스 구명보트 Java 2020. 11. 23. 구명보트 재밌게 푼 문제여서 오랜만에 알고리즘 문제 풀이 글을 쓴다. 문제 제한사항으로 무인도에 갇힌 사람이 최대 50,000명까지 주어질 수 있다. 이중 for문을 돌리기만해도 약 25억번 연산이 일어나서 O(N^2)으로는 풀 수 없겠구나 생각했다. 그래도 처음엔 이중 for문을 사용한 방법밖에 떠오르지 않아서 이중 for문에 최대한 if문으로 연산 회수를 줄이기 위해 Map 인터페이스를 활용하는 방법으로 풀고자 했다. 결과는 시간 초과가 나왔다. 허허. 결국 이 문제는 곧 죽어도 한 번의 for문으로 해결해야하는 문제인 것을 확인했다. 그렇게 고민하다가 나온 방법이 있는데 코드로 설명하는게 가장 빠를 듯하다. import java.util.Arrays; public class Solution { pu.. Objects.isNull과 Validation 2020. 11. 20. javable에서 댓글을 보면서 배운 내용 중에 기억이 흐려져서 자꾸 다시 찾아보게 하는 댓글들이 있다. 다시 찾는 게 번거로워서 확실히 기억하기 위해.. 혹은 다시 찾을 때 편하게 찾기 위해 글로 정리해놓고자 한다. Objects.isNull, Objects.nonNull javable에 아래와 비슷한 예제를 작성한 글이 있었다. public void validateEmpty(List names) { if (Objects.isNull(names)) { throw new IllegalArgumentException(ERROR_MESSAGE); } ... } 위 코드는 메서드로 넘어온 List names를 null 체크하는 평범한 코드로 보일 수 있지만 좋은 코드는 아니다. Objects.isNull 메서.. HttpMessageNotReadableException, LocalDateTime 2020. 11. 18. 컨트롤러 단위 테스트를 완벽하게 짰다고 생각했는데 자꾸 HttpMessageNotReadableException가 발생했다. 분명 저번에 같은 문제를 해결했었는데.. 낚시로 물고기를 많이잡다보니 뇌가 물고기화 되가는 것 같다. 이번에 기록하고 기억해야겠다. 문제가 발생했던 상황을 최대한 간단하게 코드로 작성하면 아래와 같다. @Test void changeOrderStatus() throws Exception{ Order order = createOrderWithOrderStatus(OrderStatus.MEAL); String content = new ObjectMapper().writeValueAsString(order); mockMvc.perform(put("/api/orders/{orderId}/.. 자바 제네릭(Generics) 기초 2020. 11. 8. javable에 업로드 된 제 글을 옮겨온 글입니다. 😊 제네릭 클래스나 제네릭 메서드를 구현할 일이 거의 없어서 제네릭을 애매하게 알고 있었다. 나와 같은 상황인 초보 개발자분들도 많을 것 같아서 제네릭에 대해 정리하고자 한다. 모든 내용을 한 글에 담기는 너무 길어져서 이번 글은 기초적인 내용을 알아보고 기회가 된다면 다음 글에서는 조금 더 심화 내용을 알아보고자 한다. 제네릭 필요성 제네릭이란 JDK 1.5부터 도입한 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다. // List interface public interface List extends Collection { ... } public static void main(String[] args) { List words = n.. 몸체가 비어있는 무한 루프 2020. 10. 19. javable에 업로드 된 제 글을 옮겨온 글입니다. 😊 2021.01.07 수정, 자바의 신2 VOL.2에 관련 내용이 나와서 문제 원인을 보완하고 해결 방법에 volatile도 추가하였다. 2018년 자바 입문서 한 권을 다 읽고 고수가 된 마음으로 소켓 프로그래밍 퀴즈 게임을 만든 적이 있었다. 최근에 그때의 난 어떤 코드를 작성했을까.. 하고 코드를 살펴보다가 그 당시 나를 며칠 동안 괴롭혔던 문제에 관한 기억이 떠올랐다. 이번 글은 그 당시 겪었던 문제에 관한 경험을 공유하고자 한다. 로직 자체를 왜 저렇게 짰는지보단 문제 자체를 봐주시고 가벼운 마음으로 읽어주셨으면 좋겠다..😅 상황 소켓을 연결하기 위해서는 사용자 IP가 필요했는데 UI에 입력받은 IP로 소켓을 연결하고 싶었다. UI는 자바 .. DDD에서는 왜 간접 참조를 더 권장할까? 2020. 10. 10. spring-pet-clinic-data-jdbc를 살펴보다 객체간의 연관 관계가 전부 간접 참조로 되어있어서 왜 그런지 알아보았다. DDD를 제대로 이해하지는 못했지만 DDD에서는 간접 참조를 권장한다. 그 이유에 대해서도 알아봤는데 이해한 내용이 맞는지는 잘 모르겠다. Aggreegate란 같은 라이프사이클(생성, 수정, 삭제)를 갖는 연관된 객체들의 집합이다! 성능의 이점 spring data jdbc는 레이지 로딩이 없기 때문에 직접 참조를 한다면 참조한 객체의 인스턴스 변수가 몇개든 전부 같이 조회해서 와야한다. 하지만 id를 통한 간접 참조를 한다면 참조한 객체의 id만 조회해오게 되고 성능의 이점을 가져갈 수 있다. 확장성 직접 참조를 하면 아무래도 의존 관계가 형성된다. 하지만 간접 참조를.. 코딩을 지탱하는 기술 2020. 10. 9. 비교를 통한 배움 규칙은 언어마다 다르다. C언어는 0이 거짓이지만 Java는 참거짓을 위한 형이 따로있기 때문에 0이 참도 거짓도 아니다. 역사를 통한 배움 해당 언어가 어떤 흐름을 따라 만들어졌는지 알게되면 그 기능이 왜 필요한지 납득할 수 있다. if문과 반복문 if문과 반복문은 가독성을 위해 탄생했다. 어셈블리어는 if문이 없지만 C언어에서 간단히 컴파일된다. C언어에서 goto를 사용하면 if문과 반복문을 전부 대체할 수 있다. 하지만 해당 문법들이 도입됨으로써 사람이 프로그램을 보다 편하게 쓰고 읽을 수 있게되었다. for, for-each for문은 한곳에 모두 정리함으로써 루푸의 의도를 쉽게 이해할 수 있게했다. for-each 구문은 해당 요소 전부에 어떤 처리를 한다는 코드를 쉽게 쓰기.. instagram 데이터를 수집하며 겪었던 문제들 2020. 10. 4. 인스타그램 인기게시물 지도 제공 서비스 당신이 모르는 그곳, 미소를 만들기 위해 인스타그램 데이터를 수집하며 겪었던 문제와 팀원들과 함께 해결한 내용을 쭉 정리해보자. 인스타그램 인기 게시물 지도 제공 서비스인 미소를 만들기 위해서는 인스타그램의 정보가 필수적으로 필요했다. 인기 게시물을 Hashtag 개수를 기준으로 판단하기 위한 특정 가게의 Hashtag 개수 및 인스타그램에서 특정 가게 검색 시 노출되는 9개 인기 게시물의 이미지 URL과 포스트 URL이 필요했다. 처음엔 'instagram API를 사용하면 되겠지~'라고 막연하게 생각했다. 서울만 해도 약 4만 개의 가게가 있고 거기에 인기 게시물 9개의 이미지, 포스트 URL까지, 시간당 200번 요청은 터무니없이 작게 느껴졌다... 이전 1 2 3 4 5 6 7 8 ··· 31 다음