본문 바로가기

전체 글54

차근차근 시작하는 운영체제 - Part 4: 스케줄링(Scheduling) 안녕하세요! 이번에는 운영체제에서 자주 등장하는 중요한 주제, 스케줄링(Scheduling)에 대해 알아보려고 합니다.스케줄링은 이름만 들으면 막연히 어렵게 느껴질 수 있지만, 실제로는 매우 논리적이고 이해하기 쉬운 개념입니다.이번 글에서는 기본적인 스케줄링 개념과 알고리즘을 중심으로 차근차근 설명해 드릴게요. 이 글은 제가 읽은 운영체제 책 내용을 정리한 것으로, 여러분께 쉽고 명확하게 전달하는 것을 목표로 하고 있습니다.이번 글에서 다룰 내용은 다음에 이어질 멀티레벨 피드백 큐(Multi-Level Feedback Queue)를 이해하는 데 중요한 기초가 됩니다.함께 시작해 볼까요?스케줄링이란 무엇인가요?스케줄링은 CPU와 같은 자원을 여러 프로세스에 공정하고 효율적으로 배분하기 위한 정책입니다.운영.. 2024. 12. 30.
[iOS] 차근차근 시작하는 익스트림 프로그래밍(XP) - 1: 기본 개념과 핵심 가치 알아보기 들어가기 전에안녕하세요! 익스트림 프로그래밍(Extreme Programming, XP), 많이 들어보셨나요? 잘 알고 계신가요? 사실 저도 처음엔 잘 몰랐답니다. 😅 용어도 어렵고 개념도 복잡해서 이해하기 힘들었죠. 그래서 이번 기회에 XP에 대해 차근차근 알아보려고 합니다.함께 시작해볼까요? 🚀XP의 탄생 배경XP는 1990년대 후반, 소프트웨어 개발의 효율성을 높이기 위해 등장한 방법론이에요. 당시 개발자들은 변화하는 요구사항과 빠듯한 일정 속에서 고품질의 소프트웨어를 개발해야 하는 어려움에 직면했죠. 이를 해결하기 위해 켄트 벡(Kent Beck)이 XP를 제안했습니다. XP는 고객의 요구에 신속하게 대응하고, 팀원 간의 협업을 강화하며, 지속적인 개선을 추구하는 것을 목표로 합니다.XP의 핵.. 2024. 12. 30.
차근차근 시작하는 운영체제 - Part 1: 가상화(Virtualization) 안녕하세요. 오늘은 운영체제에서 가장 중요한 개념 중 하나인 가상화(Virtualization)에 대해 이야기해 보려 합니다. 가상화는 이름만 들으면 복잡하고 어렵게 느껴질 수 있지만, 차근차근 이해해 보면 운영체제의 핵심을 파악하는 데 큰 도움이 됩니다.이 글은 제가 읽은  Operating Systems: Three Easy Pieces의 내용을 바탕으로 정리한 것으로, 여러분께 쉽고 명확하게 전달해 드리는 것을 목표로 하고 있습니다. 자, 그럼 시작해 볼까요?가상화란 무엇인가요?가상화는 하나의 물리적 자원을 여러 개의 "가상 자원"으로 보이게 하는 기술입니다. 이를 통해 사용자나 애플리케이션이 마치 자신만의 독립적인 자원을 가지고 있는 것처럼 느끼도록 만드는 것이죠.종이화폐와 금융 시스템의 숫자로 .. 2024. 12. 15.
[Swift] 인터페이스 설계: 클래스 기반과 컴포지션 패턴의 비교 소프트웨어 설계에서 인터페이스와 클래스 구조를 어떻게 구성하느냐에 따라코드의 유지보수성, 확장성, 재사용성이 크게 달라집니다.이번 포스팅에서는 자동차 인터페이스를 설계하는 두 가지 접근 방식단일 클래스 기반 설계와 컴포지션 패턴을 비교해보고,이를 높은 응집력(High Cohesion)과 단일 책임 원칙(SRP) 관점에서 해석해 보겠습니다.1️⃣ 첫 번째 예제: 단일 클래스 기반 설계첫 번째 방법은 자동차의 각 기능을 구체적인 클래스에서 직접 구현하는 방식입니다.예를 들어 현대소나타, 현대아이오닉, 현대코나하이브리드와 같은 클래스는 각각 달리기, 멈추기그리고 각 자동차 유형에 맞는 경고 기능을 구현합니다.💡 인터페이스 정의protocol 달리기능력 { func 달리기()}protocol 멈춤능력 { fu.. 2024. 8. 13.
[iOS] 파이브 라인즈 오브 코드: 4장 요약 및 정리 (효율적인 코드 작성을 위한 리팩터링 기법 효율적인 코드 작성을 위한 리팩터링 기법들어가기 전에여러분, 코드 작성하면서 “이렇게 하면 유지보수가 쉬울까?” 고민해본 적 있으시죠?"파이브 라인즈 오브 코드"의 4장은 이런 고민을 해결할 수 있는 팁들을 가득 담고 있어요.제가 경험했던 코드 문제들과 함께 책에서 제시한 해결책을 나눠볼게요.4.1 간단한 if 문 리팩터링if 문에서 else를 사용하지 말 것여러분도 if-else 문을 작성하다가 코드가 너무 중첩되어서 복잡해진 경험 있으신가요?저도 그런 경험이 많아요. 예를 들어 나이 검사를 할 때: if age >= 18 { print("Welcome!")} else { print("You are not allowed.")} 이런 코드가 많아지면 가독성이 떨어지고 버그가 발생할 가능성이 높.. 2024. 7. 24.
[iOS] 파이브 라인즈 오브 코드: 1~3장 요약 및 정리 (리팩터링: 왜 필요하고 어떻게 할까?) 리팩터링: 왜 필요하고 어떻게 할까? 안녕하세요, 여러분!최근에 제가 개발하면서 느꼈던 불편함과 이를 해결하기 위해 리팩터링을 어떻게 적용했는지 공유해보려고 합니다. 요즘 iOS 개발을 하면서 코드가 점점 복잡해지는 걸 느꼈어요. 특히 유지보수가 어려워지고, 새로운 기능을 추가할 때마다 버그가 생기는 문제를 겪었죠.그래서 이번 기회에 리팩터링에 대해 진지하게 고민해보게 되었습니다. 이 책을 통해 여러분은 다음과 같은 내용을 배울 수 있습니다:  • 코드 가독성 향상: 가독성이 높은 코드를 작성하는 방법 • 효율적인 함수와 변수 사용법: 함수와 변수를 효율적으로 사용하는 방법 • 조건문과 반복문의 최적화: 조건문과 반복문을 최적화하여 성능을 높이는 방법 • 코드 분할과 리팩터링: 코드를 작은 단위로 분할하.. 2024. 7. 23.
[Swift] Task, async let, Task Group 동시 작업의 모든것 비동기 작업을 수행할 때, 여러 개의 작업을 동시에 진행해야 하는 경우가 있습니다. 이를테면, 두 개의 이미지를 다운 받고, 그 두개의 이미지를 return하는 작업이 있을 수 있습니다. 다음은 코드 예시입니다. func fetchTwoURLs() async throws -> (Data, Data) { let url1 = URL(string:"https://www.apeth.com/pep/manny.jpg")! let url2 = URL(string:"https://www.apeth.com/pep/moe.jpg")! let data1 = try await self.download(url: url1) let data2 = try await self.download(url: url2) return (data.. 2024. 3. 7.
[Swift] Actor, @MainActor, Task, Sendable의 모든것 Actor기본적으로 액터의 코드는 백그라운드 스레드에서 실행됩니다. Swift의 구조적 동시성에서 스레드는 낮은 수준에서 존재하며, 코드는 어떤 스레드에나 할당될 수 있습니다. 메인 스레드와 백그라운드 스레드의 구별은 중요하며, 이를 위해 '액터'라는 개념이 사용됩니다. 액터를 사용하면 코드가 어떤 스레드에서 실행되어야 하는지를 명시할 수 있으며, 이를 통해 복잡한 동시성 문제를 효과적으로 처리하고 코드를 깔끔하게 유지할 수 있습니다. Swift에서 Actor는 백그라운드 스레드에서 코드를 실행하는 데 도움이 되며, 멀티스레딩 코드를 안전하게 실행하는 데 중요한 역할을 합니다. 멀티스레딩 코드에서 가장 큰 문제점은 공유 상태의 문제입니다. 속성이 하나 이상의 스레드에서 변경될 수 있다면, 코드는 일관성 .. 2024. 3. 5.