본문 바로가기

전체 글1047

스프링(부트)에서 final이 아닌 필드(인스턴스 변수, 클래스 변수)가 있으면 안됩니다. 목차 이 내용은 당연한 것 같으면서도 은근히 코드리뷰할 때나 얘기할 때 한번씩 보이는 것 같아서 글로 적어보게 되었다. 개인 생각을 적은것이니 다른 의견 혹은 틀린 부분이 있으면 알려주세요. 제목을 좀 더 구체적으로 적은 이 글의 결론은 다음과 같다. 결론 스프링 혹은 스프링부트로 만든 프로젝트에서 @Component, @Controller, @Service, @Repository 와 같이 스프링 컨테이너에 등록되는 클래스에 Bean 주입 이외 용도의 필드(인스턴스 변수, 클래스 변수)가 있으면 안됩니다. 혹시 들어가야 한다면 final이어야 합니다. final 이더라도 그게 객체라면 불변임이 보장되는게 좋습니다. 물론 POJO로 된 도메인 계층 등 스프링 컨테이너에 안들어가는 애들은 상관없습니다. PO.. 2024. 4. 4.
[자바] 백준 2015 - 수들의 합 4 (java) 목차 문제 : boj2015 필요 알고리즘 누적 합 (prefix sum), 해시를 사용한 집합과 맵 (hashmap) 누적합과 해시를 사용해 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 문제에서 A배열에서 1부터 X번까지의 누적합을 f(x)라 해보자. 즉 f(x)는 다음과 같다. 이 때 1 2024. 4. 3.
[자바] 프로그래머스 - 분수의 덧셈 (Lv0, Java) 목차 문제 : Programmers - 분수의 덧셈 문제 출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges 필요 알고리즘 구현, 수학 딱히 알고리즘을 필요로 하지 않는다. 분수의 덧셈 방법만 알면 된다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 유클리드 호제법을 이용할수도 있겠으나, 굳이 최대 분자 분모가 1000인 상황에서 쓸 필요는 없다. 그냥 단순 .. 2024. 3. 29.
[잡글] 개인적인 2024년 기대작 [ 3월7일 작성 ] 토비님의 스프링부트 강의 후속작 (3월말~4월) 호라이즌 포비든 웨스트 (3월 22일 - 현재 스팀 예구) 정수원님 스프링 시큐리티 6.x 개정판 (3월 내 오픈) [ 3월 25일 추가 작성 ] 조영호님의 강의! 오브젝트 책 보고 반해서 저자 혹은 감수로 들어가신 책 전부 사서 봤는데.. 이분 강의도 나오면 그냥 바로 구매하고 볼 듯 합니다. [ 4월 3일 추가 작성 ] 역시 조영호님.. 위의 이미지가 이하 강의인진 모르겠지만 아무튼 오늘 오프라인 강의를 내셨던데 18만원 임에도 엄청 빠르게(오후 1시47분 오픈 -> 2시30분 마감) 마감되었네요. 저도 커리큘럼도 안보고 일단 이름만 보고 결제하고 생각하자 했더니 결제하고 몇 분후에 마감 ㄷㄷ 옳은선택이었네요. https://edu.. 2024. 3. 25.
[자바] 백준 24891 - 단어 마방진 (java) 목차 문제 : boj24891 필요 알고리즘 브루트 포스 그냥 모든 경우를 다 확인해보면 된다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 최악의 경우가 20개의 단어 중 5개를 순서대로 뽑는 경우이므로 20P5 = 20*19*18*17*16 번 정도면 모든 경우를 다 확인할 수 있다. 그리고 마방진임을 확인하는데에는 최대 L^2 이면 확인 가능하다. 결론적으로 그냥 브루트포스로 모든 경우를 확인하면 되는 문제이다. O(.. 2024. 3. 20.
[자바] 백준 2473 - 세 용액 (java) 목차 문제 : boj2473 필요 알고리즘 투 포인터 또는 이분 탐색 투 포인터를 쓰거나, 이분 탐색을 써서 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 우선 처음 생각난 아이디어는, 어차피 n이 5000이므로 2개를 고정시켜놓고, 나머지 하나의 값을 이분 탐색으로 찾는 방법이었다. 이 경우 O(N^2 * logN). 예를들어 현재 고정시켜둔 2개의 값이 -97와 -2라면, -(-97-2) = 99 .. 2024. 3. 20.
[자바] 백준 14503 - 로봇 청소기 (java) 목차 문제 : boj14503 필요 알고리즘 구현, 시뮬레이션, 탐색 (bfs, dfs 등) 그냥 문제에 제시된 대로 구현하는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 딱히 풀이라 할 부분은 없을 것 같다. 문제에 제시된대로 구현하면 된다. 따라서 내 코드를 기준으로 어떤식으로 구현했는지만 얘기해보겠다. 우선 '방의 가장 북쪽, 가장 남쪽, 가장 서쪽, 가장 동쪽 줄 중 하나 이상에 위치한 모든 칸에는 벽이 .. 2024. 3. 19.
[자바] 백준 19953 - 영재의 산책 (java) 목차 문제 : boj19953 필요 알고리즘 정수론, 비둘기집의 원리 비둘기집의 원리로 풀 수 있는 문제이다. ※ 제 코드에서 왜 main 함수에 로직을 직접 작성하지 않았는지, 왜 Scanner를 쓰지 않고 BufferedReader를 사용했는지 등에 대해서는 '자바로 백준 풀 때의 팁 및 주의점' 글을 참고해주세요. 백준을 자바로 풀어보려고 시작하시는 분이나, 백준에서 자바로 풀 때의 팁을 원하시는 분들도 보시는걸 추천드립니다. 풀이 실제로 시뮬레이션을 돌려보게 된다면, O(t) 이므로 시간초과가 나게 된다. 따라서 시간을 줄일 아이디어를 찾아야 하는데, 내 경우에 비둘기집의 원리로 시간을 줄였다. n+1마리의 비둘기가 n개의 비둘기집에 들어간다면 자명하게도 최소 1개 이상의 비둘기집은 2마리 이상의.. 2024. 3. 18.
[디자인 패턴의 아름다움] 2. 객체지향 프로그래밍 패러다임 - 2.3~2.4 정리 스터디 메인 페이지 목차 - ☆ 표시가 붙은 부분은 스터디 중 나온 얘기 혹은 제 개인적인 생각이나 제가 이해한대로 적어놓은 것으로, 책에 나오지 않는 내용입니다. 따라서 책에서 말하고자 하는 바와 다를 수 있습니다. - 모든 이미지의 출처는 디자인패턴의 아름다움(왕정 저) 책 입니다. 2.1~2.2 정리 글 : 링크 2.3 객체지향 분석, 객체지향 설계, 객체지향 프로그래밍을 수행하는 방법 ☆ 예제를 가지고 설명하는 부분이기도 하고, 2.3에 나온 예제가 그리 좋은 예제가 아니라고 생각하다보니, 내용 정리 시 책에 쓰여진 말을 제 생각대로 많이 축약 시켰습니다. 그래서 제가 잘못 이해한 경우, 2.3의 내용정리 부분은 책이 전달하고자 하는 내용과 다를 수 있습니다. 예제 소개와 난이도 분석 HTTP 인.. 2024. 3. 10.
[수강평] 빠르게 git - 핵심만 골라 배우는 Git/Github 강의 링크 : 인프런 이전에 '개발자 윈도우 세팅 (WSL 서브 리눅스, IntelliJ, vscode, git 등)' 라는 글을 쓸때만 해도 인텔리제이에 콘솔창 붙인거 이쁘게 꾸며서 CLI 환경으로 git을 자주 썼었다. 그러다가 그냥 IDE에서 제공하는 기능으로 git을 쓰게 되었고, 현재는 CLI 환경에서 git 명령어를 많이 까먹었다. 그렇다고 git documentation 보기엔 너무 과하기도 하고, 기본적으론 IDE에서 제공하는 기능 계속 쓸꺼긴 한데, 그래도 CLI 명령어도 잊고싶진 않으니까 기본 명령어들만 다시 리마인드 해보자는 생각에 구매해서 보게 되었다. 강의는 딱 필요한 git 관련 명령어들에 대해 잘 설명해줘서 좋았다. 원격 저장소(github)도 함께 설명하다보니 git을 처음 .. 2024. 3. 10.