전체 글

성장 과정 일기, 누군가에게 정보를 제공하기 위해서가 아닌 스스로 배운 내용을 정리하기 위해 작성하는 블로그 입니다. 잘못된 정보가 있으면 댓글로 적어주세요.
· C++/기초
객체 지향 우리가 이전 포스팅부터 지금까지 했던 방식은 절차(procedural) 지향 프로그래밍이다. procedural은 함수이다. 함수 흐름으로 프로그램이 동작하는 방식이 절차 지향 프로그래밍이다. C++은 객체 지향 언어인가?? 완전히 객체 지향 언어라고 보긴 어렵다.(C#이나 JAVA에 비해) 객체 지향의 주인공은 객체이다. 객체란? 플레이어, 몬스터, GameRoom 등 특정 오브젝트를 말한다고 보면 된다. 객체 지향에서는 데이터를 가공하는데 있어 객체를 기준으로 코드를 작성하는 것이다. Knight를 설계해보자. 속성(데이터) : hp, attack, y, x... 기능(동작) : Move, Attack, Die... 이러한 것들을 가지려면 설계도가 필요하다. 바로 Class 이다. #inc..
· C++/기초
다중 포인터 포인터를 통해서 우리는 어떤 데이터의 원본을 수정하거나 가져올 수 있었다. 하지만 모든 경우에 그런것은 아니다. 만약 다음과 같은 코드가 있다고 해보자. #include using namespace std; void SetMessage(const char* a) { a = "Bye"; } int main() { const char* msg = "Hello"; SetMessage(msg); cout
· C++/기초
배열의 필요성 만약 우리가 어떤 구조체 StatInfo 가 있다고 해보자. 우리가 몬스터를 100개, 1000개, 100000개 등등 심지어 갯수가 정해지지 않는 경우 우리는 그것을 하나하나 코드를 늘려가지 않을 것이다. 같은 타입끼리 묶어서 하나의 데이터 처럼 이용하는 것이 배열이다. Type 이름[개수]; 로 선언해 사용이 가능하다. #include using namespace std; struct StatInfo { int hp = 0xAAAAAAAA; int attack = 0xBBBBBBBB; int defense = 0xCCCCCCCC; }; int main() { StatInfo monsters[10]; return 0; } 여태껏 변수들의 [이름은] 바구니의 이름이었다. 하지만 배열의 [이..
· C++/기초
참조 전달 C언어에는 존재하지 않는 C++에 추가된 키워드이다. 포인터랑 느낌이 매우 비슷하다. 선언 방식은 다음과 같다. int& ref = number; 초기 값이 반드시 필요하다. C++ 관점에서는 number라는 바구니에 또 다른 이름을 부여한 것. number 라는 바구니에 ref 라는 다른 이름을 지어주는 것이다 앞으로 ref 바구니에다가 뭘 꺼내거나 넣으면, 실제 number 바구니(진퉁) 그 값을 꺼내거나 넣으면 됨. 포인터랑 참조랑 100% 기능적으로 동일하다. 그렇다면 왜 참조를 사용하는 것인가? 값 전달처럼 편리하게 사용하고 주소 전달 처럼 주소 값을 이용해 진짜 데이터를 건드릴 수 있는 두개의 장점을 다 합쳐놓은 키워드 인것이다. 물론 장점만 있는 것은 아니다. #include us..
· C++/기초
오늘 나눠볼 얘기는 C++에서 가장 악랄하고 많은 사람들을 괴롭게 만든 포인터에 대해 알아볼 것이다. 포인터 기초 1 포인터는 많은 프로그래머들이 위기를 느끼는 구간이다. 그러나 원리를 알고 이해하면 충분히 쉬운 개념이다. 그렇기 위해서는 거꾸로 생각할 필요가 있다. 포인터는 왜 필요한가?? 지금까지 우리가 코딩을 한 방식을 생각해보자. int number = 1; 라는 문장에서 number라는 이름의 4바이트 정수 타입의 바구니를 만든거이고, 이는 스택 메모리에 할당한다. 라는걸 의미한다. 따라서 스택 메모리에 있는 특정 주소(number 바구니)에 우리가 원하는 값을 넣은 셈이다. number는 오직 메모리에 이름을 우리가 붙인 것이다.(컴파일러가 찰떡같이 알아들어서) 이러한 방식은 나쁘지 않고 편리..
· C++/기초
함수 함수라는 이름은 여러 언어에서 다른 이름으로 불린다. 어셈블리에서는 프로시저, C#은 메소드, 루틴 등등으로 다양한 이름으로 불린다. 함수는 특정 코드의 묶음이다. 우리가 알고 있는 수학에서의 함수랑 동일하다고 볼 수 있다. 하지만 다른 점은 입력값이 없을 수도 있고 출력값이 없을 수도 있다. 함수를 만들 때는 input으로 무엇을 받고, ouput으로 무엇을 뱉을지 정해줘야한다 반환 타입 함수이름([인자타입 매개변수]) { 함수 내용 return ~~~; } 와 같은 형식을 가진다. 만약 hello world를 출력하는 함수를 만든다고 해보자. input : 없음 / output : 없음 타입 : void -> 반환값없음 #include using namespace std; void PirintH..
· C++/기초
가위 바위 보 이전 포스팅에서 사용한 코드를 전부 다 이용해서 가위 바위 보 프로그램을 만들어보자. #include using namespace std; int main() { srand(time(0)); const int SCISSORS = 1; const int ROCK = 2; const int PAPER = 3; while (true) { int input; cout input; int computer = 1 + (rand() % 3); switch (input) { case SCISSORS: if (computer == SCISSORS) cout
· C++/기초
분기문 데이터를 메모리에 할당하고 가공하는 방법에 대해 알아 봤다. 그런데 가공한 데이터를 이용해서 무언가를 하고 싶다면?? 어떤 방법을 써야할까?? 가령 예를 들어서 플레이어가 몬스터를 죽였을 때, 경험치를 획득하는 코드를 짠다고 해보자. #include using namespace std; // 데이터를 메모리에 할당하고 가공하는 방법에 대해 알아봄 // 가공한 데이터를 이용해서 무언가를 하고 싶다면?? int main() { #pragma region 분기문 int hp = 100;// 몬스터 Hp int damage = 100; // 플레이어 데미지 hp -= damage;// 피격 판정 bool isDead = hp
· C++/기초
데이터 연산(산술 연산) 데이터를 가공하는 것이나 다름없다. 산술 연산자는 대입 연산과 사칙 연산 등이 있다. 대입 연산 int a = 0; int b = 1; a = b; a라는 이름의 바구니를 할당하고 안에 0을 넣는다. b라는 이름의 바구니를 할당하고 안에 1을 넣는다. a=b;는 a를 b에 대입하고 b를 반환하라는 의미이다. 이 말의 의미는 b 라는 바구니 안에 있는 값을, a 라는 바구니 안에다가 복사한다는 의미가 된다. 즉, 저 코드를 전부 실행하면 둘 다 1이라는 값을 가지게 된다. 프로그래밍을 하면서 가장 많이 사용하는 산술 연산자 이다. 그렇다면 사칙 연산은 언제 사용할까?? 데미지를 계산한다던지, 체력이 닳는다던지 등등 우리가 생각하는 모든걸 사칙 연산을 통해 계산한다. a = b + ..
· C++/기초
C++ 공부에 앞서 우리가 C++을 공부하기 이전에 어셈블리에 대해 포스팅하고 공부했다. 그게 왜 중요했는지 잠깐이나마 얘기한다. #include int main() { std::cout 2 바이트 (-32768 ~ 32767) int c; => 4 바이트 (-21.4억 ~ 21.4억) __int64 d; => 8 바이트(long long으로 쓰기도 함.) 어마어마 하게 큰 숫자 우리가 대부분 정수를 사용한다고 하면 int 타입을 떠올리고 사용한다. 그리고 타입을 선언할 때 signed는 생략되며 선언이 된다. 즉, 부호가 있다는 의미다. 하지만 반대로 unsigned를 사용하게 되면 부호가 사라진 양수가 되기 때문에 범위가 넒어진다. unsigned char a; unsigned short b; uns..
Mintriever
어제보다 성장한 나