[알고리즘] 백준 3052번 - 나머지 문제 풀이와 자바 Stream API 활용하기 (Java)
·
알고리즘
오늘은 백준 3052번 '나머지' 문제를 풀어보았다.알고리즘 공부를 시작한 지 얼마 되지 않아 기초적인 문제부터 차근차근 풀어나가고 있는데,이 문제에서 Java의 Stream API를 활용해볼 수 있어서 좋은 경험이 되었다.문제 요약 문제 해석과 접근 방법이 문제는 단순해 보이지만 몇 가지 중요한 개념을 포함하고 있다.우선 나머지 연산(modulo)을 이해해야 하고, 중복된 값을 제거하는 방법을 알아야 한다. 처음에는 HashSet을 사용해 중복을 제거하는 방법을 생각했다.HashSet은 중복을 허용하지 않는 자료구조이기 때문이다. 하지만 최근에 Java Stream API에 대해 공부하고 있어서 이를 활용해보고 싶었다.Stream API를 사용하면 컬렉션의 요소를 함수형 프로그래밍 방식으로 처리할 수 ..
[알고리즘] 백준 2675번 - 문자열 반복 문제 풀이 (Java)
·
알고리즘
문제 소개백준 2675번은 "문자열 반복"이라는 제목의 문제다.이 문제는 주어진 문자열의 각 문자를 특정 횟수만큼 반복하여 새로운 문자열을 만드는 것이 목표이다. 문제 해석이 문제는 다음과 같은 내용을 담고 있다. 테스트 케이스의 개수 T가 주어진다 (1 ≤ T ≤ 1,000).각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8)과 문자열 S가 공백으로 구분되어 주어진다.S의 길이는 적어도 1이며, 20글자를 넘지 않는다.S에는 QR Code "alphanumeric" 문자만 들어있다 (0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$%*+-./:).각 테스트 케이스에 대해 S의 각 문자를 R번 반복한 새 문자열 P를 출력해야 한다.예시:입력: 3 ABC일 경우출력: AAABBBCCC ..
[Spring] ✨ QueryDSL 개념알기 ✨
·
Spring
QueryDSL이란?QueryDSL은 JPA를 보완하는 강력한 쿼리 생성 프레임워크이다.JPQL(Java Persistence Query Language)을 자바 코드로 작성할 수 있게 해주며, 컴파일 시점에 SQL 문법 오류를 잡아낼 수 있는 큰 장점이 있다.필자는 SQL과 JPQL을 문자열로 작성하는 대신, 자바 코드로 작성함으로써 타입 안전성을 보장받을 수 있다는 점에서 놀랍게 다가왔던 것 같다.QueryDSL의 필요성?그렇다면 QueryDSL이 왜 필요할까?QueryDSL을 사용하기 전과 후로 나누어보자! 사용하기 전:데이터베이스 쿼리를 작성할 때 기존의 방식들은 몇 가지 한계점이 있었다.순수 JPA를 사용할 떄는 문자열로 쿼리를 작성해야 했기 때문에 실수하기 쉽고, 오타가 있어도 컴파일 시점에 ..
[Spring] MyBatis 개념정리 🤩
·
Spring
MyBatis란?먼저 MyBatis부터 알아보자.MyBatis는 자바 진영에서 널리 사용되는 퍼시스턴스 프레임워크(Persistence Framework)이다.🤔Persistence Framework?🤔-> 데이터베이스와의 연동되는 시스템을 빠르게 개발하고 안정적인 구동을 보장해주는 프레임워크종류에는SQL Mapper(SQL문장으로 직접 데이터베이스를 다루는 SQL Helper) : e.g. Mybatis,ORM (객체를 통해 간접적으로 데이터베이스를 다루는 ORM) : e.g. Hibernate, JPA가 있다.개발자가 SQL을 직접 제어하면서도 JDBC의 복잡한 설정을 간소화할 수 있게 해주는 강력한 도구라고 볼 수 있다.JDBC를 사용할 때 필요한 반복적인 코드(커넥션 관리, PreparedSt..
[Spring] JdbcTemplate으로 데이터베이스 접근하기!
·
Spring
Spring 프레임워크에서 데이터베이스를 다루는 방법은 여러 가지가 있다.그 중에서도 JdbcTemplate은 JDBC를 한층 더 추상화하여 개발자가 더 쉽게 데이터베이스에 접근할 수 있도록 도와주는 Spring의 핵심 컴포넌트이다.JdbcTemplate이 뭘까?JdbcTemplate은 Spring Framework에서 제공하는 JDBC 추상화 클래스이다.전통적인 JDBC의 모든 기능을 그대로 사용할 수 있으면서도, 반복적이고 복잡한 JDBC 코드를 대폭 줄여주는 장점이 있다.기존 JDBC의 try-catch 문과 같은 예외처리, Connection 객체 관리, PreparedStatement 처리 등을 JdbcTemplate이 자동으로 처리해주기 때문에 개발자는 SQL 쿼리 작성과 결과 매핑에만 집중할..
[Database] JDBC와 데이터베이스 커넥션의 이해
·
Database
웹 서비스가 점점 성장하면서 데이터베이스를 효율적으로 관리하는 것이 매우 중요해졌다고 필자는 생각한다.특히 수많은 사용자의 요청을 동시에 처리해야 하는 상황에서, 데이터베이스의 연결을 어떻게 관리하느냐는 서비스의 성능을 좌우하는 핵심 요소가 되었지 않았을까?!그래서 필자는 자바 기반 웹 애플리케이션에서 데이터베이스 연결을 관리하는 핵심 기술인 JDBC와 커넥션 풀의 개념에 대해서 정리해보고자 한다.JDBC(Java Database Connectivity)란?? 🤔JDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API이다.데이터베이스에 접근하기 위한 일관된 방법을 제공하며, 어떤 데이터베이스를 사용하더라도 동일한 방식으로 데이터베이스를 다룰 수 있게 해준다!마치 USB가 모든 기기에서 동일..
[Spring] Spring Singleton Pattern과 주요 어노테이션 정리 ✅
·
Spring
1. Spring과 Singleton Pattern??필자가 Spring 프레임워크를 공부하면서 가장 먼저 접했던 개념은 Singleton Pattern이었던 것 같다.학기중에 OODP(객체지향 설계패턴)수업에서 배우기도 했던 싱글톤 패턴이기도 해서 이해하기 쉬웠던 것 같다. Singleton Pattern이 뭘까?간단하게, 싱글톤 패턴은 객체의 인스턴스가 오직 1개만 생성되는 패턴을 의미한다.Spring에서는 Bean이라고 부르는 객체들이 기본적으로 Singleton으로 관리된다. 예를 들어, 다음과 같은 서비스 클래스가 있다고 가정해보겠다.@Servicepublic class UserService { private static int instanceCount = 0; public U..
[Spring] POJO, IoC, DI, AOP, Filter 핵심 개념 완벽 정리 🧹
·
Spring
이 게시물에서는 필자가 Spring Framework의 핵심 개념들인 POJO, IoC, DI, AOP, Filter에 대해 공부한 부분들을 정리하고자 한다.각 개념의 정의부터 실제 구현 방법, 그리고 왜 이러한 패턴을 사용하는지까지 다뤄보고자 한다.1. POJO (Plain Old Java Object)POJO는 특정 프레임워크나 기술에 종속되지 않은 순수한 "자바 객체"를 의미한다.크게 세 가지의 특징을 가지는데 아래와 같다.특정 클래스를 상속받지 않음특정 인터페이스를 구현하지 않음특정 어노테이션을 포함하지 않음코드로 한 번 살펴보자.// POJO 예시public class Student { private String name; private int grade; public S..
[Spring] ⚡️ Spring MVC와 Spring Boot 개념 정리 ⚡️
·
Spring
필자는 최근에 실무에서 가장 많이 사용된다는 Spring MVC와 Spring Boot를 접하게 되었고,이 둘을 공부하면서 배운 내용들을 정리해보려고 한다.Spring MVC란?Swift, React를 공부하며 MVC 자체 대한 공부를 많이 했던지라 Spring MVC를 접했을 때 마냥 막막하지는 않았다.하지만 백엔드 관련해서의 MVC는 어떻게 접근해야되는지 이해하기가 힘들었던 것 같다. 일단 MVC 패턴이란 무엇일까?MVC 패턴은 애플리케이션을 세 가지 역할로 구분한 개발 방법론이다.Model: 데이터와 비즈니스 로직을 담당View: 사용자에게 보여지는 화면Controller: Model과 View를 연결하는 다리 역할Spring MVC의 동작 원리는 무엇일까?Spring MVC는 프론트 컨트롤러 패턴..
[알고리즘] 백준 15552 빠른 A+B - Java
·
알고리즘
백준 문제를 풀다가 보니 정말 인상 깊었던 알고리즘 문제가 있어서 글로 남기고자 한다.바로 15552번의 빠른 A+B인데 시간제한이 있다는 점이 너무 재밌었다.*시간제한은 Java기준 1.5초, 즉 1500ms 이내여야 한다.* 시작하기 전에 필자는 수업시간에 배운 BufferedReader을 사용해야겠다고 마음먹고 시작했다.Scanner을 쓰면 시간초과가 된다.먼저 이 둘의 차이를 알아보고자 한다.Scanner과 BufferedReader의 차이점Scanner의 동작 방식Scanner는 내부적으로 정규표현식을 사용하여 입력을 파싱한다. 이 과정에서 추가적인 처리시간이 필요하다.데이터를 읽을 때마다 시스템 콜이 발생하여 매번 바이트 단위로 읽어온다.동기화 처리가 들어가 있어 멀티스레드 환경에서는 안전하지..