본문 바로가기

Programming43

자바 Map관련 알고리즘 문제 리팩토링 과정 기록 정말 오랜만에 글을 쓴다. 이제부턴 조금 편하게 글을 써 내려가도록 마음을 먹었다. 그리고 말투도 편하게 독백체로... 독백체가 좀 더 감정이 잘 실리고 글도 술술 잘 적힌다. 오늘 포스팅은 백준 알고리즘 10816번을 풀다가 초기 코드에서 리팩토링을 해간 과정이 재밌어서 기록해 둔다. 먼저 백준 알고리즘 10816번에 대해 단계별로 풀어가고 있는데 현재는 집합과 Map 단계인데 이 문제가 실버 4 수준인지는 잘 모르겠다. Map이라는 자료구조가 들어가서 그런가... 문제 자체는 굉장히 직관적이게 숫자 카드의 개수를 Map에다가 저장하면 된다. 아래는 초기 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOE.. 2023. 12. 1.
[스프링 부트] Spring Data JPA로 Oauth2 카카오 로그인 구현하기 본 포스팅은 Spring Boot에서 Spring Data JPA를 사용하며 Oauth2 로그인 구현하는 방법을 설명합니다. 이번 포스팅에서는 카카오에서 제공하는 소셜 로그인 구현을 해보도록 하겠습니다. Oauth2 로그인은 이미 많은 블로거들이 포스팅을 해서 검색을 통해 쉽게 찾을 수 있었지만, 저는 application.yml, Spring Data JPA, gradle를 사용하는 점, Spring Security에서 deprecated 된 메서드들 때문에 새롭게 정리하고자 합니다. 개발환경 Spring boot 2.7.0 Spring Data JPA Spring Security Oauth2 application.yml gradle build.gradle Oauth2 로그인을 위한 dependenci.. 2022. 9. 14.
[Java] 자바 함수형 인터페이스(Functional Interface) 2022.06.08 - [Programming/Java] - [Java] 자바 람다식(Lambda Expression)이란? [Java] 자바 람다식(Lambda Expression)이란? 자바 8부터 추가된 스트림(Stream)을 사용하기 위해서는 람다식(Lambda Expression)의 이해가 필수적입니다. 이번 포스팅에서는 람다식에 대해 알아보도록 하겠습니다. 람다식(Lambda Expression) 이란? 람다 hyunipad.tistory.com 람다식은 함수형 인터페이스를 반환하게 되는데, 이 함수형 인터페이스는 자주 쓰는 패턴이 정해져 있습니다. 파라미터가 있거나 없거나, 리턴 값이 있거나 없거나 달라지는 것은 람다식을 통해 구현되는 구현부입니다. 자바에서는 빈번히 사용되는 함수형 인터페이.. 2022. 6. 22.
[Java] 자바 람다식(Lambda Expression)이란? 자바 8부터 추가된 스트림(Stream)을 사용하기 위해서는 람다식(Lambda Expression)의 이해가 필수적입니다. 이번 포스팅에서는 람다식에 대해 알아보도록 하겠습니다. 람다식(Lambda Expression) 이란? 람다식(Lambda Expression)이란 메서드를 하나의 식으로 표현한 것입니다. 메서드를 식으로 표현한다면 메서드의 이름이 필요 없기 때문에 람다식은 익명 함수(Anonymous Function)의 한 종류로 볼 수 있습니다. 기존의 메서드들은 아래와 같이 사용하였습니다. public static void main(String[] args) { system.out.println(hello()); } public static String hello() { return "hel.. 2022. 6. 8.
[Java] 자바 내장 정렬 함수 - Arrays.sort() 데이터들을 정렬시킬 때, 어떤 정렬 알고리즘을 사용해야 하는지 판단하는 중요한 요소중 하나는 시간 복잡도입니다. 자바 내부에서 사용하는 정렬은 시간 복잡도가 얼마인지 알 필요성이 있다고 생각합니다. 이번 포스팅에서는 자바의 내장 정렬 함수 중 하나인 Arrays.sort()를 알아보도록 하겠습니다.(JAVA 8 기준) java.util.Arrays.sort() Arrays.sort()는 내부적으로 DualPivotQuicksort.sort()를 호출한다. 퀵 정렬의 시간 복잡도는 일반적으로 최선의 경우에는 O(nlogn)을 가지고, 최악의 경우에는 O(n^2)를 가진다. 주석을 해석해보면 DualPivotQuicksort.sort()는 최악의 시간 복잡도를 갖게 하는 많은 데이터 셋들에 대해서도 O(nl.. 2022. 4. 30.
[Java] 자바 Enum 클래스 사용법 정리 Enum 이란? Enum은 열거형(enumrated type)이라고 부르며, 서로 연관된 데이터를 가진 상수들의 집합을 관리해주는 클래스입니다. public enum Day { 월, 화, 수, 목, 금, 토, 일 } Enum을 사용하면 다음과 같은 장점이 있습니다. Enum의 열거체를 비교할 때, 값뿐만 아니라 타입까지 체크하기 때문에 안정적입니다. 깔끔한 코드 작성이 가능합니다. 열거체를 값이 변경되더라도 다시 컴파일할 필요가 없습니다. Enum 사용법 제가 생각하는 Enum의 가장 큰 장점은 열거체에 원하는 상수값을 명시할 수 있기 때문에, 값을 전달할 때 상수값이 무엇인지 신경 쓰지 않아도 된다는 것입니다. 아래의 코드를 보겠습니다. public enum Day { 월(1), 화(2), 수(3), .. 2022. 3. 18.
[Java] Setter를 사용할 때 주의할 점(Feat. 불변객체) 자바(Java)를 사용해서 애플리케이션을 개발할 때, 대부분의 개발자는 객체를 사용합니다. 그 객체 안에는 여러 가지 메서드가 존재하지만 대표적으로 Getter와 Setter가 있습니다. Getter는 값을 얻기 위해서 필수적이지만 Setter는 필수적이지는 않습니다. 그 이유는 생성자가 있기 때문입니다. 하지만 많은 개발자들이 Setter의 편리함 때문에 많이 사용하곤 합니다. 이번 포스팅에서는 Setter를 사용할 때 주의할 점에 대해 알아보도록 하겠습니다. 기본형 vs 참조형 자바에는 대표적으로 두가지 변수가 존재합니다. 바로 기본형과 참조형입니다. 기본형과 참조형의 가장 큰 차이점은 변수를 저장하는 방법에 차이가 있습니다. 2021.01.05 - [Programming/Java] - 자바 기본형과.. 2022. 3. 17.
[Java] 자바 환경변수 설정하기 자바 환경변수 설정 자바를 처음 설치했을 때, OS가 JDK를 참조할 수 있도록 그 경로들을 환경변수로 설정해야 합니다. 자바 환경변수는 아래의 순서에 따라 설정합니다. JAVA_HOME 등록 CLASS_PATH 등록 bin폴더 Path 등록 확인 JAVA_HOME 등록 1. 설정 클릭 2. 설정 > 시스템 3. 설정 > 시스템 > 정보 4. 설정 > 시스템 > 정보 > 고급 시스템 설정 5. 설정 > 시스템 > 정보 > 고급 시스템 설정 > 환경 변수 6. 시스템 변수 새로 만들기 클릭 7. 변수 이름 : JAVA_HOME , 변수 값 : C:\Program Files\Java\jdk1.8.0_251 (자신의 자바 설치 경로) CLASS_PATH 등록 1. 새로 만들기 클릭 2. 변수 이름 : CLAS.. 2022. 3. 16.
[Network] 3-way handshake, 4-way handshake의 개념 및 동작 원리 OSI 7 계층과 TCP/IP 모델의 전송계층에서 사용되는 프로토콜인 TCP과 UDP의 가장 큰 차이점은 신뢰성에 있습니다. TCP는 3-way handshake와 4-way handshake를 통해 신뢰성을 구축하여 클라이언트와 서버를 연결하여 데이터를 보내고 UDP는 오직 데이터만을 빠르게 보내어 신속성을 보장합니다. 이번 포스팅에서는 3-way handshake와 4-way handshake의 개념 및 동작원리에 대해 살펴보겠습니다. 3-way handshake 3-way handshake는 세션을 연결하기 위해서 3번의 일련의 과정을 통해서 수행됩니다. 클라이언트는 서버에게 연결을 요청하겠다는 요청(SYN) 패킷을 보냅니다. 이때 클라이언트는 서버에 SYN+ACK 응답을 기다리는 SYN-SENT .. 2022. 3. 13.
세션(Session), 쿠키(Cookie), JWT(JSON Web Token) 의 개념 및 차이점 웹 개발을 할 때 세션과 쿠키를 사용하는 이유는 무엇일까요? 세션과 쿠키를 사용하는 이유는 아래와 같은 HTTP 프로토콜의 두 가지 특성(Connectionless, Stateless)에서부터 시작됩니다. 1. Connectionless(비연결성) HTTP 프로토콜은 인터넷상에서 데이터를 주고 받기위한 서버/클라이언트 모델을 사용합니다. 클라이언트는 request를 보내고 서버는 요청을 처리하여 response를 보내게 되는데 response를 받은 클라이언트는 연결 상태가 유지되지 않고 끊어버립니다. 이러한 작동방식은 많은 사용자들의 요청을 처리하기 위해 적합합니다. 2. Stateless(비상태성) 서버는 한번 끊어진 클라이언트의 상태 정보를 저장하지 않습니다. 따라서 어떠한 클라이언트의 상태정보를 .. 2022. 3. 12.
반응형