본문 바로가기

전체 글139

코루틴과 스레드, 그리고 프로세스: 그 유사성과 차이 운영체제를 공부하다 보면 자연스럽게 프로세스(Process)와 스레드(Thread)의 개념을 배우게 됩니다.최근 코루틴(Coroutine)을 공부하면서, 스레드와 비슷한 점이 많아 보이면서도 작동 방식에는 차이가 있다는 점이 흥미로웠습니다.특히, 운영체제에서 배운 프로세스와 스레드의 개념이 코루틴을 이해하는 데 큰 도움이 될 수 있다는 생각이 들어, 나중에 참고할 수 있도록이 세 가지를 비교하며 정리해 보았습니다.프로세스와 스레드 간단 정리프로세스(Process)란?실행 중인 프로그램을 뜻하며, 운영체제가 관리하는 독립적인 실행 단위입니다.각 프로세스는 자체 메모리(Code, Data, Heap, Stack)를 가지고 있으며, 다른 프로세스와 자원을 공유하지 않습니다.스레드(Thread)란?하나의 프로세.. 2025. 1. 24.
프로세스와 스레드 운영체제를 공부하면서 프로세스(Process)와 스레드(Thread)는 개념을 자주 접하게 되었습니다.이 둘은 프로그램이 어떻게 실행되고 동작하는지 설명하는 기본적인 단위인데요, 헷갈리기 쉬운 이 개념을 간단히 정리해보겠습니다.프로세스란 무엇인가?프로세스는 실행 중인 프로그램을 의미합니다.프로그램은 단순히 저장된 코드일 뿐이고, 프로세스는 메모리에서 실행되는 프로그램의 실체입니다.프로세스는 독립적인 실행 단위로, 운영체제는 프로세스마다 고유한 메모리 공간과 자원을 할당합니다.프로세스의 특징:독립적인 메모리 공간:   프로세스마다 Code, Data, Heap, Stack 영역이 독립적으로 존재합니다.   한 프로세스는 다른 프로세스의 메모리에 직접 접근할 수 없습니다.운영체제의 스케줄링 대상:   CPU.. 2025. 1. 24.
프로세스 상태 전이 다이어그램(Process State Transition Diagram) 운영체제에서 프로세스(Process)는 실행 중인 프로그램을 의미합니다. 하지만 하나의 프로그램이 항상 실행 상태에 있는 것은 아닙니다. 프로세스는 실행을 준비하거나, 대기하거나, 종료되는 등 다양한 상태를 거칩니다. 이러한 상태를 시각적으로 나타낸 것이 Process State Transition Diagram입니다. 이번 글에서는 프로세스의 상태와 전이 과정을 쉽게 이해할 수 있도록 정리해 보겠습니다.프로세스의 주요 상태Created (생성 상태)   프로세스가 막 생성된 초기 상태입니다.   아직 CPU를 할당받지 않았으며 실행 준비 중입니다.   다음 상태: Ready 상태로 전환.Ready (준비 상태)   프로세스가 실행 준비를 마친 상태로, CPU를 할당받기 위해 대기합니다.   CPU 스케.. 2025. 1. 24.
운영체제란 무엇인가? 운영체제(Operating System, OS)는 컴퓨터 시스템의 핵심 소프트웨어로, 하드웨어와 소프트웨어를 관리하며 사용자와 컴퓨터 간의 인터페이스 역할을 합니다. 운영체제는 컴퓨터의 다양한 리소스를 효율적으로 관리하고, 응용 프로그램이 하드웨어를 사용할 수 있도록 지원합니다.이번 글에서는 운영체제가 무엇인지와 운영체제가 관리하는 주요 리소스에 대해 정리해보겠습니다.운영체제의 정의운영체제는 다음과 같은 역할을 수행합니다:하드웨어 리소스 관리: CPU, 메모리, 디스크 등 하드웨어 자원을 효율적으로 관리.소프트웨어 리소스 관리: 파일 시스템, 프로세스, 네트워크 등 소프트웨어 자원의 동작을 조율.사용자와 컴퓨터 간의 인터페이스 제공: 사용자 명령을 하드웨어가 이해할 수 있는 형태로 변환.운영체제는 컴퓨터.. 2025. 1. 24.
자료형 한눈에 보기: 비트, 바이트와 정수, 실수, 문자, 논리형 컴퓨터는 데이터를 저장하고 처리하기 위해 자료형(Data Type)을 사용합니다.특히, 정수(Integer)와 실수(Floating Point)는 저장 방식과 연산에서 큰 차이가 있습니다.정수는 이진법으로 정확히 저장할 수 있지만, 실수는 근사값으로 저장합니다.이는 컴퓨터가 실수를 저장할 때 부동소수점(Floating Point) 방식을 사용하기 때문이며, 이로 인해 저장 오차가 발생합니다.또한, 문자(Char)는 직접적으로 문자를 저장하지 않고, 문자에 해당하는 정수값(유니코드)를 저장합니다.이번 글에서는 비트와 바이트의 기본 개념, 정수형과 실수형, 문자형 자료형의 특징, 그리고 Float과 Double의 차이를 중심으로 정리하겠습니다.1. 비트(Bit)와 바이트(Byte)의 기본 개념비트(Bit)란.. 2025. 1. 23.
[Android/Kotlin] 코틀린 컬렉션 함수: any와 all 코틀린의 컬렉션 함수 중 any와 all은 컬렉션 내부의 요소를 조건에 따라 검사할 때 사용하는 매우 유용한 함수입니다.이 두 함수는 조건을 간단하고 가독성 좋게 표현할 수 있어 자주 활용됩니다.\1. any 함수정의컬렉션의 요소 중 하나라도 조건을 만족하면 true를 반환.조건을 만족하는 요소를 찾으면 즉시 검사를 종료합니다.구문collection.any { 조건식 }반환값Boolean: 조건을 만족하는 요소가 하나라도 있으면 true, 그렇지 않으면 false.예제 1: 숫자 리스트에서 짝수가 하나라도 있는지 확인val numbers = listOf(1, 3, 5, 6, 7)val hasEven = numbers.any { it % 2 == 0 }println(hasEven) // 출력: true 리.. 2025. 1. 21.
[Algorithm/Kotlin] 에라토스테네스의 체(Sieve of Eratosthenes) 쉽게 이해하기 에라토스테네스의 체는 특정 범위에서 소수를 빠르고 효율적으로 구하는 방법입니다.작은 소수의 배수를 제거함으로써 소수만 남기는 아이디어를 기반으로 합니다.이 글에서는 코드와 함께 이해한 내용을 정리 해 두도록 하겠습니다.에라토스테네스의 체의 핵심 동작1. i의 범위 제한: i in 2..Math.sqrt(limit.toDouble()).toInt()이 범위는 왜 필요한가?소수의 배수 제거는 대칭적으로 이루어집니다.예: 16의 약수는 (2,8),(4,4)처럼 대칭적으로 나타납니다.따라서 sqrt(limit)​까지만 확인하면 충분합니다.sqrt(16) = 4이므로 i=2,3,4까지만 반복하면 됩니다.코드 예제val limit = 16for (i in 2..Math.sqrt(limit.toDouble()).to.. 2025. 1. 20.
[Android/Kotlin] removeAt: 요소 제거와 반환 동작 이해 코틀린의 MutableList는 동적으로 크기가 조정되는 리스트로, 다양한 메서드를 제공하여 데이터를 관리할 수 있습니다.그중에서도 removeAt 메서드는 특정 인덱스의 요소를 제거하면서 해당 요소를 반환하는 기능을 제공합니다.이번 글에서는 removeAt의 동작 원리와 사용 예제를 살펴보겠습니다.1. removeAt 메서드란?removeAt(index)는 리스트의 특정 인덱스에 있는 요소를 제거하고, 그 제거된 요소를 반환합니다. 이 메서드는 다음 두 가지 작업을 수행합니다:리스트에서 요소 제거:지정된 인덱스의 요소를 삭제합니다.삭제 후, 리스트의 크기가 1 감소합니다.제거된 요소 반환:삭제된 요소 자체를 반환하여, 호출한 코드에서 해당 값을 사용할 수 있습니다.2. removeAt의 동작 과정동작 .. 2025. 1. 17.
[DataStructure/Kotlin] pop과 peak의 차이점: 스택의 두 가지 주요 기능 스택(Stack)은 데이터를 후입선출(LIFO, Last In First Out) 방식으로 저장하는 자료 구조입니다. 스택에서 자주 사용되는 두 가지 주요 연산은 pop과 peak입니다. 이 두 연산은 비슷하게 보이지만, 의미와 사용 목적에서 분명한 차이가 있습니다.이를 이해하기 쉽게 정리 해 보겠습니다. 1. pop과 peak의 정의pop:스택의 가장 위에 있는 요소를 제거하면서 반환합니다.스택의 상태를 변경하며, 크기가 줄어듭니다.peak:스택의 가장 위에 있는 요소를 그대로 반환합니다.스택의 상태를 변경하지 않습니다. 단순히 데이터를 확인하는 용도로 사용됩니다. 2. 코틀린 구현 예제val stack = mutableListOf()fun push(data: Int) { stack.add(dat.. 2025. 1. 17.
[DataStructure/Kotlin] 스택 구현: MutableList vs Array의 차이점과 구현 방법 스택(Stack)은 데이터를 후입선출(LIFO, Last In First Out) 방식으로 저장하는 자료 구조입니다.코틀린에서 스택을 구현할 때 주로 사용하는 두 가지 주요 데이터 구조는 MutableList와 Array입니다.이번 글에서는 두 가지 방법으로 스택을 구현하는 코드와 함께, 각 방식의 차이점과 특징을 비교해보겠습니다.1. MutableList를 사용한 스택 구현MutableList는 코틀린의 동적 리스트로, 크기를 필요에 따라 자동으로 확장하거나 축소할 수 있습니다.이를 사용하면 스택을 간단하고 유연하게 구현할 수 있습니다.코드 예제:val stack = mutableListOf()fun push(data: Int) { stack.add(data) // 스택의 끝에 데이터 추가}fun.. 2025. 1. 17.
[Algorithm/Kotlin] 백준 10816번 숫자 카드 2: 시간 복잡도를 계산해 시간초과 해결하기 이 문제를 풀때, 처음에는 단순히 이중 반복문을 떠올려 문제를 해결했지만 입력 크기를 고려하지 못해 시간 초과 실패를 경험했습니다. 이 경험을 토대로, 단순히 문제를 푸는 것에 그치지 않고 시간 복잡도를 계산하고 효율적인 알고리즘을 설계하는 것이 얼마나 중요한지를 배웠습니다.이후 시간 복잡도를 다시 계산하고, 효율적인 방법(groupingBy)을 도입해 문제를 해결할 수 있었습니다.각각의 문제 풀이법과 시간 복잡도 계산 내용을 정리해 두고자 합니다.문제 설명숫자 카드는 정수 하나가 적혀 있는 카드입니다. 상근이는 숫자 카드 N개를 가지고 있으며, 정수 M개가 주어졌을 때, 이 수가 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성해야 합니다.입력 조건첫째 줄: 상근이가 가지고 있는 숫자 카드의 개수 .. 2025. 1. 16.
[Algorithm/Kotlin] 백준 2164번 카드2: Queue를 활용한 풀이법 문제 설명 N장의 카드가 있습니다. 카드는 1부터 N까지 번호가 붙어 있고, 1번 카드가 제일 위, N번 카드가 제일 아래에 놓여 있습니다. 이 상태에서 다음 동작을 반복하여 카드가 한 장만 남을 때까지 진행합니다:제일 위에 있는 카드를 버린다.그 다음, 제일 위에 있는 카드를 제일 아래로 옮긴다.마지막에 남는 카드를 구하는 프로그램을 작성합니다.문제 해결 아이디어이 문제는 큐(Queue) 자료구조를 사용하면 직관적으로 해결할 수 있습니다. 문제에서 요구하는 동작이 큐의 FIFO(First In First Out) 구조와 일치하기 때문입니다.큐 초기화:   1부터 N까지의 숫자를 큐에 삽입합니다.   예: N=6이면 [1,2,3,4,5,6].홀수와 짝수 턴 처리:   홀수번째 턴:   poll() 메서드.. 2025. 1. 6.
반응형