CS 공부44 함수형 프로그래밍(Functional Programming) 이란? [ 프로그래밍 패러다임(Programming Paradigm) ] 프로그래밍 패러다임(Programming Paradigm)은 프로그래머에게 프로그래밍의 관점을 갖게 하고 코드를 어떻게 작성할 지 결정하는 역할을 한다. 새로운 프로그래밍 패러다임을 통해서는 새로운 방식으로 생각하는 법을 배우게 되고, 이를 바탕으로 코드를 작성하게 된다. 최근의 프로그래밍 패러다임은 크게 아래와 같이 구분할 수 있다. 명령형 프로그래밍: 무엇(What)을 할 것인지 나타내기보다 어떻게(How) 할 건지를 설명하는 방식 절차지향 프로그래밍: 수행되어야 할 순차적인 처리 과정을 포함하는 방식 (C, C++) 객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#) 선언형 프로그래밍: 어떻.. 2022. 9. 11. 뮤텍스(Mutex)와 세마포어(Semaphore) / 동기화문제와 임계영역 동기화 문제를 해결하기 위해 뮤텍스(mutex), 세마포어(Semaphore) 기법 등을 사용할 수 있다. 뮤텍스와 세마포어를 설명하기 위해 알아야 할 용어는 동기화 문제와 임계영역이다. 동기화 문제란 무엇인가? 서로 다른 process나 thread가 메모리 영역을 공유하기 때문에 (여기서, process경우는 IPC 공유 메모리 방식을 이용하는 경우이다.) 여러 process나 thread가 동일한 자원에 동시에 접근하여 엉뚱한 값을 읽거나 수정하게 되는 문제를 말한다. 예시를 통해 알아보자. count++를 CPU 입장에서 분해해보면 3개의 atomic operations으로 나뉜다. count 변수의 값을 가져온다. count 변수의 값을 1 증가시킨다. 변경된 count 값을 저장한다. CPU는.. 2022. 9. 4. 애자일(Agile) 등장배경 초기 소프트웨어 개발 방법은 계획 중심의 프로세스였다. 하지만 지금은? 90년대 이후, 소프트웨어 분야가 넓어지면서 소프트웨어 사용자들이 '일반 대중들'로 바뀌기 시작했다. 이제 모든 사람들이 소프트웨어 사용자들의 대상으로 되면서 트렌드가 급격하게 빨리 변화하는 시대가 도달했다. 이로써 비즈니스 사이클(제품 수명)이 짧아졌고, SW 개발의 불확실성이 높아지게 되었다. 새로운 개발 방법 등장 개발의 불확실성이 높아지면서, 옛날의 전통적 개발 방법 적용이 어려워졌고 사람들은 새로운 자신만의 SW 개발 방법을 구축해 사용하게 된다. 창의성이나 혁신은 계획에서 나오는 것이 아니라고 생각했기 때문이다. 그래서 경량 방법론 주의자들은 일단 해보고 고쳐나가자는 방식으로 개발하게 되었다. 규칙을 적게 만들고,.. 2022. 9. 4. 경쟁 상태(Race Condition)란 ? 경쟁 상태(Race Condition) 두 개 이상의 프로세스가 공통 자원을 병행적으로(concurrently) 읽거나 쓰는 동작을 할 때, 공용 데이터에 대한 접근이 어떤 순서에 따라 이루어졌는지에 따라 그 실행 결과가 같지 않고 달라지는 상황을 말한다. Race의 뜻 그대로, 간단히 말하면 경쟁하는 상태, 즉 두 개의 스레드가 하나의 자원을 놓고 서로 사용하려고 경쟁하는 상황을 말한다. 공통 자원에 여러 프로세스가 동시에 접근할 때 자료의 일관성을 해치는 결과가 나타날 수 있다. Race Condition이 발생하는 경우 1. 커널 작업을 수행하는 중에 인터럽트가 발생할 때 문제점 : 커널모드에서 데이터를 로드하여 작업을 수행하다가 인터럽트가 발생하여 같은 데이터를 조작한다. 해결법 : 커널모드에서 .. 2022. 8. 28. 동적 계획법 (Dynamic Programming) 개념 요약 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법 구체적 개념 흔히 말하는 DP가 바로 '동적 계획법' 이다. 한 가지 문제에 대해서, 단 한 번만 풀도록 만들어주는 알고리즘이다. 즉, 똑같은 연산을 반복하지 않도록 만들어준다. 실행 시간을 줄이기 위해 많이 이용되는 수학적 접근 방식의 알고리즘이라고 할 수 있다. 동적 계획법은 Optimal Substructure에서 효과를 발휘한다. Optimal Substructure : 답을 구하기 위해 이미 했던 똑같은 계산을 계속 반복하는 문제 구조 접근 방식 커다란 문제를 쉽게 해결하기 위해 작게 쪼개서 해결하는 방법인 분할 정복과 매우 유사하다. 하지만 간단한 문제로 만드는 과정에서 중복 여부에 대한 차이점이 존재한다. 즉, 동적 계획법은.. 2022. 8. 28. 계수 정렬(Counting Sort) 계수 정렬(Counting Sort) 의 개념 요약 각 원소의 개수를 세어 저장해두고, 그에 따라서 적절한 위치에 정렬하는 알고리즘이다. 구체적인 개념 원소들의 순서를 결정하기 위해 배열에 각 원소가 몇 개씩 있는지 세어서 적절한 위치에 선형 시간에 정렬하는 방법이다. 각 원소의 개수를 기록하기 위해 정수로 인덱스 또는 카운트 리스트를 사용하기 때문에 정수나 정수로 표현할 수 있는 자료에만 적용할 수 있는 정렬 알고리즘이다. 카운트 리스트를 위한 충분한 공간을 할당하려면 배열 내의 가장 큰 정수를 알아야 한다. 예제 step 0. 가장 작은 데이터(0)부터 가장 큰 데이터(9)까지의 범위가 모두 담길 수 있도록 리스트를 생성한다. step 1. 데이터를 하나씩 확인하며 데이터의 값과 동일한 인덱스의 데이.. 2022. 8. 21. 이전 1 2 3 4 5 6 7 8 다음