전체 글 (59) 썸네일형 리스트형 19. 클래스(Class) 클래스의 개념을 이해하기 위해 다양한 비유들이 있다. 이는 그만큼 이 클래스라는 개념이 정말 중요하고, 앞서 말한 객체지향 프로그래밍을 다룰 때 없어선 안 될 존재라는 것을 증명하는 지표인 것 같다. 클래스를 비유하는 말에는 여러가지가 있다. 대표적인 예로는 설계도라고 말 할 수 있을 것이다. 설계도를 통해서 물건을 만들면, 그 물건은 몇번을 만들어내도 설계도와 똑같이 만들어지기 때문이다. 우리가 일상생활 속에서, 가족과 굉장히 닮은 사람을 보면 붕어빵이라고들 말 한다. 어쩌면 클래스는 이러한 이유에서 설계도 보다는 붕어빵을 만드는 붕어빵 틀이라고 하는 것이 더 친숙한 표현일 수 있겠다. 클래스는 붕어빵 틀이다. 붕어빵 틀을 통해 만들어진 붕어빵은 모두 붕어빵틀의 모양대로 생겼다. 하지만 붕어빵 틀이 있.. 18. 객체지향(OOP)과 절차지향(PP)프로그래밍 절차지향 코딩에서 객체지향으로의 변화를 일으킨 클래스를 배우기 이전에, 객체지향에 대해 알아보자. 기존의 코딩 방식은 절차지향. 즉, 하나의 선상에서 순차적으로 프로그램이 진행되며 구현되는 것이었다면, 객체지향은 프로그램 구현에 필요한 각 객체들을 중심으로, 각 객체들이 가진 요소나 기능들을 활용하여 프로그램을 구현하는 것이다. 절차지향 프로그래밍 (Procedure Programming)은, 말 그대로 처리기(Procedure)를 통해 구현되는 프로그래밍이다. 데이터 위주로 이루어진 이 처리기들은 프로그램을 처리순서대로 처리하여 프로그램을 구현시킨다. 이 때, 다루려는 데이터의 자료형이나 의미들을 변경할 필요가 생기면, 해당 데이터를 다루는 모든 처리기의 값을 수정해야하기 때문에, 수정이나 변경등에 있.. 17. 네임스페이스 (namespace) 이번에 다룰 내용은 간략하게만 다루고 넘어가고자 한다. 네임스페이스는 프로그램 구현이나 알고리즘에 직접적인 코드 부분이 아닌, 협업 혹은 서로 다른 개체들의 구획을 위한. 즉, 편의성과 가독성을 위한 부분이기 때문이다. A회사와 B회사가 있다고 가정해보자. A사와 B사는 서로 같은 프로그램을 만들기 위해 협업중이다. 프로그램 구동중에, 어떠한 함수. 예를 들면, 어떤 글자를 출력해주는 Print라는 함수라고 생각해보자. 프로그램을 구동하면서 Print를 호출했는데, A사도 Print라는 이름의 함수를, B사도 Print라는 이름의 함수를 사용했던 것이다. 프로그램은 이럴 때 에러를 출력한다. 어떤 Print를 호출할지 정하지 않았기 때문이다. 이러한 현상을 막기 위해 필요한 것이 namespace다. 위.. 16. Call by Reference, Call by Value, Call by Reference #include void Address(int* n); void Reference(int& n); int main() { int num1 = 30; Adress(&num1); std::cout 15. 포인터 앞서, 반복문을 다룰 때 프로그래밍의 꽃이라고 말했던 적이 있다. 그 때 이런 비유를 했던 것은, 프로그래밍을 할 때 가장 많이 사용하고, 또 대부분의 알고리즘들이 반복문을 사용해서 이루어지기 때문에 그렇게 말했었다. 사용 빈도와 활용성에 있어서 반복문이 프로그래밍의 꽃이라면, 포인터는 그 개념의 중요성과, 해당 개념을 이해하는데 까지의 과정이 굉장히 험난하다는 이유로 프로그래밍의 꽃이라고 부르고 싶다. 많은 사람들이 포인터의 개념을 이해할 때, 많이 좌절하고 포기한다고들 한다. 이것은 전공자도, 비전공자도 예외는 없는 것 같다. 공부해보니 한번에 이해하기 쉽고 굉장히 복잡하지만 이해되는대로 다루어보려고 한다. 전에 함수에서, 함수에 전달된 매개변수는 함수의 시작과 동시에 할당되고, 함수가 종료되면 사라.. 14. 사용자 정의 자료형 struct (구조체) 변수를 선언함에 있어, 서로 같은 이름의 변수. 즉, 같은 의미를 같는 변수를 여러번 선언할 때가 있다. 예를들어, 플레이어와 몬스터의 전투를 구현할 때, 플레이어와 몬스터는 각각 체력과 공격력 등, 같은 개념을 가지고 있다. 이럴 때, 우리는 monHp, playerHp 등 변수의 이름을 바꾸어 선언하였다. 이렇게 같은 개념을 공유하는 변수를 선언할 때 사용할 수 있는 것이 사용자 정의 자료형 struct이다. 여러개의 변수를 묶어서 하나의 데이터 단위로 정의하는 것을 뜻하며, 관련있는 데이터를 묶어서 표현할 필요가 있을 때 사용한다. #include struct Unit { int hp; int atk; int level; void PrintHp(int hp); }; int main() { Unit .. 13. 난수 발생 프로그램을 배우며 여러 실습등을 거치다 보면, 만들고자 하는 프로그램에 확률이 필요하거나, 무작위로 무언가 할 필요가 있을 때가 있다. 이러한 알고리즘을 구현하고자 할 때, 임의로 조작하는 것도 가능하지만, 보다 간편하고 확실한 난수를 발생시킬 수 있도록 도와주는 전처리기가 있다 #include #include int main() { srand(time(NULL)); int a = 0; for(int i = 0, i < 5; i++) { a = rand() % 5; std::cout 12. 열거형 타입 enum 앞서 switch문을 다룰 때, switch는 if문과는 다르게 조건을 비교 연산자로 설정할 수 없고, 오직 상수로만 정할 수 있다고 하였다. 따라서 switch문을 사용할 때 아래와 같은 문제점이 발생하기도 한다. #include int main() { int input = 0; std::cout > input; switch(input) { case 1: // 이동하기 break; case 2: // 공격하기 break; case 3: // 방어하기 break; case 4: // 회피하기 break; case 5: // 스킬 사용 break; default: break; } } 위와 같은 형태로 분기를 나누면, 1번부터 5번에 해당하는 행동이 무엇인지 switch문만 보고는 알기 어렵고, 위의 행동선.. 이전 1 2 3 4 5 6 7 8 다음