이분 탐색(Binary Search) 알고리즘
·
JAVA/알고리즘
개요이분 탐색(Binary Search) 알고리즘 간단하게 알아보기이분 탐색이란이분 탐색은 정렬된 데이터에서 특정 값을 찾는 데 사용되는 알고리즘으로, 시간 복잡도가 O(log n)인 매우 효율적인 탐색 방법입니다. 배열을 두 부분으로 나누며 탐색 범위를 점차 좁혀가는 방식으로 동작합니다.이분 탐색의 특징정렬된 데이터에서만 사용할 수 있습니다.탐색 속도가 빠르며, 특히 데이터의 크기가 커질수록 유리합니다.순차 탐색(Linear Search)보다 훨씬 적은 연산으로 원하는 데이터를 찾을 수 있습니다.이분 탐색의 원리배열의 중간값을 기준으로 찾고자 하는 값과 비교찾는 값이 중간값보다 작으면 왼쪽으로, 크면 오른쪽으로 탐색 범위 조정탐색 범위를 반복적으로 절반으로 줄여 나가며 찾고자 하는 값을 탐색이분 탐색의..
JAVA(spring) - HTTP 통신 방식 3가지(RestTemplate, WebClient, OpenFeign)
·
JAVA/기타
개요 Spring Framework은 다양한 HTTP 요청 방식을 지원하여 웹 서비스와의 통신을 할 수 있습니다. 이 포스팅에서는 Spring에서 사용하는 주요 HTTP 요청 방식인 RestTemplate, WebClient, 그리고 OpenFeign에 대해 알아보겠습니다. 각각의 특징, 사용법, 그리고 장단점을 살펴보면서 Spring에서의 HTTP 통신을 깊이 이해할 수 있습니다. 1. RestTemplate RestTemplate은 Spring Framework에서 제공하는 동기식 HTTP 통신을 위한 클라이언트입니다. RestTemplate은 주로 Spring MVC 기반의 애플리케이션에서 사용되며, 다양한 HTTP 메서드(GET, POST, PUT, DELETE 등)를 지원하고 JSON, XML ..
JAVA - ArrayList 간단하게 정렬(sort)하기(오름차순&내림차순)
·
JAVA/기타
개요 JAVA언어에서 자주 사용하는 컬렉션중 하나인 ArrayList 간단한 방법으로 정렬하기 1. Collections.sort() 2. List.sort() 3. Stream sorted() 1. Collections.sort() Java의 Collections 클래스는 ArrayList를 포함한 모든 컬렉션을 정렬하는 데 사용할 수 있는 sort() 메서드를 제공합니다. 오름차순으로 정렬하려면 인수 없이 sort() 메서드를 호출 내림차순으로 정렬하려면 Collections 클래스의 reverseOrder() 메서드를 sort()의 인수로 추가하여 호출 List numberList = new ArrayList(List.of(23, 1000, -1, 0, -55, 7)); Collections.sor..
Java - String(문자열) .isEmpty() vs .isBlank() 차이점
·
JAVA/기타
Java에서 String(문자열) 데이터를 다루다보면, 해당 데이터가 존재하는지 공백인지 체크하는 경우가 자주 있습니다. Java에서는 공백 문자열 체크를 위한 기본 메서드가 여러가지 존재하는데, 그 중 String 클래스 멤버 메서드인 .isEmpty()와 .isBlank() 각각 특징 및 차이점이 무엇인지 확인해보겠습니다. .isEmpty() // String.java public final class String { public boolean isEmpty() { return value.length == 0; } } isEmpty()는 해당 문자열 객체의 길이를 체크하여 boolean 값을 리턴한다. 문자열의 길이가 0인 경우, true 리턴 Java 6 이후 버전에서 사용 가능하다. .isBlan..
Springboot에서 CircuitBreaker 설명 및 사용법
·
JAVA/기타
CircuitBreaker(서킷브레이커)란? Fault Tolerance(=장애 허용 시스템)에서 사용되는 대표적인 패턴으로써 서비스에서 타 서비스 호출 시 에러, 응답지연, 무응답, 일시적인 네트워크 문제 등을 요청이 무작위로 실패하는 경우에 Circuit을 오픈하여 메세지가 다른 서비스로 전파되지 못하도록 막고 미리 정의해놓은 Fallback Response를 보내어 서비스 장애가 전파되지 않도록 하는 패턴 (대표적으로 MSA 환경에서 사용) 서킷브레이커 종류 Netflix Hystrix https://github.com/Netflix/Hystrix 넷플릭스에서 만든 라이브러리로 MSA 환경에서 분산된 서비스간 통신이 원활하지 않은 경우에 각 서비스가 장애 내성과 지연 내성을 갖게하도록 도와주는 라이..
Spring Boot 2.7 + JPA + GraphQL 예제
·
JAVA
개요 SpringBoot + JPA + GraphQL을 이용한 간단한 예제 프로젝트 구현 프로젝트 구성 https://start.spring.io/ Java 17 Spring Boot 2.7.1 Gradle Dependencies Spring for GraphQL Spring for JPA Spring Web H2 Database Lombok IntelliJ 프로젝트 환경 구성 1. File > Project Settings > Project > Project SDK Java17로 변경 2. Settings > Build, Execution, Deployment > Build Tools > Gradle 설정 변경 Bulid and run using: Intellij IDEA Run tests using:..
Codility 간략 소개
·
JAVA/알고리즘
1. Codility란?A, https://codility.com/tour/기업 대상 서비스이 서비스는 주로 구직자의 코딩 실력을 검증하고자 할때 사용됩니다. B, https://codility.com/programmers/프로그래머 대상 서비스 무료 서비스로 알고리즘을 공부하고 문제풀이에 도전해 보고 싶은 분을 위한 것입니다. 2. 프로그래머 대상 서비스 - 알고리즘 테스트 메인화면에서 스크롤을 조금 내리면,아래 화면을 볼 수 있다.위 화면에서 [See All Lessons] 버튼 클릭 여러가지 Lesson 목록이 보인다.Lesson 1 Iterations아마도 반복문 관련 문제를 제공할것같다. BinaryGapSTART 1. 문제 출제 영역( only 영어.... )- 문제에 대한 설명 및 조건2. ..
[JAVA] 소수 구하기 + 실행시간 단축
·
JAVA/알고리즘
Contents소수(Prime Number) : 1과 자기 자신만으로 나누어 떨어지는 1보다 큰 양의 정수 Contents 첫번째, n 보다 작은 정수를 나누어 보며 소수 구하는 법 두번째, 1번 방법 마법의 코드 한줄을 통해 실행 시간 단축하는 법 세번째, n 보다 작은 소수를 나누어 보며 소수 구하는 법 첫번째, n 보다 작은 정수를 나누어 보며 소수 구하는 법 public class prime { public static void getPrime(int num){ boolean flag; //소수 판별을 위한 true/false int cnt = 0; //소수의 총 개수를 확인하기 위한 변수 for(int i=2; i
선형 큐(Linear Queue)
·
JAVA/알고리즘
- FIFO - First In First Out(선입선출)- 인큐(EnQueue)를 통해 자료 입력, 디큐(DeQueue)을 통해 자료 출력 * 매표소, 가장 먼저 줄서있는 사람에게 표를 먼저 제공한다. * 선형 큐 알고리즘은 Rear가 배열의 끝에 닿아 있으면, 앞에 배열의 빈 부분(Q[0])이 남아 있어도 더이상 삽입연산을 하지 못한다.메모리를 효율적으로 관리하지 못함. 이러한 문제점을 해결하기 위해 원형 큐가 만들어졌다. JAVA 소스코드123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778..
스택(Stack) 알고리즘(JAVA)
·
JAVA/알고리즘
- 제한적으로 접근할 수 있는 나열 구조(접근 방법은 언제나 목록의 끝에서만 가능)- 선형 구조 LIFO - Last In First Out(후입선출)- 푸쉬(push)를 통해 자료 입력, 팝(pop)을 통해 자료 출력 * 프링글스, 통 안에 가장 나중에 들어간(push) 감자칩부터 먹게 된다(pop). 스택 활용 예- 역순 문자열 만들기- 수식 괄호 검사- 수식 후위표기법으로 변환, 후위표기 수식의 연산 JAVA 소스코드1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848..
퀵 정렬(Quick Sort)
·
JAVA/기타
- 리스트 가운데서 하나의 원소를 고름(pivot 선정)- pivot 앞에는 pivot보다 작은 값이 오고, pivot 뒤에는 pivot보다 큰 값들이 오도록 리스트를 둘로 분할한다.- 분할된 두 개의 리스트에 대해 재귀함수를 통해 이 과정을 반복한다.- 시간복잡도 : 최악 O(n^2), 평균 O(nlogn) JAVA 소스코드12345678910111213141516171819202122232425262728293031323334public class Quick { public void sort(int[] data, int l, int r){ int left = l; int right = r; int pivot = data[(l+r)/2]; do{ while(data[left] pivot) right--..
삽입 정렬(Insertion Sort)
·
JAVA/기타
- 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함.- 배열의 두 번째 데이터 부터 연산을 시작함.- 시간복잡도 : O(n^2) [1회전] [2회전] [3회전] [4회전] JAVA 소스코드123456789101112131415161718192021222324252627public class Insertion { public void sort(int[] A){ int size = A.length; int temp = 0; int j = 0; for(int i = 1; i =0 && temp
선택 정렬(Selection Sort)
·
JAVA/기타
- 주어진 데이터 중 최소값을 찾음- 최소값을 맨 앞에 위치한 값과 교환- 정렬된 데이터를 제외한 나머지 데이터를 같은 방법으로 정렬- 시간복잡도 : O(n^2) [1회전] [2회전] [3회전] [4회전]선택 정렬의 장점- 데이터의 양이 적을 때 좋은 성능을 나타냄.- 작은 값을 선택하기 위해서 비교는 여러번 수행되지만 교환횟수가 적다. 선택 정렬의 단점- 100개 이상의 자료에 대해서는 속도가 급격히 떨어져 적절히 사용되기 힘들다. JAVA 소스코드12345678910111213141516171819202122232425262728293031public class Selection { public void sort(int[] data){ int size = data.length; int min; //최..
버블 정렬(Bubble Sort)
·
JAVA/기타
- 두 인접한 원소를 검사하여 정렬하는 방법- 시간복잡도 : O(n^2) [1회전] [2회전] [3회전] - 세번의 회전에 걸쳐 정렬은 완료되었지만 프로그램은 남은 데이터의 비교연산을 계속 처리함.- 정렬은 비교연산을 통해 가장 큰 데이터 부터 끝에 정렬됨. 버블 정렬의 장점- 구현이 쉽다.- 이미 정렬된 데이터를 정렬할때 가장 빠르다. 버블 정렬의 단점- 다른 정렬에 비해 정렬 속도가 느리다.- 역순배열을 정렬할때 가장 느리다. JAVA 소스코드1234567891011121314151617181920212223242526public class Bubble { public void sort(int [] data){ int temp = 0; for(int i=data.length-1; i>=0; i--){..