전체 글 36

JVM 클래스 로드

클래스 로더란?클래스 로더는 컴파일 된 자바의 class 파일을 동적으로 로드하고 JVM 내 Runtime Data Area에 배치하는 작업을 수행한다.클래스 로더에서 class 파일을 로딩하는 순서는 아래 세단계로 이루어진다.Loading : 클래스 파일을 가져와서 메모리에 로드Linking : 검증Initialization : 변수 초기화이때 로딩 기능은 한번에 메모리에 올리는 것이 아니라 어플리케이션 내에 필요한 경우에 동적으로 메모리에 적재한다.우리는 클래스나 클래스 내의 static 멤버들은 실행과 동시에 메모리에 올라간다고 착각하기 쉽다.하지만 생각해보면 언제 사용할지도 모르는데 모두 올리는 건 비효율적이라는 것을 알 수 있다.결과적으로 JVM은 모든 클래스를 메모리에 올리는 것이 아니라 클래..

개발/java 2024.08.27

[Spring] IoC, DI

*구선생님과 김영한님의 스프링 핵심원리 기본편을 바탕으로 이해한 내용을 정리한 것입니다! 틀린 내용이 있다면 언제든 댓글로 알려주시면 감사합니다!!!*IoC(Inversion of Control)란?Spring을 접하면 가장 먼저 접하는 단어라고 생각한다. 물론 처음 보는 사람은 절대로 한번에 이해하기 힘든 내용이기도 하다.(난 그랬다) 우선 직역을 하면 제어의 역전이라는 의미이다. 무엇에 대한 제어를 역전했다는 것인지 솔직히 와닿지는 않는다. 결론부터 말하자면 객체의 생성, 생명주기의 관리까지 모든 객체에 대한 제어권이 뒤바뀐 것을 의미한다. 그럼 IoC가 없다면?간단하다 제어의 역전의 반대라고 생각하면 된다! 객체의 생성, 생명주기 관리를 직접 관리하는 것이다.아래 코드가 그 예시이다./..

개발/spring boot 2024.04.24

[백준] 6236 용돈관리

https://www.acmicpc.net/problem/6236 6236번: 용돈 관리현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로www.acmicpc.net문제현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로 하였다. 현우는 통장에서 K원을 인출하며, 통장에서 뺀 돈으로 하루를 보낼 수 있으면 그대로 사용하고, 모자라게 되면 남은 금액은 통장에 집어넣고 다시 K원을 인출한다. 다만 현우는 M이라는 숫자를 좋아하기 때문에, ..

개발/PS 2024.02.16

[백준] 2751 병합정렬

https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.www.acmicpc.net풀이해당 문제는 단순 정렬 문제이다. 하지만 정렬에는 종류가 아주 많다는거^^... 병합정렬로 풀이를 제출하면서 이전에 제출 기록이 있길래 코드를 살짝 봤더니...핰ㅋㅋㅋㅋㅋㅋㅋ그냥 ArrayList로 입력받은 값들을 넣은 다음 Collection.sort로 아주 간단하게 해결해버렸다...ㅎㅎ 편함을 추구한 과거의 나 반성하자 아무튼 병합정렬은 무엇이냐 하면 수열이 있을 때 중간 값을 기준으..

개발/PS 2023.10.25

[프로그래머스]신규 아이디 추천

https://school.programmers.co.kr/learn/courses/30/lessons/72410 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr public String solution(String new_id) { // 1단계 new_id의 모든 대문자를 대응되는 소문자로 치환합니다. new_id = new_id.toLowerCase(); // 2단계 new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다. new_id = new_id.replaceAll("[^a-z0-9-_.]", ..

개발/PS 2023.09.21

[프로그래머스]대충 만든 자판

https://school.programmers.co.kr/learn/courses/30/lessons/160586 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 public int[] solution(String[] keymap, String[] targets) { int[] answer = new int[targets.length]; HashMap map = new HashMap(); for (String s : keymap) { for (int j = 0; j < s.length(); j++) { int key = map.containsKey(..

개발/PS 2023.08.16

[Spring]BeanFactory와 ApplicationContext

스프링 컨테이너란? 스프링에서 관리하는 Bean의 생성과 소멸 등의 라이프사이클을 관리하며 IoC를 이용하여 애플리케이션 컴포넌트를 관리하는 일종의 관리자이다. 일반적으로 IoC 컨테이너 혹은 컨테이너라고 부른다. 우리가 흔히 말하는 스프링 컨테이너는 ApplicationContext를 의미한다. 스프링에서는 BeanFactory와 이를 상속받은 ApplicationContext 이렇게 두개의 컨테이너를 활용할 수 있다. 우선 BeanFactory의 상속 구조를 알아보면 아래 이미지 구조로 되어있다. BeanFactory Bean을 등록하는 방법은 xml 설정이나 자바 어노테이션을 통해서 가능하다. 이때 BeanFactory는 해당 객체들을 생성할 때 사용자의 요청이 있을 때 생성하는 지연로딩 방식으 생..

개발/spring boot 2023.08.09

[Spring]관심사의 분리

관심사의 분리란? 영한님의 설명에 의하면 쉽게 말하자면 자신이 맡은 역할과 책임에만 집중하며 객체를 생성하고 연결하는 역활과 실행하는 역할이 명확히 분리되어있는 것을 의미한다.. 애플리케이션을 공연이라 했을 때 인터페이스들을 배역이라고 가정하자. 이때 실제 배역에 맞는 배우를 선택하는 것을 누가할 것인가라고 봤을 때 각 배역을 맡은 배우들이 선택하는 것이 아니라 제 3자가 선택해주는 것이 맞다. 만약 로미오의 배역을 A라는 배우가 했을 때 줄리엣이라는 배역의 배우를 B 배우가 해야한다 라고 정해버리는 순간 A의 책임은 공연을 해야하는 책임에서 줄리엣의 배역까지 정해버리는 책임까지 가지게 된다. 다시 말해 OOP의 원칙 중 단일 책임의 원칙(SRP)을 위반하게 된다. 이를 위해 나온 것이 관심사의 분리이다..

개발/spring boot 2023.08.07