일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- FrameResource
- 네트워크
- Render Target
- Direct3D12
- 동적 색인화
- 조명 처리
- DirectX
- Dynamic Indexing
- 절두체 컬링
- 장치 초기화
- 입방체 매핑
- effective C++
- 네트워크 게임 프로그래밍
- direct3d
- 큐브 매핑
- gitscm
- 게임 디자인 패턴
- 직교 투영
- 노멀 맵핑
- 디퍼드 렌더링
- gitlab
- 게임 프로그래밍
- C++
- TCP/IP
- Deferred Rendering
- 게임 클래스
- Frustum Culling
- light
- DirectX12
- InputManager
- Today
- Total
코승호딩의 메모장
[소프트웨어 공학] 본문
- 소프트웨어 : 저장장치(휘발성 메모리, 비휘발성 메모리 등)에 저장된 특정한 목적의 하나 또는 다수의 컴퓨터 프로그램
원래 소프트웨어는 공학 분야가 아니었으며, 공대에 속해있지 않고 자연대(물리, 화학, 기초과학 등)였다. 과거 컴퓨터 공학과는 대부분 컴퓨터 회로나 구조가 중요한 학과였다. 현재는 하드웨어 자체는 전자 공학과쪽에 밀접해졌고 컴퓨터 공학과는 하드웨어가 아닌 소프트웨어를 다루는 학과가 되었다. 즉, 공학은 소프트웨어와 동 떨어져 있는 분야였다.
위 그림은 소프트웨어 구조의 그림이다. 우선 사용자(인간 or AI)가 상호 작용을 하면서 필요한 무언가를 사용할 수 있게 해주는 것을 응용 소프트웨어라고 한다. 여기서 소프트웨어가 독자적으로 동작을 한다는 것은 굉장히 비효율적이다. 왜냐하면 하드 디스크에 접근하거나 모니터에 무언가를 뿌린다거나 이러한 기능들은 소프트웨어의 종류에 상관 없이 공통적인 기능이기 때문이다. 따라서 이들을 모아서 서비스 해주는 또 다른 소프트웨어가 운영체제(OS)이다. 운영체제가 가장 중요하게 접근해야 하는 것이 바로 하드웨어이다.
소프트웨어는 목적에 따라 응용 소프트웨어와 시스템 소프트웨어로 분류된다.
- 응용 소프트웨어 : 사용자가 바로바로 상호작용을 할 수 있는 것. ex) 워드와 같은 오피스, 게임, 미디어 플레이 등
- 시스템 소프트웨어 : 공통적으로 사용되는 기능을 묶어 하드웨어와 운영체제 사이에서 연결 역할을 하는 소프트웨어 ex) 디바이스 드라이버, 운영체제, 유틸리티 등
소프트웨어는 계층에 따라 사용자 작성 및 응용 소프트웨어와 플랫폼 소프트웨어로 분류된다.
- 사용자 작성 소프트웨어 : 사용자가 응용 소프트웨어 상위에 작성할 수 있는 것. ex) Excel(script), 매크로, 스프레드시트 템플릿 등
- 플랫폼 소프트웨어 : 시스템 소프트웨어와 거의 동일한 의미를 가진다. 컴퓨터와 주변 기기를 제어한다.
그렇다면 게임 엔진은 응용 소프트웨어일까 플랫폼 소프트웨어일까? 정의로만 따진다면 직접 무언가를 만들 수 있기 때문에 응용 소프트웨어라고 볼 수 있다. 그리고 응용 소프트 위에서 무언가를 만들기 때문에 사용자 작성 소프트웨어를 만들어 내는 응용 소프트웨어다 라고 분류할 수 있다. 그러나 현재는 게임 엔진이 플랫폼 형태가 되어가고 있다. 여기서 플랫폼이란 OS와 같은 것에 상관 없이 크로스 플랫폼 즉, 다양한 소프트웨어가 만들어질 수 있도록 기반을 마련해 주는 것이다. 언리얼이나 유니티나 플랫폼화 되어 가고 있기 때문에 플랫폼이라고 볼 수도 있다. 현재 정의는 이렇지만 언제든지 바뀔 수 있다는 점을 기억해야 한다.
'게임 소프트웨어' 카테고리의 다른 글
[Object 클래스] (0) | 2023.10.04 |
---|---|
[GitLab 연동] (0) | 2023.09.25 |
[Game 클래스] (0) | 2023.09.13 |
[Git을 통한 형상 관리] (0) | 2023.09.10 |