본문 바로가기

분류 전체보기111

[Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리, GC 알고리즘, G1 GC Garbage Collection(가비지 컬렉션)이란? C언어에서는 malloc() 함수로 할당한 메모리를 사용하지 않을 때, 개발자가 직접 free() 함수로 해제한다. Java는 개발자가 메모리를 직접 해제해 주는 경우가 없다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 정리해 주기 때문이다. 이번 글에서는 가비지 컬렉션의 개념과 동작 원리, Java9 이후 기본 GC 알고리즘인 G1 GC에 대해 알아보자. 먼저 가비지(Garbage)는 유효하지 않은 메모리로, 더 이상 참조되지 않아 사용하지 않은 메모리이다. 이때 가비지 컬렉션(Garbage Collection, gc라고도 한다)는 메모리 누수를 방지하기 위해 주기적으로 메모리를 청소한다. 그럼 메모리는 언제 점유되고, Garbage는 .. 2023. 9. 22.
SQL 기본 문법 정리 프로그래머스 SQL 고득점 Kit으로 공부한 내용들을 정리합니다. SUM, MAX, MIN COUNT 데이터의 개수를 셀 때 사용한다. SELECT COUNT(NAME) FROM table; 중복되지 않은 이름 데이터 개수를 센다면 DISTINCT를 사용한다. SELECT COUNT(DISTINCT NAME) FROM table; 문제 풀이 가격이 제일 비싼 식품의 정보 출력하기 SELECT * FROM FOOD_PRODUCT WHERE PRICE = (SELECT MAX(PRICE) PRICE FROM FOOD_PRODUCT); SELECT * FROM FOOD_PRODUCT WHERE PRICE = (SELECT MAX(PRICE) PRICE FROM FOOD_PRODUCT); SELECT * FRO.. 2023. 9. 20.
Builder 패턴이란? 객체를 생성하는 방법에는 생성자 패턴, 정적 팩토리 메서드 패턴, 수정자 패턴, 빌더 패턴이 있다. Builder 패턴은 무엇이고 어떤 특징이 있을까? 왜 @Builder 패턴을 사용할까? Effective Java 아이템2를 살펴보면, "생성자에 매개변수가 많다면 빌더를 고려하라."를 확인할 수 있다. 정적 팩터리와 생성자 방식은 매개변수가 다양하면 대응이 어렵다는 단점이 있다. 이를 해결하기 위해 1) 점층적 생성자 패턴을 사용할 수 있다. public class User { private final String name;// 필수 private final int age;// 선택1 private final String gender;// 선택2 // 필수 생성자만 필요한 경우 public User(S.. 2023. 9. 20.
ResponseEntity - Spring Boot에서 응답하기 웹 서비스에서는 많은 데이터를 정해진 형식에 맞게 가공하여 전달한다. 대표적인 요청 및 데이터 형식을 HTTP(HyperText Transport Protocol)이라고 한다. HTTP 응답은 status code, header, body로 구성되어 있다. 이 세 가지 요소를 갖춘 객체를 생성하는 것이 ResponseBody와 ResponseEntity이다. ResponseBody ResponseBody는 HttpEntity를 상속받아 데이터와 상태 코드를 제어하는 클래스이다. HttpMessageConverter가 해당 Annotation이 붙은 객체를 response body에 직렬화하여 동작한다. 다음과 같이 @ResponseBody 어노테이션을 명시하면 응답 형식을 설정할 수 있다. 다만 데이터만.. 2023. 9. 20.
P15683. 감시 https://www.acmicpc.net/problem/15683 15683번: 감시 스타트링크의 사무실은 1×1크기의 정사각형으로 나누어져 있는 N×M 크기의 직사각형으로 나타낼 수 있다. 사무실에는 총 K개의 CCTV가 설치되어져 있는데, CCTV는 5가지 종류가 있다. 각 CCTV가 감 www.acmicpc.net 설명 설마... 모든 경우의 수를 순열로 구해서 하는 것인가? 했는데 그러했다. 이 문제는 cctv의 타입에 따라 탐색할 때, 방향을 잘 결정하는 것이 중요하다. 탐색할 수 있는 방향을 상우하좌로 표현한다면, 1, 2, 3, 4, 5번 cctv는 다음 방향을 갖는다. 코드 import java.io.BufferedReader; import java.io.FileInputStream; i.. 2023. 9. 20.
프로그래머스: 이상한 문자 만들기 https://school.programmers.co.kr/learn/courses/30/lessons/12930 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 설명 처음에 단어를 공백 기준으로 나눈 다음에, 단어별로 홀짝 인덱스를 판단해서 구현했다. 또한 단어는 하나 이상의 공백문자로 되어있다. 코드 class Solution { public String solution(String s) { String answer = ""; String[] words = s.split(""); int idx = 0; for(String word : words) { /.. 2023. 9. 15.
알고리즘에서 약수 개수 찾기(Feat. 제곱근까지만 검사해도 되는 이유!) 16의 약수의 개수를 찾는 코드를 작성해보자. 16을 1부터 16까지 반복문을 통해 나눈다. - 만약 나누어 떨어진다면 -> 약수이다 - 나누어 떨어지지 않으면 -> 약수가 아니다 그런데 항상 1부터 16까지 전부를 검색해야 할까? 16의 제곱근은 4이다. 16의 약수는 1, 2, 4, 8, 16이다. 1, 2, 4, 8, 6 제곱근인 4까지만 검사하면, 나머지 약수는 4를 기준으로 대칭으로 나온다. 따라서 4보다 큰 약수를 찾을 필요 없다 public int countDivisors(int n) { int count = 0; int root = (int) (Math.sqrt(n)); for(int i = 1; i 2023. 9. 11.
👩‍💻 자바 코테 cheat sheet(최신 업데이트: 10.18) 헷갈리는 개념들 모아모아 정리하기! +) 참고하면 좋을 블로그: Java 코딩테스트 관련 팁 ✔️ 배열, 리스트, 문자열 크기 - 배열: length 변수 사용 - arraylist: size() 메서드 사용 - 문자열 크기: length() 메서드 사용 // 배열 int[] arr = {1,2,3,4,5}; System.out.println(arr.length);// 5 // 리스트 List list = new ArrayList(); list.add(1); list.add(2); list.add(3); System.out.println(list.size());// 3 // 문자 String str = "hello"; System.out.println(str.length());// 5 ✔️ Math.sq.. 2023. 9. 8.
[☁️ 구름톤 챌린지] 4주차 학습일지 - 1 문제 16. 연합 전형적인 BFS 문제이다. 이 문제는 BFS에서 queue에 이 다음에 방문할 값을 넣을 때하는 방문 체크에서, 이 다음 값을 방문했는지 확인하는 것이 아닌 현재 값을 방문했는지 계속 확인하는 바람에 틀렸다. 방문 체크하는 값을 바꾸어주니 통과되는 것을 확인할 수 있었다. import java.io.*; import java.util.*; class Main { static int N, M; static int[][] map; static boolean[] visited; static int result; static Queue queue; public static void main(String[] args) throws Exception { BufferedReader br = new .. 2023. 9. 8.