목록프로그래밍 (47)
강께르의 개발일지
1. 버퍼란 무엇인가? - 한 곳에서 다른 곳으로 데이터를 이동할 때, 임시적으로 그 데이터를 저장하기 위해 사용되는 물리적인 메모리 저장소의 영역이라고 한다. - 이에 대한 설명으로는 출체에서 다음과 같이 얘기한다. - 예를 들어 A와 B라는 소프트웨어 혹은 하드웨어가 있다고 하자. - A는 어떤 작업에 대한 결과물로 특정 데이터를 내놓을 것이다. B는 특정 데이터를 입력받아서 작업을 한다고 가정하자. - 여기서 '데이터를 내놓는다'의 의미는 특정 메모리 영역에 데이터를 기록한다는 의미이다. 특정 메모리 영역의 입장에서는 데이터를 저장한다고 해석이 될 것 같다. - 그리고 '데이터를 입력 받는다'는 의미는 특정 메모리 영역의 데이터를 읽는다는 것을 의미한다. 특정 메모리 영역의 입장에서는 데이터를 넘겨..
1. C의 형 변환 int num = 10; std::cout 자식 클래스의 참조/포인터 자식 클래스의 참조/포인터 -> 부모 클래스의 참조/포인터 - static_cast는 dynamic_cast보다 덜 엄격한 기준으로 형 변환을 지원한다. 그렇기에 만약 부모 클래스 객체를 가리키고 있는 부모 클래스의 포인터 변수를 형 변환을 해 자식 클래스 포인터로 바꾸었다면? - 이를 에러라고 잡지는 않겠지만, 원하는 결과가 나오지 않을 수 있다. 이에 대한 책임은 설계한 프로그래머가 져야하는 것이다. - 이런 경우의 에러를 검출하고 조치하고 싶다면 아래의 형 변환 연산자를 사용해야 할 것이다. 3. dynamic_cast dynamic_cast (expr) - dynamic_cast는 상속 관계에서의 안전한 형 ..
1. 일반적인 프로그램과 게임 프로그램의 차이 - 프로그램은 사용자가 발생시키는 메시지를 이용해 그에 맞는 일을 처리하며 동작한다. - 예를 들어, 키보드와 마우스와 같은 입력이 메시지로 전달되어 그 이벤트에 맞게 프로그래밍된 동작을 수행할 것이다. - 만약 일반적인 프로그램이라면 위와 같은 메시지를 받을 때까지 대기할 것이다. 아무런 동작하지 않고 오로지 메시지가 새로 올 때까지 무한정 대기하는 상태가 될 것이다. - 하지만 게임은 일반적인 프로그램과 달리 취급해야 한다. - 일반적인 프로그램은 메시지가 올 때까지 그 어느 동작도 수행하지 않는다. 게임도 그와 똑같다면, 메시지가 올 때까지, 그 어떤 애니메이션을 동작하지 않고 게임이 멈춰있는 것처럼 보일 것이다. - 그에 따라서 일반적인 프로그램과 다..
1. 디자인 패턴이란? - 소프트웨어를 설계할 때, 공통적으로 개발자라면 만나게 되는 문제에 대한 공통적인 해법이나 자주 쓰이는 설계 방법을 이르는 말이다. - 이를 패턴화하여 재사용하기 좋게 해놓았으며, 효율적인 코드를 만들기 위한 방법론을 제시하기 때문에 개발의 효율성을 좋게 하는 효과가 있다. - 하지만 이를 패턴을 맹신하여 남용하는 부분은 지양해야 한다. 굳이 이러한 적용점이 필요 없는 부분이라면 적용하지 않을 것이 좋다고 한다. - 상황에 따라 자주 쓰이는 설계 방법을 정리한 방법론이기에 모든 상황의 해결책은 아니다. 무작정 가져다 쓰기보다 왜 효율적인 방식이고 패턴들로부터 노하우를 습득하는 것이 중요하다고 한다. - 그리고 상대방과의 의사소통에 도움을 줄 것이다. 예를 들어 문제 해결 제안을 ..
1. 타이머란? - 프로그램은 실행 중에 사용자로부터 입력을 받게 되면 그 입력에 따른 메시지를 처리하고 그것을 화면에 보여주는 과정을 거친다. - 만약 사용자로부터 키보드나 마우스와 같은 입력이 없을 경우엔 프로그램은 사용자의 동작을 통해 발생하는 메시지가 없어 화면이 멈추는 현상이 일어날 것이다. - 이 경우를 위해 다른 동작에 의한 메시지가 없어도 메시지를 발생하는 것이 필요할텐데, 그것이 타이머 메시지이다. - 타이머 메시지는 일정한 시간 간격을 두고 계속 발생하는 메시지를 말한다. - 주기적으로 같은 동작을 반복해야 하거나 여러번 나누어 해야 할 일을 할 때, 이 메세지를 이용한다. 2. SetTimer - SetTimer는 타이머 생성 함수이다. 이를 통해 원하는 동작을 일정한 간격의 시간마다..
1. list 클래스 - list 클래스란 무엇인가? list 클래스는 표준 시퀀스 컨테이너 중 하나이며 선형적 구조를 띠며, 노드 기반 컨테이너이다. - 동적으로 list 클래스를 통해 데이터를 추가할 수 있으며, 그 데이터를 저장할 때 프로그래머는 메모리를 신경쓰지 않아도 된다. - 그럼 vector와 차이가 무엇일까? vector는 데이터를 연속적인 메모리공간에 저장하는 구조로 중간에 데이터를 추가하거나 제거한다는 상황에서 데이터를 다루는 방법이 list와 차이를 보인다. - vector는 중간에 있는 요소를 추가한다고 가정하면, 추가하고자 하는 요소의 주소값에 공간을 확보하기 위해 그 뒤에 있는 인덱스 요소값들을 모조리 인덱스를 하나 추가한 주소값으로 옮겨버린다. 그리고 공간이 확보된 요소의 주소..
1. vector 클래스 - vector 클래스란 무엇인가? STL을 정리하면서 봤었는데 그 글의 일부와 따로 조사한 것들을 정리해보겠다. - vector 클래스는 표준 시퀀스 컨테이너 중 하나이며, 선형 구조를 가진 배열 기반의 컨테이너이다. 동적 배열이라는 특징이 있다. - 그렇기에 원소를 추가하거나 크기를 잡는 등 동적으로 수행하기 때문에 사용자가 많은 것을 생각하지 않게 하며 메모리를 효율적을 관리한다는 장점이 있다. - 하지만 속도에서는 배열에 비해 떨어진다는 단점이 있지만 장점이 훨씬 커 많이 사용한다. - 배열과 마찬가지로 연속된 메모리공간에 데이터를 저장한다. 그렇기에 메모리 재할당에 대한 리스크가 있다는 것도 단점이다. 2. vector 구조 - 다들 vector의 구조를 설명할려고 하면..
- C++을 배우면서 단계를 밟다보니 vector 템플릿 클래스에 대해 얼핏 알게 되었다. 이와 더불어 STL에 속하는 컨테이너라는 것을 알게 되어 이를 정리할 필요성을 느껴 이 글을 작성하게 되었다. 1. STL - STL은 무엇일까? Standard Template Library의 약자이다. 그럼 그게 뭔데? - 표준 템플릿 라이브러리라고도 하며 C++ 표준 라이브러리이다. 컨테이너(자료구조), 반복자, 함수 객체, 알고리즘 등으로 이루어진 라이브러리라고 할 수 있다. 여기서 잠깐, 라이브러리가 무엇일까? ★ 라이브러리 : 소프트웨어를 개발할 때, 재사용이 필요한 기능을 언제든지 필요한 곳에 호출하여 쓸 수 있게 클래스나 함수로 모아둔 것을 의미한다. 특정 기능만을 수행할 수 있도록 제작된 것이라고 ..
1. 클래스 템플릿 - 클래스 템플릿을 선언하는 방법은 함수 템플릿과 유사하다. 다음 코드를 보도록 하자. template class Point { private: T xpos, ypos; public: Point(T x = 0, T y = 0) : xpos(x), ypos(y) { } ... } - 함수 템플릿을 선언한 것처럼 함수 머리 위에 동일한 구문을 작성해준다. 멤버변수나 멤버 함수의 매개변수 중 필요한 곳에 어디든 T를 적용하고, 객체를 생성할 때 자료형을 명시해주면 된다. Point pos(2.4, 4.6); Point pos1(3, 4); - 위와 같이 자료형에 맞는 템플릿 클래스를 통해 객체를 생성하는 모습이다. 이 경우 함수 템플릿과는 다르게 반드시 을 통한 자료형 명시를 해줘야 한다...
1. 템플릿이 무엇인가? - 열혈 C++ 프로그래밍에 적힌 설명이 매우 좋아서 이를 풀어 쓰려고 한다. - 템플릿은 모형자라는 뜻을 가지고 있다. 모형자에는 틀로 모형이 정해져 있고, 사용자는 그 모형틀에 원하는 색의 펜을 넣고 따라 그리면 된다. - 그 모형자의 특징을 풀어 쓰자면 이렇게 표현할 수 있을 것이다. 모형을 만들어 낸다. 모형의 틀은 결정되어 있지만, 모형의 색은 결정되어 있지 않아서 결정해야 한다. - 이 말을 템플릿에게 적용하면 어떨까? 템플릿 중 함수 템플릿을 예로 말을 풀어 써보자. 함수 템플릿은 함수를 만들어 낸다. 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 한다. - 이 말은 함수의 기능이 되는 몸체는 정의되어 있지만, 반환형이나 매개변수가 쓸 자료형..