TIL - 2번째
2024. 11. 3. 18:35
카테고리 없음
https://www.acmicpc.net/problem/31562 오늘은 백준 에서 31562 전주 듣고 노래 맞히기 에 대해서 진행해보도록하겠습니다. 문제 :윤수와 정환은 「전주 듣고 노래 맞히기」라는 게임을 할 예정이다. 「전주 듣고 노래 맞히기」는 주어진 노래의 전주를 듣고 먼저 제목을 맞히는 사람이 점수를 얻어 최종적으로 점수가 더 많은 사람이 이기는 게임이다. 절대 음감을 가진 윤수는 노래의 첫 네 음만 듣고도 어떤 노래든 바로 맞힐 수 있다. 따라서, 정환은 윤수를 이기기 위해 첫 세 음만으로 노래를 맞히게 해주는 프로그램을 만들려고 한다. 우선 정환이 알고 있는 노래 제목, 음이름 등을 데이터로 만든 뒤 프로그램을 구현하기 시작했다. 예를 들어, 다음은 TwinkleStar(반짝반짝 작은 ..
static 과 JVM 메모리 모델을 이해해보자!
2024. 9. 1. 00:13
Language/Java
객체지향 프로그래밍 시작하기Static 과 메모리의 관계를 알아보도록 해보자이 글의 목표는 static 키워드와 메모리 관계에 있어서 이해를 돕고자 또한, JVM 에 사용하는 메모리 모델을 통해 자바 프로그래임이 어떤식으로 동작하는지에 대한 원리를 학습하는것을 목표로 합니다. 1. static 과 메모리의 관계2. static 멤버 들의 접근 방법3. private 생성자와 static과의 관계4. JVM 이 상요하는 메모리 영역5. class, object, instance의 상호관계 1. static 과 메모리의 관계메인(시작) 클래스는 왜 객체 생성(new)없이 실행이 되나요?public class StaticTest { public static void main(String[] args) {..
N+1 문제 해결: Java 백엔드 개발자를 위한 데이터베이스 쿼리 최적화
2024. 6. 5. 17:57
DB
오늘은 JPA N+1의 문제 해결에 대해서 글을 공유해드리려고 합니다. * Java 백엔드 개발자를 위한 데이터베이스 쿼리 최적화에 적합한 내용입니다.개발자가 직면하는 가장 일반적인 성능 병목 현상 중 하나가 N+1입니다. 애플리케이션이 단 한 번의 쿼리로 동일한 결과를 얻을 수 있는데도 N+1번의 데이터베이스 쿼리를 수행할 때 발생합니다. 과도한 데이터베이스 Hit는 느린 응답 시간, 높은 서버 부하, 열약한 사용자 경험으로 이어질 수 있습니다. 원인을 함께 파악해 보고 개발자가 이러한 문제를 어떻게 완화할지에 대해서 다양한 전략과 기법에 대해서 적어보겠습니다.앞서, N+1 문제가 무엇인지 알아보도록 하겠습니다.N+1 문제란 무엇인가?애플리케이션이 개체목록(예시: 제품, 사용자 또는 게시물 목록)을 가..
스트림 Stream 을 사용하는 이유 - Modern Java in Action
2023. 10. 2. 20:43
Language/Java
자바 8은 데이터베이스 질의 언어에서 표현식을 처리하는 것처럼 병렬 연산을 지원하는 스트림이라는 새로운 API 를 제공한다. 데이터베이스 질의 언어에서 고수준 언어로 원하는 동작을 표현하면, 구현(자바에서는 스트림 라이브러리가 이 역할을 수행) 에서 최적의 저수준 실행 방법을 선택하는 방식으로 동작한다. 즉, 스트림을 이용하면 에러를 자주 일이키며 멀티코어 CPU 를 이용하는 것보다 비용이 훨씬 비싼 키워드 synchronized를 사용하지 않아도 된다. 더보기 멀티코어 CPU의 각 코어는 별도의 캐시(빠른 메모리) 를 포함하고 있다. 락을 사용하면 이러한 캐시가 동기화되어야 하므로 속도가 느린 캐시 일관성 프로토콜 인터코어 통신이 이루어진다. 조금 다른 관점에서 보면 결국 자바8에 추가된 스트림 API..
Modern Java in Action - Reviews(모던 자바 인 액션 - 리뷰)
2023. 10. 2. 20:28
Language/Java
안녕하세요, 늘 부족하고 배움을 갈구하는 2년차 백엔드 개발자 던킨 입니다. 오늘 Modern Java in Action 책을 사고 읽으면서 좋은 내용들이 많아 리뷰를 하려고합니다. 많은 개발자 분들이 이미 이 책에 관련해서 리뷰와 함께 많은 리소스를 공유 해주었다고 해도 과언이 아니지만, 저 또한 이 책에 푹 빠져있는 독자로써 또한, 제 블로그를 찾아오시는분들을 위해 짧게 나마 잘 정리 해서 공유드리고 싶어 리뷰를 시작했습니다. '함수형 프로그래밍은 뭔가요?' - 함수형 프로그래밍은 프로그래밍 기법을 지칭한다. 함수형 프로그래밍에서는 함수를 값으로 취급한다. 자바 8의 놀라운 점은 함수형 프로그래밍의 여러 장점을 친숙한 자바 문법으로 접목했다는 것이다. 훌룡한 자바 8의 설계 덕분에 함수형 프로그래밍을..
lecture 2. 멀티 스레드 프로그램 구성
2023. 8. 17. 01:30
lecture/Java 멀티스레딩, 병행성 및 성능 최적화
Runnable 인터페이스로 다른 스레드에서 코드를 실행하는 방법과 진해지는 정도의 수준. 그리고 스레드 클래스의 유용한 기능을 알아보고 IDE를 사용해 스레드를 디버그 하는 법도 해볼게요. 1. 스레드 생성하는 방법 Java 에서는 JDK 가 모든 스레드의 관련 속성과 메서드를 스레드 클래스로 압축합니다. 그래서 새 스레드를 만들려면 새 스레드 객체부터 생성해야하죠!! 스레드 객체 자체는 기본적으로 비어있스빈다. 그러니 runnable 인터페이스를 구현하는 클래스의 객체를 해당 생성자에 전달해야합니다. run 메서드에 어떤 코드를 넣든 운영 체제가 스케줄링하자마자 새 스레드에서 실행될 겁니다. 자바 8부터는 람다로 줄일수 있죠?!?! 스레드 객체에서 start 메서드를 호출해 스레드를 시작해야합니다. ..
ArrayList 와 LinkedList 의 차이점
2023. 5. 12. 00:46
Language/Java
빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList보단 LinkedList를 사용하는것이 좋다. 그러나 인덱스 검색이나, 맨 마지막에 객체를 추가하는 경우에는 arrayList가 더 좋은 성능을 발휘한다. ArrayList에 객체를 추가하면 인덱스 0부터 차례대로 저장된다, 또한 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 밀려난다. ArrayList를 생성하고 런타임 시 필요에 의해 객체들을 추가하는 것이 일반적이지만, 고정된 객체들로 구성된 List를 생성할때도 있다. 이런 경우에는 Arrays.asList(T...a)메소드를 사용하는 것이 간편하다. √ List list = Arrays.asList(T...a) T타입 파라미터에 맞게 asList(..
정렬 알고리즘 - 1
2023. 1. 15. 23:23
lecture
오늘은 버블 정렬(Bubble sort) , 선택정렬(Selection sort)와 삽입정렬(Insertion sort) 에 대해서 알아보도록하겠습니다. 정렬은 데이터의 탐색의 최적화를 만들기 위해 순서대로 나열해주는 기능입니다. 프로그래밍 컴퓨터 분야에서 사용하는 데이터의 경우 숫자의 순서나 어휘의 순서대로 정렬한 다음 사용해야 되는 경우가 거의 항상 발생합니다 이를 얼마나 효과적으로 해결할 수 있는 지가 정렬의 핵심입니다. 또한, 이진 탐색이라는 강력한 알고리즘을 사용하기 위해선 데이터의 정렬은 필수입니다. 버블 정렬은 굳이 요즘에 쓰이지 않는다고 합니다, 그 이유는 직관적으로는 이해가 쉬운 정렬로 구현하기 쉽지만 일반적으로 O(n^2) 의 시간복잡도를 갖기 때문에 실전에서는 거의 사용할 일이 없습니..