CS

    객체 지향 프로그래밍

    먼저 객체지향 프로그래밍이 등장하게 된 배경을 이해하기 위해 객체 지향 프로그래밍 등장 이전에 존재했던 여러 가지 프로그래밍 패러다임 중 '비구조적 프로그래밍' 과 '절차적 프로그래밍'에 대해 알아보자. 비구조적 프로그래밍 - 정의한 기능의 흐름에 따라 순서대로 동작하며 프로그램을 완성하는 방식으로, 작은 프로그램일 경우엔 흐름이 한눈에 보여 직관적이다는 장점이 있다. 하지만 프로그램의 크기에 살이 붙어 커질 경우엔 큰 단점이 되는데, 예를 들면 기능 A->B->C 순서로 동작하다 C에서 갑자기 A로 돌아가야 할 경우 스파게티 코드가 되어 버리 때문에 직관적인 장점이 사라지게 된다. 이러한 단점을 보완하기 위해 등장한 다음 패러다임은 절차적 프로그래밍이다. 절차적(구조적) 프로그래밍 - 절차적 프로그래밍..

    Garbage Collection

    JVM이 구성된 JRE의 구성 요소 중 Garbage Collection은 객체를 생성한 이후에 더 이상 사용하지 않는 경우 메모리 릭을 방지하기 위하여 자동으로 메모리 해제를 수행한다. GC를 실행하기 위해서는 JVM 기반의 어플리케이션의 실행을 멈추는 'stop-the-world'가 발생하게 되는데, 'stop-the-world'가 발생하는 경우엔 GC를 실행하는 스레드를 제외한 나머지 스레드는 작업을 중단한다. 물론 GC를 완료하고 중단됐던 작업이 재개되지만 프로그램의 성능 최적화를 위해선 'stop-the-world'의 발생 빈도를 줄여 GC 성능 최적화가 필요하다. JVM의 메모리는 Class, Stack, Heap, Native Method, PC 이렇게 5가지로 구성되어 있는데 GC는 Hea..

    Process와 Thread

    프로세스는 운영 체제로부터 자원을 할당받아 동작하는 작업의 단위이고 스레드는 할당 받은 자원을 이용하는 실행의 단위이고 프로세스 내에서 최소 하나 혹은 그 이상이 될 수 있다. 어플리케이션 하나가 프로세스이고, 그 안에서 발생하는 동작의 단위가 스레드이다. multi process와 multi thread 멀티 프로세스는 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업(Task)을 실행하게 된다. - 장점 : 하나의 프로세스에 문제가 생기더라도 다른 프로세스에 영향을 끼치지 않는다. - 단점 : 프로세스마다 독립된 메모리 영역을 할당받아 상호 공유하는 메모리 공간이 없어 (캐시 메모리 초기화 등) 무거운 작업의 context switching이 발생한다. *context swi..

    소프트웨어 개발방법론

    개요 소프트웨어 개발 방법론은 소프트웨어를 어떻게 만들지에 대한 관심이다. 따라서 개발 방법론에는 단계별 산출물뿐만 아니라 누가 어떤 순서로 어떻게 만들어야 하는지, 그리고 어떤 도구를 사용할 건지에 대한 구체적인 정의이다. 소프트웨어 개발방법론의 구성은 아래 표와 같다. 작업 절차 소프트웨어를 진행할 때 이루어지는 작업의 순서 작업 방법 각 단계별 작업마다 수행해야 할 일(누가, 언제, 무엇을) 산출물 단계별로 나오는 산출물(설계서, 명세서) 관리 개발 진행을 어떻게 제어하고 감독할 것인지 기법 단계별 작업 시 사용하는 기술 또는 기법(DFD, ERD, Use Case) 도구 사용하는 기법 별 지원 도구 종류 소프트웨어의 개발 방법론은 크게 정보공학 방법론, 객체지향 방법론, CBD 방법론, 애자일 방..

    임계 영역 동시접근 해결 방안

    Lock 정의 하나의 프로세스 혹은 스레드가 임계 영역(critical section)에 진입할 경우 Lock을 획득하고, 임계 영역에서 빠져나올때 Lock을 되돌려줌으로써 두 개 이상의 프로세스나 스레드가 동시에 임계영역에 진입할 수 없도록 하는 방법이다. 문제점 A라는 스레드가 Lock 함수를 실행하다 변수의 값을 변경하기 전에 인터럽트가 발생하여 값을 변경하지 못하고 B 또는 다른 스레드가 추가로 Lock 함수에 들어오면 두 개의 스레드가 임계 영역에 동시 접근해버리는 상황이 발생한다. 해결방법 더 이상 쪼개지지 않는 하드웨어 명령어로 구현, 인터럽트를 disalbe 하고 enable 하는 방법이 있다. Semaphore 정의 세마포어는 '수기 신호' 라는 뜻으로 프로세스의 동기화 도구이다. 세마포..

    임계 구역과 경쟁 상태

    임계 구역 (Critical Section) 임계 구역이란 한 번에 하나의 프로세스 혹은 스레드만 접근 가능한 코드 영역으로 공유 데이터에 접근하는데 있어서 문제가 발생하지 않도록 하나의 접근만 허용함을 보장한다. 일반적으로 4가지의 코드 영역으로 나눠 볼 수 있는데 그 특징은 아래와 같다. entry section critical section에 진입하기 위해 진입 허가를 요청하는 영역으로 접근을 제어(lock)한다. critical section 하나의 프로세스 혹은 스레드만 접근 할 수 있는 영역 exit section 제어(lock)을 해제하는 등, 더 이상 임계 구역에 존재하지 않을 때 알리는 역할을 하는 영역 remainder section 입력, 중요, 종료 세션을 제외한 나머지 코드 부분의..