글

{{ label!='' ? 'Label : ' : (q!='' ? '검색 : ' : '전체 게시글') }} {{ label }} {{ q }} {{ ('('+(pubs|date:'yyyy-MM')+')') }}

[C++] The C++ Programming Language: 2. A Tour of C++: The Basics (2)

 2.4.3 Error Handling   에러 핸들링은 언어 기능의 한참 너머에, 프로그래밍 기법과 도구들까지 영향을 줄 수 있는 거대하고 복잡한 주제입니다. 하지만 C++는 이를 도울 수 있는 몇 가지 기능들을 제공하죠. 자료형 체계도 역시 그 스스로의 역할을 하고 있습니다. 내장 자료형과 구문들을 이용해서 힘겹게 응용프로그램을 작성하는 것보다는, 더 많은 자료형들과 알고리즘들을 적절히 개발하는 것이 더 좋죠.    이는 우리의 프로그래밍을 단순화시킵니다. 실수할 여지를 줄여주죠. 또한 컴파일러가 에러들을 잡아낼 기회 역시 부여합니다. 대부분의 C++ 구조는 효율적인 추상화와 우아한 구현 및 설계에 집중합니다. 이러한 모듈화와 추상화의 효과 중 하나는 런타임 에러를 감지하는 지점과 이를 처리하는 지점을 분리할 수 있다는 점입니다. 프로그램이 커질수록, 라이브러리가 확장될수록, 에러를 처리하기 위한 표준은 중요해집니다.    2.4.3.1 Exceptions   Vector 예제를 다시 떠올려보죠. 2.3.2절의 벡터 범위를 넘어가는(out-of-range) 요소에 접근하려고 할 때 우리가 어떻게 해야할까요? Vector의 작성자는 이 경우에 사용자가 어떠한 것을 하려고 하는 것인지 알 수 없습니다. (심지어, 어떤 프로그램에서 vector가 실행되고 있는지도 알 수 없죠) Vector의 사용자는 지속적으로 문제를 감지할 수 없습니다. (만약 가능했다면, 애초에 범위를 벗어나는 접근을 하지도 않았겠죠. 문제가 어디서 발생하는지 알기 어렵다는 것입니다.-옮긴 이)   이 문제의 해결책은 Vector 구현자가 out-of-range 접근을 시도했을 때 이를 감지하고 사용자에게 말해주는 것입니다. 사용자는 이를 가로채 적절히 행위할 수 있죠. 예를 들어, Vector::operator[]()는 out-of-range 접근을 시도했을 때 이를 감지하고 out_of_range 예외를 던집니다. 1 ...

[C++] The C++ Programming Language: 2. A Tour of C++: The Basics (1)

이미지
2. A Tour of C++: The Basics 2.1 Introduction   이 챕터와 다음 세 챕터의 목표는, 잠시 세부사항은 접어두고 C++가 진정 무엇인지 여러분들에게 소개하는 것입니다. C++의 메모리와 컴퓨팅, 프로그램에 코드를 구성하는 기초 메커니즘 등에 대한 모델 및 C++의 표기법 등을 이야기할 것입니다. C++는 절차지향 프로그래밍이라고도 불리는 C에서 볼 수 있는 많은 스타일들을 제공합니다. 챕터 3은 C++의 추상화 메커니즘을, 챕터 4와 챕터 5는 표준 라이브러리 기능을 소개할 것입니다.   전제는 여러분들이 프로그래밍을 이미 해봤어야 한다는 것입니다. 만약 그렇지 않다면, 다른 책인 Programming: Principles and Practice Using C++ [Stroustrup, 2009]을 먼저 읽어보시길 권합니다. 여러분들이 이전에 프로그래밍을 해봤더라도, 여러분들이 사용했던 언어는 아마 C++가 제공하는 것과 꽤 다를 것입니다. 앞으로 펼쳐질 "초고속 투어"가 조금 혼란스럽다면, 좀 더 자세한 내용을 다루는 챕터6으로 건너 뛰도록 하세요.   이 C++ 투어는 초기에도 여러분들이 풍부한 기능들을 사용할 수 있도록 만들어줌으로써, 엄격한 상향식(bottom-up) 언어 설명으로부터 구제해줍니다. 예를 들어, 반복문은 챕터 10까지 이야기하지 않습니다. 비슷하게 클래스, 템플릿, 자유 공간(free-store, 힙) 사용, 표준 라이브러리 등에 대한 서술은 많은 챕터들에 퍼져 있습니다. 하지만 표준 라이브러리 자료형인 vector, string, complex, map, unique_ptr, ostream 등은 코드 예제를 강화하기 위해 어디든지 필요하면 쓰일 것입니다.   비유적으로, 뉴욕이나 코펜하겐과 같은 도시로 관광을 떠난다고 생각해보죠. 몇 시간 동안, 여러분들은 관광 명소들을 둘러보고, 그 역사들을 듣고, 다음에 무얼 볼지에 대한 이야기들을 듣죠. 허나 여러분들은 여전히 그...

[코딩의탑] 1층: 탄도 예측(Trajectory Prediction)

이미지
탄도 예측이란 무엇인가요?   첫번째 층에서 우리가 무엇을 할지부터 살펴보도록 하죠. FPS 게임에서 수류탄을 던져본 적이 있나요? 플레이어는 수류탄을 던지기 이전에 그 궤적을 미리 볼 수 있죠. 또, 당구 게임에서 당구공이 부딪힌 이후의 궤적을 플레이어들은 미리 보고 각도를 조절할 수 있습니다. <Angry Birds>에서 플레이어는 예측되는 궤적을 보고 고무줄의 각도를 조절해 새를 날려보내죠. 우리가 어렸을 적 한 번쯤은 해봤을 고전 게임인 <Puzzle Bobble>의 시스템 역시 이러한 탄도 예측의 좋은 예가 될 수 있습니다. <Apex Legends> <Angry Birds 2> <Puzzle Bobble>   많은 게임들에서는 이렇게 무언가가 날아갈 때, 그 궤적을 미리 예측해서 보여주는 시스템을 갖추고 있습니다. 우리는 특히, 3D 게임에서 이루어지는 탄도 예측에 대해서 다뤄볼 것입니다. 어떻게 해결할 수 있을까요?   우리는 다음 두 가지 작은 목표를 해결해나갈 것입니다. 시간을 의미하는 t를 변수로 하는 궤적 그래프를 그릴 수 있습니다. 임의의 평면에 튕겨진 이후의 궤적 그래프를 그릴 수 있습니다. 준비운동을 시작해 보자구요..  변위, 속도, 가속도 변위란, 특정 시간 t에서 원점으로부터 이동한 거리를 의미합니다.  속도란, 단위 시간 t동안 움직인 변위를 의미합니다.  가속도란, 단위 시간 t동안 증가한 속도를 의미합니다.    변위, 속도, 가속도의 관계   위 그림에서 변위(distance) 그래프를 한 번 봐보죠. 우리가 그래프에서 알 수 있는 사실은 다음과 같습니다: 첫째, 0초부터 15초까지는 특정 점으로부터 거리가 계속 멀어졌습니다. 둘째, 15초부터 27초까지는 특정 점으로부터 거리가 다시 가까워졌습니다. 셋째, 27초부터는 정지했습니다.   이를 속도(velocity) 그래프와 함께 비교...