Uknow's Lab.
article thumbnail
[디자인 패턴] Adaptor(어댑터) 패턴
CS 지식/디자인 패턴 2024. 5. 8. 00:47

어댑터 일본 여행을 갈 때 필요한 준비물 중 하나는 전기 어댑터(Adapter/Adaptor)입니다.한국은 220V를 쓰지만 일본은 110V를 쓰기 때문에, 플러그 모양이 서로 다릅니다.때문에 220V를 110V으로 바꿔주는 어댑터가 필요합니다. 객체지향 프로그래밍과 디자인 패턴에서 사용되는 어댑터 패턴 역시 이와 비슷합니다.기존의 클래스 인터페이스를 새로운 인터페이스에 맞추고자 사용하죠.서로 호환되지 않는 두 클래스를 연결할 때 사용합니다.  업체에서 제공한 클래스를 사용해야 할 때, 이 클래스의 인터페이스가 기존에 사용하던 인터페이스와 꽤나 다릅니다.    기존 코드를 바꾸기 어려울 때,기존의 사용하던 코드를 새 업체의 코드에 맞게 적응시켜주는 클래스를 만듬으로써,서로 호환되는 형태의 요청으로 만들어..

article thumbnail
[디자인 패턴] Singleton(싱글톤) 패턴
CS 지식/디자인 패턴 2024. 3. 16. 01:21

인스턴스가 단 하나밖에 없는 객체 책임을 분리하고 유연성을 키우기 위해 클래스를 나누었지만 Config, 로그 기록용 클래스 등 인스턴스가 단 하나만 있어도 작동하는 경우는 꽤나 있습니다. 이 경우, 인스턴스를 2개 이상 생성할 경우 괜히 자원만 더 잡아먹을 뿐이죠. 싱글톤 패턴 구현 : private 생성자, getInstance, static 3총사 public class MySingleton { private static MySingleton instance = null; // 생성자를 private로 두어 기본 생성자를 못쓰게 함 private MySingleton() { } public static MySingleton getInstance() { if (instance == null) { in..

article thumbnail
[디자인 패턴] Factory(팩토리) 패턴
CS 지식/디자인 패턴 2024. 3. 10. 01:35

new 키워드 Pizza pizza = new CheesePizza(); new라는 키워드는 자바의 키워드 중 하나로, 객체를 생성한다는 점에서 한 번도 사용하지 않고 코딩하기는 사실상 불가능합니다. Pizza pizza; if(type == "cheese") { pizza = new CheesePizza(); } else if(type == "veggie") { pizza = new VeggiePizza(); } else if (type == "pepperoni") { pizza = new PepperoniPizza(); } pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); 일련의 구상 클래스가 있을 때, 위와 같은 형태가 나타나게 됩니다. 인터페이스..

article thumbnail
[혼공스터디 11기] 컴퓨터구조+운영체제 회고

혼공스터디 11기 어느덧 혼공스터디 11기가 끝났습니다. 전공자이긴 하지만, 사람의 뇌는 휘발성인 탓에... 탄탄한 CS 지식 및 역량을 갖추기 위해 컴퓨터 구조와 운영체제 공부를 다시 하려고 하던 중, 인스타를 보다가 혼공스터디를 모집한다기에 신청했던게 엊그제 같은데, 벌써 끝났네요. 언젠가 해야지~ 하면서 카테고리만 만들어놓고, 오랫동안 글 개수 '0개'였던 운영체제 | 컴퓨터구조 카테고리에 글이 생기니 기쁘기도 합니다. 더 기뻐해야 할 것은, 블로그의 글이 늘은게 아니라 제 머리속의 지식이 늘었다는 것이죠 ㅎㅎ 다만 제가 운영체제와 컴퓨터구조를 수업 시간에 분명히 배웠음에도 다시 공부하기로 마음 먹은건 해당 지식들이 가물가물했기 때문이였습니다. 이번에 새로 배우고, 되새긴 내용들도 또 까먹을지 모릅..

article thumbnail
[혼공컴운] 6주차_가상 메모리와 파일 시스템

혼자 공부하는 컴퓨터 구조 + 운영체제 6주차 혼자 공부하는 컴퓨터 구조, 드디어 마지막 주차네요. 가상메모리 : 연속 메모리 할당 스와핑 메모리에 적재된 프로세스 중에서는 현재 실행되지 않는 프로세스도 있죠. 스와핑(swaping)은 현재 실행되지 않는 프로세스를 임시로 보조 기억장치로 쫒아내고, 새로 생긴 빈 공간에 다른 프로세스를 적재해 실행하는 방식입니다. 프로세스들이 쫒겨나는 보조기억장치의 영역을 스왑 영역(swap space)라고 하며, 현재 실행되지 않는 프로세스가 스왑 영역으로 쫒겨나는 걸 스왑 아웃(swap-out), 스왑 영역에 있던 프로세스가 다시 메모리로 복귀하는 것을 스왑 인(swap-in)이라 합니다. 스와핑을 사용한다면, 프로세스들이 요구하는 메모리 주소 공간의 크기가 실제 메..

article thumbnail
[혼공컴운] 5주차_프로세스 동기화와 교착상태

혼자 공부하는 컴퓨터 구조 + 운영체제 5주차 혼공컴운 5주차입니다 가장 기대하고 있던 프로세스 동기화와 교착상태 파트입니다! 프로세스 동기화: 동기화란? 여러 프로세스들은 공동의 목적을 수행하기 위해 서로 협력하며 소통하기도 합니다. 서로 협력하는 프로세스들은 실행 순서와 자원의 일관성을 보장받아야 하기에 동기화(Synchronization)가 필수입니다. . 동기화. 낮설면서도 익숙한 단어입니다 가장 쉽게 접할 수 있는 상황은 아마 달력/일정 애플리케이션의 동기화 기능일텐데요. 윈도우 11에서는 구글 캘린더와 연동하여 구글 계정 내 구글 캘린더에 등록한 일정을 윈도우 11 일정 앱에서 볼 수 있는 기능이 있습니다. 일정 주기마다 구글 캘린더로부터 데이터를 가져오나, 주기가 돌아오기 전에 구글 캘린더의..

article thumbnail
[알고리즘] 에라토스테네스의 체 (Sieve of Eratosthenes)
CS 지식/알고리즘 2024. 1. 30. 00:27

에라토스테네스의 체. 이름이 조금 어려운 알고리즘입니다. 에라토스테네스의 체는 고대 그리스 수학자 에라토스테네스가 고안한 소수(Prime Number)를 찾는 알고리즘 중 하나인데요. 일반적으로 정수 n이 소수인지 확인할 때, for문을 돌리며 2~sqrt(n)으로 나누어 떨어지나 확인하는 방법이 있습니다. 하지만 특정 범위 내 여러 개의 수를 소수인지 판단해야 할 때, 각각 2~sqrt(n)으로 나누어 떨어지는지 확인하는 것은 조금 비효율적일 수 있습니다. 하지만, 처음에 범위 내 숫자들에 대해 소수인지 구해놓고 이후에 각 숫자들이 소수인지 확인한다면 더 빠르게 작동할 수 있습니다. 에라토스테네스의 체 에라토스테네스의 체의 원리를 그림으로 표현하자면 위 이미지와 같습니다. 2 ~ 120 범위 내 숫자들..

article thumbnail
[혼공컴운] 4주차_운영체제, 프로세스, 스레드

혼공 컴퓨터구조 + 운영체제 4주차 어느덧 벌써 4주차에 접어들었네요. 이제 얼마 남지 않은게 느껴집니다. 운영체제를 알아야 하는 이유 운영체제? 컴퓨터는 전원 플러그만 꽂는다고 작동하는 것이 아닙니다. 운영체제라는 특별한 프로그램의 지휘 하에 작동하는데요. 제가 사용하는 운영체제만 하더라도 윈도우, macOS, Linux, 안드로이드 등이 있습니다. 이외에도 iOS, UNIX, Chrome OS, 퓨시아 등 여러 운영체제들이 있죠. 이러한 운영체제들은 1~3주차의 컴퓨터 부품들과 프로그램을 관리하는데 핵심 역할을 합니다. 운영체제는 게임이나 Intellij, 계산기, 브라우저 등과 같은 프로그램으로써 메모리에 적재되어야 합니다. 하지만 운영체제는 매우 특별한 프로그램이므로 항상 컴퓨터가 부팅될 때 메모..

article thumbnail
[혼공컴운] 3주차_메모리, 캐시, 보조기억장치, 입출력장치

혼공 컴퓨터구조 + 운영체제 3주차 컴퓨터구조+운영체제 벌써 3주차 입니다. 메모리와 캐시 메모리 주기억장치에는 RAM과 ROM이 있습니다. 보통 주기억장치를 말하면 RAM을 의미하며, RAM은 전원을 끄면 내용이 사라져 '휘발성' 저장장치라 부릅니다. 반면 하드 디스크, SSD, USB와 같은 보조기억장치는 전원을 껏다 켜도 남아있기에 '비휘발성'이라 합니다. 보조기억장치는 CPU가 직접 접근하지 못하기에, 보조기억장치에는 주로 보관할 대상을, RAM에는 실행할 대상을 저장합니다. 보통 램은 다다익선이라며 지갑이 허락하는 한도 내에서 램의 용량은 큰 게 좋다고 하는데요 램의 용량이 작다면 프로그램 A를 RAM으로 갖고오고, B를 실행시키려면 B를 RAM으로 가지고 와야 합니다. 반면 램의 용량이 크다면..

article thumbnail
[알고리즘] 이분 매칭 (Bipartite Matching)
CS 지식/알고리즘 2024. 1. 18. 22:54

이분 매칭을 간단히 이야기하면 연애 매칭 프로그램입니다. 남과 여 두 그룹이 있고, 남 -> 여 혹은 여 -> 남으로 맘에 드는 이성을 골랐을 때, 커플이 가장 많이 매칭되는 경우를 찾는 것이지요. 좋은 예시가 없을까 하며 돌아다니다가, MIT 오픈 코스 유튜브에서 남과 여를 매칭하는 걸 예로 들길래 이거다! 하고 참고해서 포스팅해봤습니다. https://www.youtube.com/watch?v=HZLKDC9OSaQ&ab_channel=MITOpenCourseWare 이분 그래프 이분 그래프는 k분 그래프의 일종으로 k=2인 경우의 그래프입니다. k분 그래프는 아래와 같이 나타낼 수 있는데요. 집합 V(i), V(j) 가 있다고 했을 때 쉽게 말해서 간선의 양 끝은 서로 다른 그룹이여야 한다는 의미입니..