목록분류 전체보기 (96)
강께르의 개발일지
1. 이것은 무엇인가? - STL에서 제공하는 스택을 이해하기 위해 직접 구현해보았다. 2. 스택이란 무엇인가? - 스택은 가장 먼저 들어온 데이터가 가장 늦게 나가는 방식을 사용하는 자료구조이다. 이 방식을 선입후출, First in Last out, FILO라고도 한다. - 이런 특성을 살리기 위해 top이라는 인덱스가 필요하다. 이는 현 스택에 데이터의 마지막 혹은 스택의 꼭대기가 어디에 있는지 알려주기 위함이다. - 이 top을 통해 데이터를 맨 앞부터 차곡차곡 쌓고 맨 뒤부터 다시 빼는 방식을 구현할 수 있다. 3. 요구 사항 - 스택의 데이터 추가 - 스택의 데이터 제거 - 스택의 데이터 유무 확인 - 스택의 포화 상태 확인 - 스택의 모든 데이터 출력 4. 함수 설명 - 스택에 대한 아래 코..
1. 이것은 무엇인가? - STL에서 제공하며, 노드 기반 자료구조로 사용을 하는 리스트를 이해하기 위해 직접 구현해보았다. 2. 단방향 리스트 구조 - 아래의 글은 이 블로그의 'list 템플릿 클래스' 글에서 가져온 것이다. - list는 다수의 node라는 데이터 구조로 이루어져있다. - node는 값을 저장하는 data와 그 다음 노드의 주소값을 저장할 next로 이루어져있다.(여기서 이름은 임의로 지정한 것이다.) - node는 그 다음 노드의 주소를 가리켜서 그 다음 노드를 접근할 수 있다. - 그렇게 연속적으로 접근하면 가장 마지막 노드까지 접근할 수 있을 것이다. - 이런 접근으로 데이터를 저장하고 다루는 것이 list이다. - head는 가장 앞에 있는 노드이며 특정한 data를 지니지 ..
1. 이것은 무엇인가? - 플레이어의 인벤토리와 상점 간의 상호작용을 구현해보았다. 일반적으로 상점에서 할 수있는 매매 기능과 인벤토리에서 물건을 확인하고 원하는 장비로 착용할 수 있게 하는 기능을 구현한 것이다. 2. 요구 사항 - 상점에서 사고 팔기가 가능하도록 기능을 구현 - 사고 파는 과정에서 플레이어의 돈의 증감이 있도록 한다. - 갯수는 무한정으로 설정하는 것이 아닌 한정적인 수량으로 사고 파는 것으로 한다. - 인벤토리에 물건이 어떤 것이 있는지 볼 수 있도록 한다. - 장비를 확인하고 원하는 장비를 인벤토리의 물건과 바꿔 착용할 수 있게 한다. - 이에 대한 기능을 구현할 때, vector로 이용해 데이터를 관리하도록 한다. 3. 클래스 구성 - 클래스는 기본적으로 플레이어 클래스, 인벤토..
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++ 프로그래밍에 적힌 설명이 매우 좋아서 이를 풀어 쓰려고 한다. - 템플릿은 모형자라는 뜻을 가지고 있다. 모형자에는 틀로 모형이 정해져 있고, 사용자는 그 모형틀에 원하는 색의 펜을 넣고 따라 그리면 된다. - 그 모형자의 특징을 풀어 쓰자면 이렇게 표현할 수 있을 것이다. 모형을 만들어 낸다. 모형의 틀은 결정되어 있지만, 모형의 색은 결정되어 있지 않아서 결정해야 한다. - 이 말을 템플릿에게 적용하면 어떨까? 템플릿 중 함수 템플릿을 예로 말을 풀어 써보자. 함수 템플릿은 함수를 만들어 낸다. 함수의 기능은 결정되어 있지만, 자료형은 결정되어 있지 않아서 결정해야 한다. - 이 말은 함수의 기능이 되는 몸체는 정의되어 있지만, 반환형이나 매개변수가 쓸 자료형..
- 앞의 내용에 이어서 연산자 오버로딩에 대해 계속해서 정리하려고 한다. 1. 단항 연산자의 오버로딩 - 앞에서 했던 것은 이항 연산자라고 한다. 지금부터 할 것은 단항 연산자의 오버로딩이다. 대표적인 단항 연산자는 증감 연사자가 있을 것이다. ++pos // 증가 연산자 전위 연산 pos--; // 감소 연산자 후위 연산 - 이것은 어떻게 구현할까? 연산자의 이름은 우리가 알고 있고, 단항 연산자이니 객체가 호출하는 멤버함수의 형태로 오버로딩을 한다면 다음과 같은 형태를 띄게 될 것이다. pos.operator++(); - 전달할 인자가 없는 것은 단항 연산자이기 때문에, 그나마 있는 피연산자 하나는 멤버함수의 호출 용도로 사용하고 있다. 전역함수로 선언한다면 피연산자 하나가 매개변수로 전달되어 다음과..
- 연산자 오버로딩을 공부하던 중, 전역 함수로 연산자 오버로딩을 위해 friend 키워드가 사용된다는 것을 알았다. - 이를 정리하고 연산자 오버로딩을 계속 정리하려고 한다. 1. friend 키워드 - friend 키워드는 멤버로 선언된 특정 클래스나 함수에게 붙여 그들에게 private처럼 접근이 불가능한 멤버를 공개한다는 의미이다. - friend 선언은 어디에 있든지 상관없다. public이든 private든 상관없다. 그렇게 선언된 변수인 클래스나 함수는 그 클래스의 private 멤버에 접근할 수 있다는 것이다. 이는 정보은닉이라는 특징을 무너뜨리는 것이기도 하다. class Point { private: int xPos; int yPos; public: Point(int x = 0, int..