Programming theory(8)
-
[Programming]의존성(Dependency)
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 의존성의 단어적인 뜻은, "다른 것에 의지하여 생활하거나 존재하는 성질."입니다. 즉, 무언가가 없으면 안 되는 상황이나 관계를 말합니다. 사실 의존성은 객체지향에서 만의 문제는 아닙니다. 그럼, 개발하는 입장에서 의존성은 무엇을 말할까요? 예를 들어 내가 만든 프로젝트 에는 결제 기능이 있습니다. 이 결제는 구글 플레이 스토어를 통해 구매가 이루어집니다. 그렇다면 구글 플레이 결제 라이브러리를 사용해 구연되어 있을 겁니다. 그런데 만약, 프로젝트에 구글 결제 라이브러리가 포함되어 있지 않다면? 해당 기능은 사용할 수 없을 것입니다. "내 프로젝트는 [구글 플레이 결제 라이브러리]에 의존성을 가지고 있다."가 되는 겁니다. 프로젝트와 라이브러..
2022.04.11 -
[Algorithm]기본 탐색 알고리즘
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 지난 글 [Algorithm] 기본 정렬 알고리즘에 이어, 역시나 코딩 테스트 문제의 단골인 기본 탐색 알고리즘에 대해 다뤄보려 합니다. 정렬은 데이터를 '정리'하는 게 중심이었다면, 탐색은 데이터를 '검색'하는 게 중심이 되겠네요. 단골 문제이다 보니 예시 코드는 좋은 것들이 많이 돌아다녀 이번 글에서 코드는 굳이 포함하지 않겠습니다.(설명이 길어 글 길이가 길어진 이유도 있습니다.) 선형 탐색 가장 기본적이고 쉬운 탐색 알고리즘이 아닐까 생각합니다. 순서대로 쭉… 찾는 거니까... 다른 이름으로 순차 탐색이라고도 함 데이터의 집합(배열, 리스트)등의 처음부터 끝까지 순서대로 비교하며 탐색하는 방식 데이터의 양이 늘어나면 수행 시간이 기하급..
2022.04.10 -
[Algorithm]기본 정렬 알고리즘
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 예전에 취업준비를 하면서 코딩 테스트 연습을 한 적이 있습니다. 코딩 테스트 출제 문제는 수학적 사고가 필요한 Dynamic programming이나 트리 같은 자료구조 등 다양 하지만 데이터의 정렬과 탐색이 꽤나 많았던 걸로 기억합니다. 이번 글에서는 기본적인 정렬 알고리즘 몇가지를 다뤄 보려 합니다. 다루는 주 내용은, 알고리즘의 특징과 시간 복잡도 그리고 간단한 코드 예시 입니다. 선택정렬 시간 복잡도 : O(n^2) 공간 복잡도 : O(n) 현재 위치에 들어갈 자리를 선택해 정렬하는 방식 로직 제일 앞에서 부터, 배열값 중 가장 작은 값을 찾음 찾은 가장 작은값을 현재 인덱스와 교체 위 과정 반복 코드 예시 void selectionS..
2022.04.10 -
[Computer science]메모리 단편화(Fragmentation)
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 냉장고 정리를 해본 적이 있나요? 저 같은 경우에는 예전에 자취를 하면서, 꽉 찬 냉장고를 정리한 적이 있습니다. 냉장고 정리를 하고 나니(버린 것이 아닌 내용물들의 재배치만 했습니다.) 꽉 차 보였던 냉장고에 여유공간이 생기게 됐죠. 냉장고 전체를 메모리라고 보고, 냉장고에 들어있는 내용물들을 메모리를 차지하는 데이터라고 생각해보죠. 분명 더이상 들어갈 자리가 없는 냉장고인데 재배치를 하고 나니 여유 공간이 생겼습니다. 이는 애초에 수치적인 공간이 부족했던 게 아니라 일정 크기의 내용물이 들어갈 연속된 공간이 없던 것입니다. 냉장고의 빈곳 일부일부를 다 합치면 김치통 하나 더 들어갈 자리는 있지만, 각각의 부분에는 한 번에 넣을 수 없다는 ..
2022.04.09 -
[Computer science]컨텍스트 스위칭(Context switching, 문맥 교환)
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 간혹 그런 일이 있지 않나요? 무언가 일을 하고 있었는데 다른 일이 치고 들어오는 경우요. 이때 치고 들어온 일을 처리하고 이전에 하던 일을 다시 하려고 하면, 무슨 일을 했었는지 어디까지 했는지 잘 기억이 안나는 경우가 있습니다. 이럴 때 내가 무슨 일을 했는지, 어디까지 했는지, 다음은 무얼 하면 되는지 등을 메모라도 해놨다면 참 좋았을 텐데 하고 후회하기도 합니다. 멀티 프로세스 환경의 CPU 또한 마찬가지입니다. CPU가 어떤 프로세스를 실행하고 있는 상태에서 인터럽트가 왔을 때, 우선순위가 높은은 프로세스라면 지금 수행하고 있는 작업을 중단하고 요청 온 프로세스를 수행해야 합니다. 이때 아무런 메모도 없이 수행한다면? 저처럼 아무것도..
2022.04.09 -
[OOP] 가상 함수(Virtual function or Virtual method)
이 글은 이전에 운영하던 깃 블로그에서 옮겨온 글입니다. 서론 객체지향 프로그래밍의 대표적인 개념들이 있습니다. 추상화, 캡슐화, 상속성, 다형성, 동적 바인딩 이와 관련된 내용은 추후 다뤄보도록 하고 이번 글에서는 '다형성'에 중점을 둔 가상 함수에 관하여 알아보려 합니다. 왜냐하면 가상 함수는 객체지향 언어의 '다형성'을 가능하게 해 주기 때문이죠. 가상 함수(Virtual function or Virtual method) 가상 함수란 상속하는 클래스 내에서 같은 형태의 함수를 오버 라이딩(overriding) 할 수 있도록, 임시로 선언해놓은 함수를 말합니다. 즉, '일단 이런 함수가 있으니 상속하는 클래스에서 재정의 해서 써라'라는 것이죠. 단어 그대로 가상의 함수인 것입니다. 예를 들어, 아래와..
2022.04.08