Java 21

Java 알고리즘 모든 아나그램 찾기

오늘은 해쉬맵과 윈도우 미러링을 이용하여 주어진 단어 안에서 모든 아나그램을 찾는 문제를 풀어보려 합니다😄 개요 이번 문제의 핵심은 저번 포스팅과 마찬가지로 해쉬맵을 사용하는 방법과 윈도우 미러링 방식을 사용하여 시간복잡도를 해결하는 것이 관건일 것 같네요😀 Setting📙 public class AllAnagram { public static void main(String[] args) { AllAnagram T = new AllAnagram(); Scanner sc = new Scanner(System.in); String a = sc.next(); String b = sc.next(); System.out.println(T.solution(a,b)); } } 입력값으로는 두 단어가 주어집니다. 첫 ..

Algorithms 2023.02.18

Java 알고리즘 아나그램(해쉬) 풀이

오늘은 해쉬맵을 이용하여 주어지는 두 단어가 아나그램인지 판별하는 문제를 풀어보려고 합니다. 아나그램은 두 단어가 알파벳 나열 순서가 달라고 구성이 같을 때의 경우를 의미합니다😀 개요 이번 문제의 핵심은 서두에서 언급했듯이 해쉬맵의 기능들을 사용하는 것이 될 것 같네요😊 Setting📙 public class Anagram { public static void main(String[] args) { Anagram T = new Anagram(); Scanner sc = new Scanner(System.in); String a = sc.next(); String b = sc.next(); System.out.println(T.solution(a,b)); } } 입력값은 문제에 나와있는 것 처럼 두 단어가..

Algorithms 2023.02.16

Java 알고리즘 BFS 미로 최단 경로 구하기

오늘은 BFS를 활용하여 미로의 최단 경로를 구해보는 문제를 풀어볼 예정입니다. 이전 포스팅에서 풀어 본 DFS를 활용한 미로 탐색과 풀이법이 유사하기 때문에 참고하면 좋을 듯하네요😊 개요 이 문제의 핵심은 BFS 알고리즘 활용과 Queue의 원리, 지나간 경로는 다시금 못 지나가게 막는 방법, 격자의 상하좌우 확인 총 4가지가 될 것 같아요. 한번 코드로 풀어볼까요? Point📙 class Point { public int x,y; Point(int x, int y) { this.x = x; this.y = y; } } Point 클래스는 격자판에서 x축, y축을 입력할 때 사용합니다. Queue에 지나간 격자를 넣거나 빼서 사용할 때 Point 클래스를 사용하여 현재 위치를 파악할 때 사용합니다. 자..

Algorithms 2023.01.12

Java 알고리즘 DFS 미로 탐색

오늘은 DFS를 활용한 미로 탐색 문제를 풀어보려고 합니다😄 개요 이 문제의 핵심은 DFS 알고리즘 활용과 상하좌우 4방향으로 이동하는 방법이 주가 될 것 같아요. 한번 코드로 풀어볼까요? 📌 사전 지식으로 DFS의 원리와 Stack이 쌓이고 pop 되는 과정을 알아야 합니다. 모르시는 분은 해당 링크를 클릭해서 확인해주세요😀 Setting📙 public class MazeSearch { static int[] dx = {-1, 0, 1, 0}; static int[] dy = {0 ,1, 0, -1}; static int[][] board; static int result = 0; public static void main(String[] args) { MazeSearch T = new MazeSear..

Algorithms 2023.01.11

SpringBoot JPA 게시판 CRUD 구현(Update-게시글 수정)

지난번에 구현한 페이징 처리까지 R(Read)에 해당됩니다. 오늘은 U(Update)에 해당되는 게시글 수정 WAS 단 로직을 포스팅하려 합니다. 약간 패키지성 포스팅이어서 게시판의 Create, Read 포스팅을 보지 않으셨다면 헷갈리실 수 있습니다. 맨 아래에 링크를 통해서 지난번 포스팅을 보시고 오시거나 깃허브 Bincolog를 참고하시는 것을 추천드립니다! Request 생성📗 첫번째로는 Request를 생성합니다. Create, Read와 동일하게 Entity를 사용하지 않고 따로 클래스를 만들어줍니다. 이유는 지난 포스팅에서 언급했습니다 :) @Getter @Builder public class PostEdit { @NotBlank(message = "제목을 입력해주세요.") private S..

JPA 2022.07.21

SpringBoot JPA 게시판 CRUD 구현(다중 조회/ Paging / TDD)

지난번에 포스팅한 게시글 단건 조회에 이어서 오늘은 전체 게시글을 조회하는 WAS 단 로직을 포스팅하려 합니다. 사실 JpaRepository에서 기본적으로 제공하는 findAll() 메서드를 사용하면 단건 조회와 큰 차이점은 없지만, 글이 너무 많은 경우에 비용이 너무 많이 들어가므로 페이징 처리도 함께 구현할 예정입니다. 페이징(Paging)? 우리가 웹사이트에서 흔히 볼 수 있는 페이징은 왜 필요할까요? 페이징 처리가 없다면 스크롤을 계속해서 내려야 하는 상황도 발생할 수 있고, 무엇보다 데이터 처리에 비용이 많이 발생합니다. 페이징 처리를 안 한 상황에서 글이 만약 몇십만 개가 있다면 한 번의 로직으로 DB에서 몇십만 개의 글을 모두 가져와야 할 것입니다. 물론 DB에서 데이터 사이즈로 인해 오류..

JPA 2022.07.21

SpringBoot JPA 게시판 CRUD 구현(Read 단건 조회 및 TDD)

지난번에 포스팅한 Create에 이어서 게시판을 조회하는 WAS 단 로직을 포스팅하려 합니다. 게시판 조회는 단건 조회와 전체 조회로 나뉩니다. 물론 검색 기능도 조회에 해당하지만, 검색 기능은 추후에 포스팅하겠습니다. Gradle 빌드나 프로젝트 구조는 깃허브 Bincolog를 참고해주세요! Response 생성📗 처음에는 PostResponse 클래스를 생성합니다. 저번에 언급했던 Entity와 Request, Response는 분류해야 하기 때문입니다. 못 보신 분들은 아래 사진을 참고해주세요😄 Response 클래스는 서비스 정책에 맞게 구현해야 합니다. 클라이언트에서 어떠한 결과 값을 원하는지에 대해서는 항상 다르기 때문입니다. 저는 게시글을 조회했을 때 해당 게시글의 id값, 제목, 내용을 가..

JPA 2022.07.20

SpringBoot JPA 게시판 CRUD 구현(Create)

SpringBoot와 JPA를 사용하여 게시판을 구현하는 WAS 단 로직을 포스팅하려 합니다. 기본 프로젝트 설정과 데이터베이스 연결 및 View단은 생략할 예정입니다. Gradle 빌드나 프로젝트 구조는 깃허브 Bincolog를 참고하시면 됩니다. 개인적인 공부로 코드의 결함이 있을 수 있으니 참고만 해주세요 :) Entity 생성📗 처음으로는 Entity를 생성합니다. Entity 클래스는 실제 DB 테이블과 매핑되는 핵심 클래스로, 데이터베이스의 테이블에 존재하는 컬럼들을 필드로 가지는 객체입니다. Entity는 데이터베이스 영속성의 목적으로 사용되기 때문에, 요청이나 응답 값을 전달하는 클래스로 사용하는 것은 좋지 않습니다. 또한, 많은 비즈니스 로직들이 Entity를 기준으로 동작하기 때문에 추..

JPA 2022.07.18

Java Enum 클래스

오늘은 Java Enum 클래스에 대해 알아보려 합니다. SpringBoot를 배우면서 자연스럽게 Enum 클래스를 접하게 되었습니다. 실무에서 흔히 final static string을 사용해서 상수를 정의합니다. 하지만 이렇게 정의해서 코딩하는 경우 여러 문제를 야기시킵니다. 그래서 JDK 1.5 버전부터 새롭게 추가된 것이 Enum class입니다. Enum Class 정의📖 C언어와 C++에서는 열거체(enumeration type)를 사용할 수 있지만, JDK 1.5 이전의 자바에서는 열거체를 사용할 수 없었습니다. 하지만 JDK 1.5 이후부터는 C언어의 열거체보다 더욱 향상된 성능의 열거체를 정의한 Enum 클래스를 사용할 수 있게 되었습니다. Enum은 열거형이라고 불리며, 서로 연관된 상..

TIL 2022.05.19

Java 추상 클래스와 인터페이스 구분

지난 시간에 객체지향 프로그래밍(OOP)에 대해 포스팅을 했었습니다. 객체 지향의 특징 중 추상화(Abstraction)에 대해는 간단한 정의만 하고 넘어갔었습니다. 그 이유는 추상 클래스와 인터페이스를 같은 것이라고 생각을 하시는 분이 많은데, 사용용도 면에서 큰 차이가 있어서 좀 더 정확하게 비교해가며 이번 포스팅을 하려 합니다. 사실 추상 클래스와 인터페이스의 구분은 면접 단골 질문이기도 합니다. 이론적으로는 누구나 외우기만 하면 대답할 수 있습니다. 하지만 그런 이론적인 내용 말고 정작 "언제 인터페이스를 사용하는 게 좋을까요?", "추상 클래스를 사용하면 안 되나요?"라는 실무적인 질문이 들어오면 대답하는 것이 생각보다 어려울 것 같습니다. 저도 마찬가지이고, 그렇기에 공부하면서 포스팅을 진행 ..

TIL 2022.05.18