본문 바로가기

전체 글

(56)
자료 구조 (2) : 배열(Array, List) 배열동일한 데이터 타입을 가지는 값을 순서대로 저장하는 자료 구조 종류(Java 기준)정적 배열(Array) : 고정된 크기를 가짐동적 배열(List) : 변경 가능한 크기를 가짐특징0 ~ n-1까지의 인덱스 사용연속된 메모리 공간 사용 데이터 타입의 크기와 인덱스를 사용해서 데이터에 O(1)으로 접근 가능* 데이터 조회 예시배열의 시작 주소가 1000이고 int의 크기는 4바이트 배열은 [10, 20, 30]이라 가정10, 20, 30 각각은 4바이트 공간을 차지(10 : 1000~1003, 20 : 1004~1007, 30 : 1008 ~ 1011)시작 주소 + (인덱스 * 데이터 크기)로 바로 조회 가능(인덱스 2의 값은 1000 + ( 2 * 4) = 1008) 사용 상황데이터를 순서대로 저장데이..
자료 구조 (1) : 자료 구조와 시간 복잡도(Big(O)) 자료 구조데이터(자료)를 효율적으로 사용할 수 있도록 데이터를 구성하는 방법 자료 구조의 예시(Java)추상 자료 구조(인터페이스)구현체ListArrayList, LinkedListSetHashSet, LinkedHashSet, TreeSetMapHashMap, LinkedHashMap, TreeMapQueueLinkedList, ArrayDeque, PriorityQueue 그렇다면 얼마나 효율적인지는 어떻게 알 수 있을까요? 시간 복잡도, 공간 복잡도 알고리즘의 효율성을 분석할 때는 다음 두 가지 질문을 생각합니다 1. 시간 복잡도 : 이 알고리즘은 끝나는 데 얼마나 시간이 걸릴까?2. 공간 복잡도 : 이 알고리즘을 실행하기 위해 얼마나 많은 공간이 필요할까? 시간 복잡도를 바탕으로 효율성을 계산하는..
Garbage Collection : 개념, 작동 과정, Java 발전 과정 Garbage Collection(GC)프로그램이 동적으로 할당했던 메모리 영역 중 필요없는 부분을 자동으로 해제하는 기능 목적메모리 누수 방지개발자 실수를 줄이고 부담 감소(직접 메모리 관리 X)메모리 해제를 잊는 경우해제한 메모리를 다시 해제하는 경우이미 해제된 메모리에 접근하는 경우단점메모리 해제 타이밍을 알기 어려워 메모리 제어가 어려움GC 동작 중에는 다른 동작을 모두 멈추기에(Stop-The-World) 성능 저하 발생개발자의 실수로 메모리 누수 발생 가능사용하지 않는 객체이지만 여전히 접근 가능할 경우* Stop-The-World : GC 작업 중 애플리케이션의 모든 스레드를 중단, 오버 헤드 발생의 원인이므로 이 시간을 최소화하는 것이 핵심 GC 제공 언어 : Java, Python, Ja..
Java의 컴파일 방식과 JVM 구조 Java Compile Java는 "Write Once, Run Anywhere"라는 철학을 바탕으로 설계되어 OS 독립적으로 실행될 수 있습니다 1. 왜 다른 언어들은 OS마다 다르게 실행되나요? 고급 언어 : C, Java, Python, ....저급 언어 : 기계어 저급 언어로 프로그램을 짜는 것은 인간에게 너무 어렵고 컴퓨터는 고급 언어를 이해하지 못합니다따라서, 인간은 고급 언어로 프로그램을 짜고 컴퓨터가 이해할 수 있는 저급 언어로 바꿔주는 컴파일러가 필요합니다 OS : Windows, Mac OS, Linux, Android, iOS, .... CPU는 고유한 명령어 집합(ISA)을 가지고 있고 OS는 ISA에 맞는 기계어 명령을 생성하여 CPU와 상호작용합니다따라서, CPU 및 OS의 IS..
String, StringBuffer, StringBuilder의 차이와 사용법 String class MyString { private final char[] value; public MyString(char[] input) { this.value = new char[input.length]; System.arraycopy(input, 0, this.value, 0, input.length); } public MyString concat(MyString str) { char[] newValue = new char[value.length + str.length()]; System.arraycopy(value, 0, newValue, 0, value.length); System.arraycopy(str..
교착 상태란 무엇인가: 발생 조건과 해결 방안 교착 상태프로세스 혹은 스레드가 회수되지 않을 자원을 요청하며 무한히 대기하는 현상 예시)스캐너와 프린터가 각각 1개씩 존재할 때, 프로세스 A가 스캐너를 점유한 상태에서 프린터를 요청하고 프로세스 B는 프린터를 점유한 상태에서 스캐너를 요청한다면 두 프로세스는 영영 완료되지 못할 것입니다 교착 상태 발생 조건 교착 상태는 다음의 네 가지 조건이 동시에 성립할 때 발생하고 각각의 예방 방안은 다음과 같습니다. 1. 상호 배제 : 자원은 한 번에 하나의 프로세스 혹은 스레드만 사용 가능 - 자원을 공유, 자원을 공유하는 것을 사실상 힘듬 2. 점유와 대기 : 프로세스 혹은 스레드가 적어도 하나의 자원을 점유한 상태에서 다른 자원을 요청하며 대기- 필요한 자원을 모두 할당하거나 아예 할당하지 않음, 자원의 ..
운영체제란 무엇인가 : 핵심 개념과 역할 운영체제프로그램을 위해 사용자의 하드웨어, 시스템 자원을 할당하고 일반적 서비스를 제공하는 시스템 소프트웨어 모든 프로그램은 실행하기 위해 하드웨어가 필요합니다. 매번 사용자가 직접 하드웨어를 조작하기는 쉽지 않으므로 이를 지원하는 시스템 소프트웨어인 운영체제가 등장하였습니다. 운영체제는 메모리 내 커널 영역에서 응용 프로그램은 사용자 영역에 구분해서 저장하고 실행됩니다. - 커널 : 운영체제의 핵심 서비스운영체제의 대표적인 핵심 서비스에는 세 가지가 있습니다. 1. 가상화(Virtualization): 물리적인 하드웨어를 논리적인 가상 공간으로 나누어서 하나의 하드웨어에서 여러 애플리케이션이 독립적으로 실행2. 동시성(Concurrency)  : 스레드와 프로세스를 관리하여 여러 프로그램들이 동시에 겹..
메모리: RAM, 캐시 메모리, 그리고 CPU 접근 방식 이해하기 RAM실행할 프로그램의 명령어와 데이터가 저장되는 공간으로 전원이 꺼지면 저장된 내용도 사라짐 RAM을 조리대, CPU를 요리로 생각해서 이해해봅시다조리대가 넓으면 넓을수록 조리 도구와 재료를 근처에 두고 더 빠르게 요리를 할 수 있습니다만약 조리대에 올려 놓지 않았다면 조리 도구, 재료를 가지러 이동하는 시간이 걸립니다단, 조리대가 일정 이상 넓어지면 어차피 더 놓을 조리 도구, 재료도 없어지므로 무한정 속도가 빨라지지는 않습니다 캐시 메모리 우선 저장장치의 특징에 대해 알아봅시다CPU와 저장장치가 가까울수록 빠르다CPU와 가까운 저장장치(빠른)는 가격이 비싸다(저장 용량이 작다)CPU와 저장장치의 위치는 다음과 같습니다코어 내부 : CPU - 레지스터코어 외부 : 메모리 - 보조기억장치CPU의 연산 ..