[Java] ClassName.class가 뭐지..?
2022. 3. 23. 00:55
Java & Kotlin
0.🚶들어가며 스프링 공부를 시작하며 아래와 같은 코드를 마주쳤습니다. 스프링 컨테이너에 관한 코드인데 가장 오른쪽을 살펴보면 AppConfig.class 라는 인자를 넘겨주고 있는 모습을 볼 수 있었습니다. 이때 AppConfig.class가 뭐지..? 라는 생각이 들었습니다. 그리고 다음과 같은 사고과정을.. 거쳐갔습니다. AppConfig.class 라고 쓰는 걸 보니 AppConfig의 static 변수인가? AppConfig는 내가 만든 클래스인데 그럼 부모 클래스인 Object 클래스에 저런 static 변수가 있었던가? Object 클래스에 저런 static 변수가 없는데..? 1.Class Literal 관련된 내용을 검색하다보니 위와 같은 키워드를 얻을 수 있었고, Oracle docs에..
[Spring] @Autowired 해야하는데 조회 빈이 여러 개라면..
2022. 3. 22. 02:05
Spring
0.❓문제상황❓ 스프링 컨테이너에 빈 등록을 아래와 같이 한 경우를 생각해보겠습니다. 위 코드를 설명을 간단히 설명하면 아래와 같이 두 구성으로 이루어져 있는 상황입니다. 할인 정책 할인 정책에 의존성이 있는 오더 서비스 또한 할인 정책은 두 가지로 Fix, Rate 방식이 있는 상태이죠. 세 클래스 모두 @Component 어노테이션을 붙였기 때문에 스프링 컨테이너에 빈으로 등록됩니다. 이때 문제가 생깁니다. OrderServiceImpl 클래스의 생성자를 보시면 두 번째 인자로 DiscountPolicy를 받는 것을 알 수 있고 Autowired로 의존성 주입이 될 것을 예상할 수 있습니다. 그런데.. DiscountPolicy로 조회한 빈이 위 같은 상황에서는 Fix와 Rate 방식 두 가지로 조회..
[운영체제(OS)] 디스크 구조와 디스크 스케줄링
2022. 3. 11. 23:46
CS/운영체제
0.🚶들어가며 이번 글에서는 저장장치의 대표적인 예인 디스크에 대해 알아볼 예정입니다. 디스크의 구조는 어떠한지, 디스크 스케줄링은 무엇인지에 대한 내용을 다뤄보도록 하겠습니다. 1.⚪디스크의 구조 위 그림은 디스크의 구조를 보여줍니다. 몇 가지에 대해 알아보도록 하겠습니다. 1) 플래터 플래터는 표면의 자성체와 자기를 이용해 0과 1의 데이터를 저장합니다. 2) 섹터와 블록 섹터는 하드 디스크의 가장 작은 저장 단위입니다. 하나의 섹터에는 한 덩어리의 데이터가 저장되고 이들이 모여 플래터가 됩니다. 블록은 논리적인 개념에서의 가장 작은 단위입니다. 하드디스크와 컴퓨터 사이에 데이터를 전송하는 단위이고 메모리에서는 블록마다 주소가 배정됩니다. 정리하면 하드 디스크 입장에서는 섹터가 가장 작은 저장 단위이..
[Java] 람다식과 스트림 - (1) 람다식 기본
2022. 3. 11. 04:04
Java & Kotlin
0.🚶들어가며 자바는 JDK1.5에서 추가된 제네릭으로 한 번, JDK1.8에서 추가된 람다식의 등장에서 또 한 번 큰 변화가 생겼다고 합니다. 람다식의 도입으로 객체지향 언어였던 자바는 함수형 언어의 기능까지 갖추게 된 것이죠. 개인적으로 자바스크립트의 Arrow Function과 고차 함수가 매우 마음에 드는 기능이라고 생각했었는데요. 자바에서도 람다식과 스트림이라는 개념으로 비슷한 기능을 제공해준다는 사실이 매우 반가웠고, 이를 소개하기 위해 글을 써보려합니다. 1.📕람다식이란? 람다식은 메서드를 하나의 "식"으로 표현한 것입니다. 파이썬이나 자바스크립트와 비교한다면 자바는 메서드 하나를 정의하는 과정이 상당히 귀찮습니다. 람다식은 자바의 메서드 정의 과정을 굉장히 간편하게 해주고, 적절히 사용한다..
[운영체제(OS)] 입출력 시스템 개요
2022. 3. 8. 21:36
CS/운영체제
0.🚶들어가며 이번 글에서는 입출력 시스템의 개요를 소개해보려 합니다. 입출력 장치는 무엇이 있는지, 컴퓨터 주변 장치는 무엇인지, 주변장치와 필수 장치 사이의 통신은 어떻게 이루어지는지 등에 대해 알아보도록 하겠습니다. 1.💽주변장치에 대하여 컴퓨터는 필수 장치인 CPU와 메모리, 주변장치인 입출력 장치와 저장장치로 구성됩니다. 또한 각 장치는 메인보드에 있는 버스로 연결되죠. 오늘 알아볼 내용은 대부분 주변장치에 대한 이야기입니다. 주변장치는 데이터 전송 속도에 따라 아래 두 가지로 구분됩니다. 1) 저속 주변장치 메모리와 주변장치 사이에 오고 가는 데이터 양이 적어 데이터 전송률이 낮은 장치입니다. 키보드가 대표적인 예입니다. 2) 고속 주변장치 메모리와 주변장치 사이에 오고 가는 데이터 양이 많아..
[Java] List 정렬에 대하여.
2022. 3. 6. 22:22
Java & Kotlin
0.🚶들어가며 자바에서 List를 정렬하는 방법에 대해 찾아보다가 추가적인 몇몇 개념들을 살펴보게 되었습니다. List를 정렬하는 방법, Comparable과 Comparator 인터페이스에 대해 글을 써보고 자바 List 정렬 방식인 tim sort에 대해 알아볼 수 있도록 잘 정리된 블로그 글을 소개해보도록 하겠습니다. 1.📚List를 정렬하는 방법 자바의 List를 정렬하는 방법에는 크게 두 가지가 있었습니다. 1) Collections 클래스의 static 메서드인 sort()를 사용하는 방법 사용 방법 먼저 살펴보도록 하겠습니다. public class SortingDemo { public static void main(String[] args) { List list = new ArrayList..
[Java] 동기화 - synchronized와 volatile, Atomic Class에 대하여.
2022. 3. 6. 02:22
Java & Kotlin
0.🚶들어가며 자바 스레드에 대해 공부하다 동기화 관련 개념들을 알게 되었고 이 부분을 처음 접했을 때 혼란스러울 정도로 헷갈렸습니다,, 각 키워드에 대해 알 것 같다가도 다시 보면 헷갈리는 그런 상황이 반복되었습니다. 많은 내용의 글을 보다가 effective java에 나온 동시성 관련 챕터가 가장 도움이 됐던 것 같아 이를 부분적으로 인용하며 관련 개념들에 대해 글을 써보려 합니다. 각 개념의 자세한 내용이나 사용법에 대해서는 자료들이 많아 제 글에서는 다루지 않을 것이고 제가 헷갈렸던 세 개념 간의 차이를 활용 예시를 사용해 소개해볼까 합니다. 1.👫synchronized synchronized 키워드는 메서드나 블록을 한 번에 한 스레드만 수행하도록 보장해줍니다. 동기화의 대표적인 기능인 배타적..
[프로그래머스] 양과 늑대 - Python
2022. 3. 4. 22:45
Algorithm/프로그래머스
🤔 문제 코딩테스트 연습 - 양과 늑대 [0,0,1,1,1,0,1,0,1,0,1,1] [[0,1],[1,2],[1,4],[0,8],[8,7],[9,10],[9,11],[4,3],[6,5],[4,6],[8,9]] 5 [0,1,0,1,1,0,1,0,0,1,0] [[0,1],[0,2],[1,3],[1,4],[2,5],[2,6],[3,7],[4,8],[6,9],[9,10]] 5 programmers.co.kr 😀 풀이 해당 문제는 DFS를 사용하여 풀이했습니다. 우선 문제 풀이를 위해 아래 두 가지 기능이 필요하다고 생각하여 함수 두 개를 작성했습니다. 현재 노드에서 어떤 노드를 가볼 수 있는지 체크하는 함수(getCanGoEdges) 가볼 수 있는 노드에 가보며 양과 늑대의 개수를 갱신하는 함수(DFS) # ..
[운영체제(OS)] 가상 메모리 - (5) 스레싱과 프레임 할당
2022. 3. 3. 03:14
CS/운영체제
0.🚶들어가며 이전 글에서 페이지 교체 알고리즘에 대해 알아보았습니다. 이번 글에서는 스레싱이 무엇인지, 프로세스에게 프레임 할당하는 방식은 어떤 것이 있는지에 대해 알아보도록 하겠습니다. 1.📖스레싱 가상 메모리 시스템에서는 프로세스들이 프레임을 할당받습니다. 만약 많은 수의 프로세스들이 실행 중이라 각각 프로세스들에게 충분한 수의 프레임을 할당하지 못한다면 어떻게 될까요? 페이지 부재가 많이 발생하여 계속해 스왑 영역을 다녀오는 상황이 생길 것입니다. 이런 상황이 벌어지면 하드디스크 입출력이 너무 잦아져 작업이 멈춘 것 같은 상태가 되어버립니다. 이를 스레싱이라고 합니다. 스레싱은 메모리의 크기가 일정할 경우 멀티프로그래밍 정도에 밀접한 관계가 있습니다. 멀티 프로그래밍 정도가 너무 높으면 스레싱이 ..
[운영체제(OS)] 가상 메모리 - (4) 페이지 교체 알고리즘
2022. 3. 3. 01:08
CS/운영체제
0.🚶들어가며 [운영체제(OS)] 가상 메모리 - (3) 요구 페이징(Demand Paging) 0.🚶들어가며 지난 글들에서 살펴보았던 페이징과 세그멘테이션 기법은 MMU의 역할 중 배치(Placement)에 대한 내용이었습니다. 이번 글에서는 가져오기(Fetch) 정책에 대한 내용을 다뤄보도록 하겠 kjhoon0330.tistory.com 지난 글에서는 요구 페이징, 페이지 부재, 지역성 등에 대한 개념을 살펴보았습니다. 이번 글에서는 페이지 부재를 최소화하기 위해서 사용하는 페이지 교체 알고리즘의 개념과 종류를 알아보도록 하겠습니다. 1.📖페이지 교체 알고리즘이란? 프로세스가 요구한 페이지가 메모리에 없을 경우 페이지 부재가 발생합니다. 만약 메모리까지 꽉 차있는 상황이라면 대상 페이지를 정하고 이를..