목록분류 전체보기 (96)
강께르의 개발일지
1. 범위 기반 반복문, 범위 기반 for문이란? - C++11에서 제공하는 것으로 상대적으로 조금 더 복잡하고 실수할 가능성이 있는 for문을 일부 대체할 목적으로 사용할 수 있다. - 시작과 끝점을 알려주지 않아도 알아서 처음부터 끝까지 순회 해주는 반복문이다. - C#의 foreach와 비슷하다고 한다. 2. 범위 기반 for문 기본 사용 방법 for(element_declaration : array) statement; - 루프를 돌 때마다 array의 요소를 반복해서 해당 현재 배열 요소를 element_declaration에 선언된 변수에 할당한다. - 이 때, element_declaration의 자료형은 array의 자료형과 같아야 한다. int arr[10] = { 1, 2, 3, 4, ..
1. const를 사용하는 포인터 변수 - 보통 const를 사용해 변수를 상수화하면 상수화된 변수의 값은 변경하지 못한다는 개념이다. - 하지만 포인터 변수의 const 사용법은 두 가지이다. 그 방법은 다음과 같다. 포인터 변수가 가리키는 값을 상수화 포인터 변수가 저장하고 있는 주소값을 상수화 2. 포인터의 const 사용에 대해 2-1. 포인터 변수가 가리키는 값을 상수화 - 포인터 변수에 저장된 주소값을 역참조해서 그 메모리 공간에 있는 값을 변경하지 못하게 하고, 오직 그 주소값의 변수를 직접 접근하여 변경이 가능하다. - 이것이 포인터가 가리키는 값이 상수화가 된 것이다. - 사용 방법은 포인터 변수의 자료형 앞에 const를 넣는다. int a = 10; const int* ptr = &a..
1. 이것은 무엇인가? 이 게임은 이전에 만들었던 몬스터와 일대일 턴제 전투 게임과 내용이 거의 다를 것이 없다. 다른 부분을 짚자면 기존 한 파일 내에 기본 자료형으로 구성되었던 것을 구조체로 수정해서 만들었다는 것이다. 수정하는 김에 한 파일에 몰아넣어 있어 가독성이 떨어지는 점을 고려해 분할 파일로 코드를 보기 좋게 바꾸려고 시도했다. 그리고 코드를 좀 더 분할하여 함수화하는 방향으로 가독성 좋게 보이는 방안을 고민해보았다. 2. 새로 알게 된 점 - 객체 지향 프로그래밍의 장점을 어느 정도 알 것 같다. 기존의 코드에서는 코드 내에서 연관성이 있는 함수들이어도 실제로 묶어주는 게 없이 제각기 선언되어 있어 코드를 짜는 본인도 간혹 이해하기 힘들 때가 있었다. 그런데 구조체로 연관 있는 변수를 멤버..
1. 객체 지향 프로그래밍(Object-Oriented Programming, OOP)이란? - 객체 지향 프로그래밍에 대해 여러 설명이 있다. 문제를 바라볼 때, 여러 개의 객체 단위로 나눠 작업하는 방식을 말하기도 한다. - 프로그램을 여러 개의 객체 모임으로 간주하여 개발하는 것이다. - 상태와 행동으로 이루어진 다수의 객체를 만들어, 서로 상호작용을 통해 프로그램을 만들어지는 방식이다. - 여러 객체 지향 프로그래밍의 정의를 보아하니 공통점은 프로그래밍을 할 때, 여러 개의 객체를 생성하여 그 객체들을 이용해서 프로그램을 만들어가는 개발 방식 정도로 해석된다. 2. OOP의 장/단점 - 객체로 구분하여 프로그래밍하기에 코드의 재사용을 높일 수 있다. - 잘 만들어진 클래스는 프로그램을 확장하기에 ..
이 글에서 서술한 열거형은 C 스타일로 enum, C++ 스타일로 enum class로 나눌 수 있다. 열거형이 무엇이며, enum과 enum class의 다른 점이 무엇인지 조사하며 정리해보려고 한다. 1. 열거형이란? - 열거형의 '열거'의 의미는 '여러 가지 예나 사실을 낱낱이 죽 늘어놓음'이라고 한다. 이와 같이 열거형 또한 정수형 집합을 고유한 이름을 붙여서 죽 늘어놓은 것을 의미한다. - 특정 정수값에 별명을 붙여 프로그래머가 봤을 때, 해당 정수가 사용된 의미에 대해 직관적으로 이해할 수 있게 돕는 도구와 같은 것이다. 2. enum - 열거형을 사용하기 위해서는 enum이나 enum class를 사용해야 한다. enum의 생김새는 다음과 같다 enum TagName { Body }; - 열..
1. void 포인터란? - void 포인터는 const, volatile를 사용하여 선언되지 않은 객체를 포함한 모든 자료형 변수를 가리킬 수 있는 있다. - 가리키고 있는 변수의 자료형의 크기, 길이를 알아올 수 없을 뿐이다. 시작 주소를 제공 받아 쓸 수 있는 것이다. - 함수를 가리키는 주소값을 저장하여 함수형 포인터로 사용할 수 있다. - 다른 이름으로 제네릭 포인터(generic pointer)라고 불린다. 2. 사용 시 유의사항 - void 포인터는 자신이 가리키는 변수가 어떤 자료형인지 알지 못하기 때문에 직접 역참조를 할 수 없다. - 그러므로 void 포인터의 역참조를 수행하기 위해서 가리키고 있는 변수의 자료형으로 형 변환을 해야만 한다. - void 포인터의 포인터 연산도 역참조와 ..
이 글에서 설명할 Call by value / address / reference는 '함수가 호출될 때, 매개변수를 어떤 방식으로 전달할 것이냐?'에 대한 방법들이다. 앞에서부터 차례대로 한글로 번역하자면 '값에 의한 호출', '주소에 의한 호출', 참조에 의한 호출'이라고 할 수 있다. 1. Call by value(값에 의한 호출) - Call by value는 함수를 호출하여 매개변수를 호출된 함수에게 전달할 때, 값의 복사로 전달을 하겠다는 방식이다. - 값이 복사되어 전달되어 그 값으로 초기화된 매개변수는 전달되기 이전의 변수와는 완전히 별개의 변수다. - 그래서 함수 내에서 아무리 매개변수를 조작해도 전달되기 이전의 그 변수하고 다르기 때문에 어떠한 변경이 없다. int num = 10; fu..
1. 이것은 무엇인가? 컴퓨터가 무작위로 고른 4자리의 숫자를 맞추는 게임이다. 자릿수와 숫자가 맞은 것 하나당 스트라이크 하나로 인정하고, 자릿수는 다르지만 숫자가 맞은 것은 볼 하나로 인정한다. 이렇게 해서 스트라이크 4개 즉, 모든 숫자와 자릿수를 알아 맞히면 홈런이라고 하여 정답 처리를 하고 게임을 끝낸다. 숫자야구 진행 순서는 "시작 출력문 - 난이도 설정 - (플레이어 입력 - 입력한 값에서 정답 판단 처리 - 그에 대한 결과 출력) - 게임 종료 출력문"으로 이루어져있다. 2. 새로 알게 된 점 - int형배열을 4개의 요소로 하나 정의하고 그곳에 입력을 받으려고 시험삼아 1234를 입력했는데 아뿔싸, 첫번째 배열요소에 1234라고 때려박는 걸 발견했다. - 이에 대한 고민으로 문자열은 숫자..
1. 이것은 무엇인가? 새로 배운 함수와 배열을 이용해 몬스터와 일대일로 싸움을 주고받는 게임을 만들었다. 플레이어와 몬스터는 미리 설정된 능력치를 얻고 기본공격 하나와 강한 공격 하나, 그리고 그들만의 스킬 두개로 서로 턴을 주고 받으며 서로 체력을 감소시키게 된다. 둘 중 하나라도 체력이 1 미만이 되면 그에 따른 출력문과 함께 게임은 종료된다. 게임 진행은 "게임 시작 출력문 - (플레이어 선택 - 데미지 계산 - 몬스터 선택 - 데미지 계산) - 게임 종료 출력문"으로 된다. 스킬은 다른 특별한 기능을 넣기보단 데미지를 높이는 대신 명중률을 낮추거나 명중률을 올리는 대신 데미지를 낮추는 등 수치적인 부분으로 차별점을 두었다. 그리고 특별히 플레이어는 회복으로 소모된 체력을 증가시킬 수 있고, 몬스..
1. 함수는 무엇인가? - 반복적인 프로그래밍을 피하고 코드의 재사용과 유지보수에 용이함을 위해 함수를 사용하게 된다. - 함수란 하나의 특별한 목적의 작업을 수행하기 위한 독립적으로 설계된 코드의 집합 - 특정 작업을 수행하도록 만든 설계된 재사용 가능한 명령문이라고 한다. - 일정한 입력에 따라 미리 설계된 코드에 의해 일정한 출력을 반환하는 코드의 집합이라고 설명하고 싶다. 2. 함수의 모양 typeName valueName(parameter) { //function body; return value; } 함수의 모양은 네 가지 모습으로 구분할 수 있다. 1. 함수가 반환할 자료형 / 2. 함수를 지칭할 이름 / 3. 매개변수 / 4. 함수 몸체 2-1. 함수가 반환할 자료형 - 함수는 자신을 호출..