응집도 (Cohesion)
·
Software Engineering/Software Development Principles
응집도 (Cohesion)는 컴퓨터 프로그래밍에서 모듈안의 요소들이 함께 속하는 정도를 가리킵니다. 응집도는 하나의 클래스가 기능에 집중하기 위한 모든 정보와 역할을 가지고 있어야 한다는 의미이며 응집도는 한 모듈 내의 구성 요소 간의 밀접한 정도를 의미하는데, 한 모듈이 하나의 기능을 갖고 있는것은 응집도가 높다고 하며, 한 모듈이 여러 기능을 가지고 있는 것은 응집도가 낮다고 합니다.즉, 응집도가 높을 수록 독립성이 높은 모듈이며 좋은 소프트웨어는 높은 응집도를 유지해야 한다. 이와 관련된 객체지향 원칙은 단일 책임 원칙이 있으며 하나의 책임만을 가지고 다른 클래스와 유연하게 어울릴 수 있는 클래스를 의미합니다.응집도의 단계 종류결합도와 마찬가지로 응집도가 가장 높은 기능적 응집도 부터 가장 낮은 우..
결합도 (Coupling)
·
Software Engineering/Software Development Principles
소프트웨어 공학에서 결합도(coupling) 는 모듈 간의 의존성(Dependency) 수준을 나타내는 개념입니다. 이는 어떤 모듈(클래스)이 다른 모듈을 의존하는 정도를 나타내는 것입니다.결합도가 높은 클래스는 다른 클래스와 연관 관계가 심하여 다른 클래스의 구조를 변경하게 된다면 그에 연관된 클래스들도 싹 변경해야 할 수도 있고, 사용 코드도 변경해야 할 수도 있어서 매우 복잡해 질 수도 있습니다. 실생활에 대한 예시를 들어보겠습니다. 결합도가 강한 상태는 밴드 멤버들을 예시로 할 수 있습니다. 공연을 준비할때 보컬, 드럼, 베이스, 기타가 서로 타이밍을 완벽히 수행해야 하며 누군가 실수를 하면 공연을 망칠수도 있습니다. 악보의 수정이나 밴드 멤버의 추가로 인해 전체 멤버도 수정이 필요하기에 확장성과..
모듈화
·
Software Engineering/Software Development Principles
모듈화는 프로그램을 작은 단위로 분할하는 개념입니다. 각각의 모듈은 특정 기능을 수행하는 코드의 집합이며, 독립적으로 개발 및 테스트, 유지보수를 할 수 있습니다. 모듈화를 통해서 코드의 재사용성, 가독성, 유지보수성을 향상 시킬 수 있습니다. 언리얼에서 대표적으로 게임 플레이 기능 단위의 모듈화인 컴포넌트(Component) 와 코드 레벨, 프로젝트 구조 차원의 모듈화인 모듈시스템("Core", "CoreUObject", "Engine", "InputCore", ...)이 있습니다. 모듈화 프로그래밍의 이점모듈화는 코드의 재사용성과 유지보수성을 크게 향상시킵니다. 인터페이스를 통해 모듈 간의 상호 작용을 명확히 할 수 있고 소프트웨어의 확장성도 모듈화를 통해 개선됩니다. 독립적으로 작동하기에 새로운 ..
칸반 보드 (Kanban Board)
·
Software Engineering/Software Development Principles
칸반 보드는 팀의 작업이나 업무에 대해 시각화하고 진행 중인 작업을 파악하여 효율성을 높이는 프로젝트 관리 방식입니다.칸반 보드는 시각적 프로젝트 관리의 한 형태이며 애자일 방식의 프로젝트 관리 모델입니다. 작업 항목 표현을 위해 카드들을 사용하고 각 프로세스 단계를 표현하기 위해 단계를 구분하여 프로세스의 일을 시각적으로 표현합니다. 카드는 왼쪽에서 오른쪽으로 움직여 진행상황을 표현하고 작업을 수행하는 팀의 조율을 합니다. 칸반보드의 요소칸반 보드는 시각적 신호, 열, 진행중인 작업 제한, 이행 약속 시점 및 배포 시점까지 총 5가지 구성요소로 나눌 수 있습니다. 시각적 신호 : 하나의 시각적 카드 입니다.열: 특정 활동을 나타내는 열이며, 이 열들이 모여 워크 플로우를 구성합니다.WIP(진행 중인 작..
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 ( 가상 메모리 )가상 메모리는 물리 메모리보다 큰 메모리 공간을 프로그램에 제공하기 위해, 보조 저장 장치를 활용하여 가상의 주소 공간을 운영체제가 관리하는 메모리 관리 기법입니다.가상 메모리는 메모리 관리 기법의 하나로, 시스템에 실제로 이용 가능한 기억 자원을 추상화하여 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 주는 방식입니다. 이 시스템은 물리 메모리의 크기에 제한되지 않고, 프로그램이 더 많은 메모리를 사용할 수 있도록 합니다. 가상 메모리는 물리 메모리와 보조 저장 장치(디스크)를 활용하여, 프로그램에게 더 큰 메모리 공간을 제공합니다.동작 원리와 시스템 구성왜냐하면 가상 메모리 시스템은 물리 메모리의 크기를 초과하는 프로그램도 실행할 수 있게 하..