[Java] ArrayList는 어떻게 크기가 가변적일까?
2022. 2. 23. 22:32
Java & Kotlin
0.🚶들어가며 자바에서 배열은 크기가 고정되어있습니다. 코드 작성 시 배열에 들어갈 내용을 전부 알고 있다면 배열의 크기도 예상을 할 수 있을 것입니다. 이러한 환경 속에서는 배열을 사용하는 것이 성능면에서나 메모리면에서나 효율적입니다. 하지만 많은 경우 배열에 얼마만큼의 내용이 들어갈지 전부 파악하기가 어렵습니다. Java의 Collection 중 ArrayList 클래스는 이러한 문제점을 해결해줍니다. 바로 가변적인 크기의 배열 기능을 제공해주죠. 즉, 배열로 사용하다가 크기가 부족할 시 더 큰 배열로 확장해줍니다. 이 글은 ArrayList가 어떤 방식으로 가변적인 크기의 배열 기능을 제공해주는 지에 대해 궁금하여 찾아보다 작성하게 되었습니다. 1.📖본문 배열의 크기를 확장하는 코드를 확인하려면 A..
[프로그래머스] 경주로 건설 - Python
2022. 2. 21. 04:17
Algorithm/프로그래머스
🤔 문제 https://programmers.co.kr/learn/courses/30/lessons/67259 코딩테스트 연습 - 경주로 건설 [[0,0,0,0,0,0,0,1],[0,0,0,0,0,0,0,0],[0,0,0,0,0,1,0,0],[0,0,0,0,1,0,0,0],[0,0,0,1,0,0,0,1],[0,0,1,0,0,0,1,0],[0,1,0,0,0,1,0,0],[1,0,0,0,0,0,0,0]] 3800 [[0,0,1,0],[0,0,0,0],[0,1,0,1],[1,0,0,0]] 2100 [[0,0,0,0,0,0],[0,1,1,1,1,0],[0,0,1,0,0,0],[1,0,0,1,0,1],[ programmers.co.kr 😀 풀이 본 문제는 DFS와 메모제이션 기법을 사용해서 풀이했습니다. DFS를..
[운영체제(OS)] CPU 스케줄링 - (1) CPU 스케줄링의 개념
2022. 2. 17. 21:40
CS/운영체제
0.🚶들어가며 이전 글에서는 프로세스와 스레드에 대해 알아보았었습니다. 프로세스가 CPU에 할당을 받아야 작업을 수행한다고 했었죠. 이때 여러 프로세스 중 누가 CPU의 할당을 받을 것인지에 대한 내용을 다룬 CPU 스케줄링에 대해 글을 작성해보겠습니다. 1.⏰CPU 스케줄링이란? 이전 글에서 알아봤듯 프로세스는 생성되고 난 뒤 여러 상태를 거치게 됩니다. 운영체제의 CPU 스케줄러는 Ready 상태의 프로세스 중에서 어떤 프로세스에게 CPU를 할당할지 결정합니다. 이를 CPU 스케줄링이라 하는 것이죠. 또한 Dispatcher는 CPU 제어권을 CPU 스케줄러에 의해 선택된 프로세스에게 넘깁니다. 이를 Context Switch라고 합니다. CPU 스케줄링은 규모에 따라 장기, 중기, 단기 스케줄링으로..
[Java] Garbage Collection(GC)에 대하여.
2022. 2. 16. 22:57
Java & Kotlin
0.🚶들어가며 이전 글에서 JVM의 중요한 역할 중 하나가 메모리 관리라고 소개했습니다. 자바에서는 메모리 관리를 가비지 컬렉터(GC)를 사용해 자동으로 수행합니다. 이번 글에서는 GC에 대해 소개해보도록 하겠습니다. 1.💻Garbage Collection(GC)이란? 프로그램을 개발하다 보면 유효하지 않은 메모리인 가비지가 발생하게 됩니다. C언어를 이용하면 free()라는 메서드를 통해 직접 메모리를 해제해주어야 합니다. 그렇지 않으면 메모리 누수가 발생하고 이는 문제가 될 수 있습니다. 하지만 Java를 이용해 개발하는 과정에서 메모리 해제를 해보신 기억이 보통은 없으실 겁니다. 그 이유는 JVM의 가비지 컬렉터가 불필요한 메모리를 알아서 정리해주기 때문입니다. 메모리 관리라는 까다로운 부분을 JV..
[Java] JVM에 대하여.
2022. 2. 15. 17:01
Java & Kotlin
0. 🚶들어가며 자바 프로그램이 어떤 방식으로 실행되는지에 대해 궁금해져 검색 중 JVM이라는 키워드를 발견했고 이에 대해 정리해보고자 글을 쓰게 되었습니다. 1. 💻JVM이란 무엇인가? Write Once, Run Anywhere. JVM은 Java Virtual Machine의 약자로 자바 가상 머신이라고 부릅니다. 자바는 한번 작성하면 플랫폼에 구애받지 않고 작동되어야 한다는 표어를 내세우고 있습니다. JVM은 자바와 운영체제 사이에서 중개자 역할을 하여 운영체제에 상관없이 프로그램을 실행할 수 있도록 도와줍니다. 또한 JVM의 중요한 역할 중 하나는 메모리 관리입니다. 자바에서는 메모리 관리를 가비지 컬렉터(GC)를 사용해 자동으로 수행합니다. 이에 대한 내용 역시 다룰 것이 많아 관심이 있으시다..
[운영체제(OS)] 프로세스와 스레드 - (3) 스레드
2022. 2. 14. 20:26
CS/운영체제
0. 🚶들어가며 프로세스와 스레드 3편입니다. 이번 글에서는 프로세스와 항상 같이 나오는 개념인 스레드(Thread)에 대해 알아보겠습니다. 1. 📕스레드의 개념 1) 스레드의 정의 스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위이다. 이전 글에서 살펴보았듯 CPU를 할당받은 프로세스는 작업을 수행합니다. 이때 CPU가 처리하는 작업 단위가 프로세스로부터 전달받은 스레드(lightweight process)입니다. 집을 짓는 작업을 프로세스로 비유하면 스레드는 집을 짓는 세부 작업들인 설계, 공사, 인터레어 정도로 비유할 수 있습니다. 위 글만 보면 프로세스와 스레드가 어떤 차이인지 감이 잘 오지 않습니다. 따라서 프로세스와 스레드의 차이점에 대해 더 살펴보겠습니다. 2) 프..
[운영체제(OS)] 프로세스와 스레드 - (2) 프로세스 제어 블록과 문맥 교환
2022. 2. 14. 01:36
CS/운영체제
0. 🚶들어가며 프로세스와 스레드 2편입니다. 이번 글에서는 1편에서 개념만 소개했던 프로세스 제어 블록, PCB에 대해 좀 더 알아보고 시분할 방식과 관련된 개념인 문맥 교환(Context switch)에 대해서 알아보겠습니다. 1. 📕프로세스 제어 블록과 문맥 교환 1) 프로세스 제어 블록(PCB) 프로세스 제어블록(PCB)는 CPU가 프로세스를 실행할 때 필요한 중요 정보들을 보관하는 자료구조입니다. 운영체제 커널의 Data 영역에서 관리되고 있죠. 1편에서 살펴본 바와 같이 모든 프로세스는 고유의 PCB를 가집니다. 또한 PCB는 프로세스 생성 시 만들어져 실행이 완료된 후 폐기됩니다. 그렇다면 PCB에 저장되는 정보는 무엇인지, 각 정보는 무슨 역할을 하는지에 대해서 알아보겠습니다. (1) 프로..
[운영체제(OS)] 프로세스와 스레드 - (1) 프로세스란?
2022. 2. 13. 22:50
CS/운영체제
0.🚶들어가며 프로세스라는 말은 개발 공부를 시작하며 정말 많이 들어봤으나 누군가에게 설명할 수 있을 정도로 알고 있는 것 같지 않아 이에 대해 정리해보고자 글을 써봅니다. 1.📕프로세스란? 1) 프로세스의 개념 (1) 프로그램과 프로세스의 차이 프로그램은 어떤 데이터를 사용하여 어떤 작업을 할지 그 절차를 적어 놓은 것이며 하드디스크와 같은 저장장치에 보관됩니다. 프로세스는 프로그램을 실행한 것인데 "실행했다"라는 말은 프로그램이 메모리에 올라가 작업이 진행된다는 것입니다. 프로세스를 한마디로 말하면 "실행 중인 프로그램" 이라고 할 수 있습니다. 앞으로 설명할 내용은 현대 운영체제 방식을 가정하고 진행합니다. 즉, 메모리에 여러 프로세스가 올라가고 실행시키는 방식(시분할 방식)에서의 내용입니다. (2..
[프로그래머스] [1차] 셔틀버스 - Python
2022. 2. 13. 19:32
Algorithm/프로그래머스
🤔 문제 https://programmers.co.kr/learn/courses/30/lessons/17678 코딩테스트 연습 - [1차] 셔틀버스 10 60 45 ["23:59","23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59", "23:59"] "18:00" programmers.co.kr 😀 풀이 본 문제의 핵심은 콘이 마지막 버스에 가장 늦게 탑승해야 한다는 것입니다. 출근자들을 순서대로 버스에 태워 보낸다고 생각하고 마지막 버스에 자리가 남는다면 마지막 버스 출발시간에 도착하면 되고 마지막 버스가 다 차있다면 마지막 버스에 ..
[Java]✏️마커 인터페이스에 대하여.
2022. 2. 12. 21:22
Java & Kotlin
0. 들어가며🚶 String 클래스에 대하여 공부하다 String 클래스가 구현한 인터페이스 중 Serializable 이라는 인터페이스가 눈에 띄었습니다. Serializable은 직렬화를 위한 인터페이스로 객체를 파일에 저장하거나, 다른 서버로 보내거나 받거나 등의 일을 하기 위해 구현해야 하는 인터페이스라고 소개되어있습니다. public interface Serializable { } ?? 그런데 인터페이스에 아무 내용이 없죠.. 아무 내용이 없는 인터페이스가 어떤 식으로 위와 같은 기능을 제공할 수 있는지 궁금해져 찾아보니 마커 인터페이스라는 키워드를 얻을 수 있었고 이에 대해 정리해보려고 합니다. 1. 마커 인터페이스(Marker Interface)❗ 1) 마커 인터페이스(Marker Inter..