Dead Lock ( 교착 상태 )
·
Software Engineering/Software Development Principles
교착 상태란 여러 프로세스나 스레드가 자원을 요청할 때 발생할 수 있는 문제입니다. 각 프로세스가 다른 프로세스가 보유한 자원을 기다리면서, 그 자원들이 동시에 다른 프로세스에 의해 요구되어 아무도 진행하지 못하고 영원히 기다리는 상태를 말합니다. 흔히 다중프로세스나 다중스레드에 발생할 수 있는 문제이며 이 교착 상태가 발생할 수 있는 조건은 다음과 같이 있습니다.상호배제 : 하나의 자원을 동시에 하나의 프로세스만 사용할 수 있어야 한다.점유대기 : 어떤 프로세스가 하나 이상의 리소스를 점유하고 있으면서 다른 프로세스가 가지고 있는 리소스를 요구하고 있습니다.비선점 : 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없어야 합니다.환형대기 : 각 프로세스는 원을 그리며 다음 프로세스가 요구..
Hash Code (해시 코드)
·
Software Engineering/Software Development Principles
해시 코드란 객체의 주소 값을 이용해서 해싱(hashing) 기법을 통해 해시 코드라는것을 만들며 주소값으로 만든 고유한 숫자값이라고 볼 수 있습니다. 해시 코드는 해시 테이블이라는 자료구조에 사용되며, 매우 빠른 데이터 검색을 위해 컴퓨터 소프트웨어에 널리 사용됩니다. 해시 코드는 큰 파일에서 중복되는 값을 빠르게 찾을 수 있기 때문에 자주 사용됩니다.Hash Table (해시 테이블)해시 테이블은 키(key)를 값(Value)에 매핑하여 사용하는 자료 구조중 하나 입니다. 즉, 키에 해당 하는 값을 찾기 위해 빠른 속도로 키를 검색할 수 있는 자료구조를 의미합니다. 사용할 값에 대해 중복되지 않는 유일한 키 값과 매핑을 시켜 후에 해당 값을 사용할때에 해시 테이블을 1번만 수행하면 되므로 빠르게 데이..
Process & Thread(프로세스 & 스레드)
·
Software Engineering/Software Development Principles
컴퓨터에 조금이라도 관심이 있다면 들어볼법한 단어인 프로세스와 스레드는 컴퓨터 운영 체제에서 중요하게 사용되고 있습니다. 여기서 한가지 더 `.exe` 확장자로 되어 실행하는 파일을 프로그램이라고 부르기도 하는데 이 3가지 개념에 대해서 정리해보겠습니다.,Program프로그램은 흔히 말해 컴퓨터에서 실행 할 수 있는 파일을 말하며 일상 생활에도 많이 사용되는 카카오톡이나, 엑셀과 같은 파일들을 프로그램이라고 불리고 있습니다. 프로그램은 실행 가능한 정적인 코드를 가지고 있는 파일이라고 볼 수 있으며 (예: `.exe`,`.out`) 보통 디스크에 저장된 파일이라고 보시면 됩니다. 프로그램은 실행은 가능하지만 아직 실행전 상태인 파일들 이며 완성된 프로그램은 쉽게 말해 거대한 코드 덩어리라고 볼 수도 있습..
Callback Function (콜백 함수)
·
Software Engineering/Software Development Principles
프로그래밍에서 CallBack(콜백), 또는 Callback Function)은 다른 코드의 매개변수로서 전달되어 나중에 호출을 할 수 있는 함수를 의미합니다. 콜백을 넘겨받는 코드는 이 콜백을 필요에 따라서 즉시 실행항 수도 있고, 아니면 나중에 실행 할 수도 있습니다. 일반적으로 콜백을 전달 즉, 함수를 매개변수로 전달할 때는 함수의 포인터형 이나 람다함수를 사용하기도 합니다. 예시로 함수 포인터를 이용한 콜백#include using namespace std;// 콜백 함수: 파일 열기 완료 후 실행할 함수void OnFileOpened(){ cout 위의 예시 코드 구문 처럼 콜백함수는 함수를 매개변수로 전달받아 `OnFileOpened` 함수가 다른 영역에서 호출이 될 수 있도록 할 수 있습니다..
큐 (Queue)
·
Software Engineering/Software Development Principles
큐는 자료구조중에 한가지로 FIFO(First In - First Out) 선입선출의 형태를 가지고 있습니다. 즉, 먼저 큐에 추가된 데이터는 먼저 처리되고 제거 되며 단어로 Queue는 표를 사러 일렬로 늘어선 사람들로 이루어진 줄을 말하기도 하며, 먼저 줄을 선 사람이 먼저 나갈 수 있는 상황을 연상하면 됩니다.나중에 집어 넣은 데이터가 먼저 나오는 즉 후입선출(LIFO, Last In - First Out) 스택과는 반대되는 개념이라고 볼 수 있습니다.큐의 구성요소Elements(데이터 요소): 큐에 저장되는 실제 데이터 항목들로, 큐에 추가되거나 제거되는 데이터를 의미합니다.Enqueue (삽입 연산) : 큐의 뒤쪽(Rear)에 데이터 추가 합니다, 새로운 데이터 요소가 큐의 가장 뒤에 추가됩니다..
Virtual Memory ( 가상 메모리 )
·
Software Engineering/Software Development Principles
Virtual Memory ( 가상 메모리 )가상 메모리는 물리 메모리보다 큰 메모리 공간을 프로그램에 제공하기 위해, 보조 저장 장치를 활용하여 가상의 주소 공간을 운영체제가 관리하는 메모리 관리 기법입니다.가상 메모리는 메모리 관리 기법의 하나로, 시스템에 실제로 이용 가능한 기억 자원을 추상화하여 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식입니다. 이 시스템은 물리 메모리의 크기에 제한되지 않고, 프로그램이 더 많은 메모리를 사용할 수 있도록 합니다. 가상 메모리는 물리 메모리와 보조 저장 장치(디스크)를 활용하여, 프로그램에게 더 큰 메모리 공간을 제공합니다.동작 원리와 시스템 구성왜냐하면 가상 메모리 시스템은 물리 메모리의 크기를 초과하는 프로그램도 실행할 수 있게 하..
객체 지향 설계의 5가지 원칙 - S.O.L.I.D
·
Software Engineering/Software Development Principles
S.O.L.I.DS.O.L.I.D 원칙이란 객체지향 프로그래밍을 진행하면서 지켜야 할 5가지의 원칙을 의미합니다. 각각 원칙의 앞글자를 가져와서 SOLID라고 표기하며 소프트웨어의 유지보수 및 확장을 더 쉽게 할 수 있게 하고 또한 코드의 복잡성을 제거하여 리팩토링에 소요된 시간을 줄이며, 개발의 생산성을 높일 수가 있습니다.단일 책임 원칙 - S.R.P (Single Responsibility Principle)하나의 클래스는 하나의 기능(책임)만을 가져야 한다.하나의 클래스는 하나의 책임만을 가지도록 설계를 해야합니다. 여기서 책임이란 하나의 기능을 의미하며 해당 기능에 대해서 수행하도록 설계를 해야 합니다. 하나의 클래스의 여러 가지의 기능이 들어가게 설계를 진행한다면 기능을 변경(수정)할 경우에 ..
Stack (스택)
·
Software Engineering/Software Development Principles
Stack?Stack(스택)은 메모리의 영역 중 하나로 지역 변수와 매개변수가 저장되는 영역입니다. 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸하게 됩니다.함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장됩니다. 이렇게 스택 영역에 차례대로 저장되는 함수의 호출 정보를 스택 프레임(Stack Frame)이라고 합니다. 스택은 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형구조이며 후입 선출(LIFO - Last In First Out) 구조로 되어 있습니다. 자료를 넣는 과정을 '밀어 넣는다' 라고 하여 푸쉬(Push)라고 하며 반대로 넣어둔 자료를 꺼내는 것을 팝(Pop) 이라고 합니다. 이때 나중에(최근에..
Cache Memory(캐시 메모리)
·
Software Engineering/Software Development Principles
Cache Memory(캐시 메모리) ?Cache Memory, 즉 캐시 메모리는 메인 메모리(RAM)보다 빠른 임시 저장소로, 일반적으로 CPU 내부 또는 가까운 위치에 존재합니다. 데이터나 값을 미리 복사해 놓는 임시 장소를 가리키기도 하며 캐시는 데이터에 접근하는 시간이 오래 걸리는 경우나 자주 사용되는 데이터를 저장하여 불필요한 메모리 접근을 줄이고 처리 시간을 단축합니다. 빠른 CPU의 처리 속도와 상대적으로 느린 메인 메모리에서의 속도의 차이를 극복하는 중간 버퍼 역할을 합니다. 쉽게 표현하자면 CPU는 빠르게 일을 진행하고 있는데, 메모리에서 데이터를 가져오고 가져가는데 느려서 중간에 미리 CPU에 전달될 데이터를 들고 서 있는 형태라고 말할 수 있습니다. Cache Memory의 특징CPU..
RAM (Random-Access Memory, 랜덤 액세스 메모리)
·
Software Engineering/Software Development Principles
RAM (Random-Access Memory, 랜덤 액세스 메모리)?RAM (Random-Accses Memory) 은 컴퓨터나 노트북의 단기 기억 장치입니다. 임의의 영역에 접근하여 일고 쓰기가 가능한 주기억 장치이기도 합니다. 또한 전원이 끊기면 데이터가 소멸되는 휘발성 특징을 지니고 있으며 어느 위치에 저장된 데이터든 접근(읽기 및 쓰기)하는 데 거의 동일한 시간이 걸리는 메모리이기에 프로그램 로딩, 데이터의 임시저장과 같은 용도로 사용되며 '랜덤(random, 무작위)'라는 명칭이 주어집니다. RAM 의 용도RAM (Random-Accsess Memory)은 애플리케이션에 단기적으로 데이터 저장 및 액세스 공간을 제공하는 컴퓨터의 임시 스토리지입니다. RAM을 통하여 애플리케이션 로딩, 인터..