FSM (Finite State Machine, 유한 상태 기계)
·
Software Engineering/Software Development Principles
FSM (Finite State Machine, 유한 상태 기계)유한 상태 기계(Finite-State Machine . FSM) 또는 유한 오토마톤(Finite Automaton, FA 복수형 : 유한 오토마타, Finite Automata)는 컴퓨터 프로그램과 전자 논리 회로를 설계하는 데 쓰이는 수학적 모델입니다. ' 상태 기계' 라고 부르기도 합니다.유한 상태를 갖으며, 입력 및 현재 상태에 따라, 상태가 전이(전환)되는 기계에 대한 추상적 모형 즉, 디지털 시스템, 디지털 컴퓨터 등에 대한 추상적 모델로 볼 수 있습니다. 유한 상태 집합 내에 움직이며 시간 진행에 따라, 미리 정해진 유한 상태 집합 내에세 상태가 변할 수 있는 장치이며 기본적으로 내부에 유한한 메모리가 있는 자동 가계에 대한 추..
GPU (Graphic Processing Unit, 그래픽 처리 장치)
·
Software Engineering/Software Development Principles
GPU란? (Graphic Processing Unit, 그래픽 처리 장치)그래픽 처리 장치(GPU)는 다양한 장치에서 컴퓨터 그래픽 및 이미지 처리 속도를 높이도록 설계된 전자 회로입니다. 이러한 장치에는 비디오 카드, 시스템 보드, 휴대폰, 개인용 컴퓨터(PC)가 포함됩니다. GPU는 수학적 계산을 빠르게 수행하고 여러 코어들이 동시에 (또는 병렬로) 연산을 수행하기에 대형 데이터나 컴퓨터 그래픽, 영상 처리에 CPU (중앙 처리 장치) 보다 더 효과적으로 사용되며 현재에는 머신 러닝, 인공 지능 및 블록체인과 같은 기술의 필수적 요소가 됩니다.GPU가 등장하기 전까지 PC나 콘솔 게임들의 그래픽은 컴퓨터의 CPU에 의존하여 작업을 실행하였습니다. 하지만 개인 게임과 컴퓨터 지원 설계(CAD)의 등장..
CPU (Central Processing Unit, 중앙 처리 장치)
·
Software Engineering/Software Development Principles
CPU ( 중앙 처리 장치 )CPU는 본질적으로 컴퓨터의 활성 두뇌에 해당합니다. CPU는 데이터 입력을 정보 출력으로 변환하는 컴퓨터 내부의 관리자로 볼 수 있습니다. 컴퓨터 시스템을 통제하고 프로그램 연산을 실행 및 처리하는 핵심적인 컴퓨터의 제어 장치이며 회로망을 통해 기계어로 작성된 컴퓨터 프로그램의 명령어를 해석하고 저장하여 실행합니다.인간의 뇌 처럼 컴퓨터의 뇌라고 생각할 수 있는 장치이며 인간의 뇌와 마찬가지로 CPU는 멀티태스킹이 가능하여 컴퓨터의 내부 기능 조절, 전력 소모 감독, 컴퓨터 리소스 할당이나 다양한 앱, 프로그램 및 네트워크와 인터페이스를 동시에 수행 할 수 있습니다.데이터 스토리지 및 메모리데이터 스토리지는 나중에 쉽게 액세스하거나 영구적으로 보관할 수 있도록 정보를 보관..
동적 연결 라이브러리 (DLL, Dynamic Link Library)
·
Software Engineering/Software Development Principles
라이브러리 (Library)라이브러리란 소프트웨어 개발에서 자주 사용하는 기초적인 함수들을 중복 개발하는 것을 피하기 위해 공통적으로 자주 쓰는 함수와 데이터 타입을 모아둔 것입니다. 따라서 라이브러리를 사용하면 코드를 재사용하기 쉽고, 이미 구현되어 있는 기능을 쓸 수 있어 개발 시간을 단축 시킬 수 있다는 장점이 있습니다.또한 라이브러리는 단독 실행 파일이 아니라 특정한 부분 기능만을 수행하도록 제작된 프로그램이며 이 자체로는 사용자가 실행 파일처럼 직접 실행하는 방식이 아니며, 해당 라이브러리의 기능을 직접 호출하는 프로그램을 실행하거나, 사용자가 해당 라이브러리 기능을 실행하는 API를 사용하는 프로그램을 직접 개발하면 사용 할 수 있습니다.동적 연결 라이브러리 (DLL, Dynamic Linke..
의존성 주입(DI, Dependency Injection)
·
Software Engineering/Software Development Principles
의존성 주입(DI, Dependency Injection)소프트웨어 엔지니어링에서 의존성 주입(dependency injection)은 하나의 객체가 다른 객체의 의존성을 제공하는 기술입니다. 여기서 "의존성"은 서비스로 사용할 수 있는 객체를 의미하며 클라이언트가 어떤 서비스를 사용할 것인지 지정하는 대신, 클라이언트에게 무슨 서비스를 사용할 것인지를 말해주는 것이다. "주입"은 의존성(서비스)을 사용하려면 객체(클라이언트)로 전달하는 것을 의미합니다. 서비스는 클라이언트의 상태의 일부입니다.즉, 의존성 주입은 객체간의 의존 관계를 외부에서 주입(Inject) 하는 디자인 패턴입니다. 객체가 직접 의존성을 생성하는 것이 아니라, 외부에서 주입해주므로 결합도를 낮추고 코드의 유지보수성과 테스트 용이성을 ..
Refactoring(리팩토링)
·
Software Engineering/Software Development Principles
Refactoring리팩토링(refactoring)은 소프트웨어 공학에서 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻합니다. 주로 가독성을 높이고 유지보수를 편하게 하기위함 이며, 직접적인 버그 수정이나 기능 추가가 목적은 아니지만, 간접적으로 영향을 미칠 수가 있습니다. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 바꾸고 개선하는 유지보수 행위에 가깝습니다.가독성, 유지보수성리팩토링의 주요 목표는 가독성과 유지보수성을 개선하는 것이며, 성능 최적화나 버그 수정이 직접적인 목표는 아니지만 결과적으로 영향을 미칠 수 있습니다.협업사람이 이해하는 코드를 작성하는 것이 중요합니다, 코드 스타일 가이드, 일관된 네이밍 규칙, 주석 작성 원칙 등이 리팩토링의 요소가 될 수 있습니다.Refac..
Code Smell
·
Software Engineering/Software Development Principles
Code Smell코드 스멜(Code Smell)은 컴퓨터 프로그래밍 코드에서 심오한 문제를 일으킬 가능성이 있는 프로그램 소스 코드의 특징을 가리킵니다. 무엇이 코드 스멜인지 아닌지의 여부를 결정하는 일은 주관적인 것으로 언어와 개발자, 개발 방법에 따라서 다양하게 나타납니다. 자동으로 특정한 종류의 코드 스멜을 확인하기 위한 도구들이 있으며, 그 예로는 체크스타일, PMD, 파인드벅스 등을 들 수 있습니다.즉, 코드스멜이란 읽기 어렵거나 중복된 로직을 가진 메서드, 개발자가 이해하거나 유지보수하기 어려워 리팩토링의 대상이 되는 소스코드, 좋은 소프트웨어 개발 관행을 위반하거나 설계원칙을 어기는 코드들이라고 볼 수 있습니다.이렇기에 코드스멜은 가독성 저하, 유지보수 어려움, 성능 저하 등 부정적인 영향..
Compiler
·
Software Engineering/Software Development Principles
Compiler(컴파일러)?컴파일러란 특정 프로그래밍 언어로 쓰여 있는 문서를 저급 프로그래밍 언어(기계어, 어셈블리어) 로 옮기는 언어 번역 프로그램을 말합니다.컴파일러는 고급 프로그래밍 언어를 실행 프로그램으로 만들기 위해 저급 프로그래밍 언어(예: 어셈블리 언어, object 코드, machine code)로 바꾸는데 사용됩니다.즉, 컴파일러란 우리가 프로그래밍을 할때 사용하는 언어를 컴퓨터가 이해할 수 있도록 기계어로 번역해주는 번역가 라고 볼 수 있다. 그리고 이러한 번역을 하는 행위를 컴파일이라고 합니다.참고로 여기서 말하는 저급 언어나 고급 언어는 언어에 따른 급이 있는게 아니라 컴퓨터와 사람이 이해하기 쉬운 자연어중 더 가까운쪽을 분류해서 명칭해둔것 입니다.. 저급 언어는 컴퓨터가 이해하기..
관찰자 패턴(Observer Pattern)
·
Software Engineering/Design Pattern
관찰자 패턴객체 사이에 일 대 다의 의존 관계를 정의해 두어, 어떤 객체의 상태가 변할 때 그 객체에 의존성을 가진 다른 객체들이 그 변화를 통지받고 자동으로 업데이트될 수 있게 만듭니다.모델-뷰-컨트롤러(Model-View-Controller) 즉 MVC 패턴은 많이 사용되는데, 그 기반에는 관찰자 패턴이 있습니다. 관찰자 패턴이 워낙 흔하다 보니 자바에서는 아예 핵심 라이브러리(java.util.Observer)에 들어가 있고, C#에서는 event 키워드로 지원합니다.관찰자 패턴은 GoF 패턴 중에서도 가장 널리 사용되고 잘 알려져 있습니다. 업적 달성업적 시스템을 추가한다고 해봅시다. '괴물 원숭이 100마리 죽이기' 나 '다리에서 떨어지기'와 같은 특정 기준을 달성하면 배지를 얻을 수 있는데 배..
경량 패턴
·
Software Engineering/Design Pattern
경량 패턴공유(Sharing)을 통해 많은 수의 소립(fine-grained) 객체들을 효과적으로 지원합니다.여러 게임에서 볼 수 있는 숲이나 여러 배경과 같은 장면들을 제작할때에 '경량' 패턴으로 종종 구현 하기도 합니다. 숲에 들어갈 나무들숲을 글로는 몇 문장으로 표현할 수 있지만, 실시간 게임으로 구현하는 것은 전혀 다른 이야기 입니다. 나무들이 화면을 가득 채운 숲을 볼 때, 그래픽스 프로그래머는 1초에 60번씩 GPU에 전달해야 하는 몇백만 개의 폴리곤을 보고 있습니다.수천 그루가 넘는 나무마다 각각 수천 폴리곤의 형태로 표현해야 하고, 설사 메모리가 충분하다고 해도, 이런 숲을 그리기 위해서는 전체 데이터를 CPU에서 GPU로 전달해야 합니다. 나무마다 필요한 데이터는 다음과 같습니다.줄기, ..