본문 바로가기

분류 전체보기

(392)
[C++] C의 구조체와는 클라스가 다르다, 클래스(Class) - 3 들어가며 전 포스트까지는 C++의 구조체 클래스의 일종이었다. 이제부터는 진짜 클래스를 배울 수 있다. 드디어! 와! 구조체와 클래스의 차이점, 단 하나! 키워드 『struct』대신 『class』를 사용하면, 구조체가 아닌 클래스가 선언된다. 즉, 다음의 코드는 클래스의 정의라고 할 수 있다. class Weapon { char weaponID[WEAPON_CONST::ID_len]; // 무기 아이디 int dura; // 내구도 int dura_dbf; // 내구도 디버프 조건 int atk_dmg; // 공격력 void WEAPON::ShowWeaponState() { · · · · · } void WEAPON::Attack() { · · · · · } void WEAPON::Repair() { ·..
[C] 힘숨찐 자료형, 열거형 들어가며 오늘은 열거형에 대해 공부할 생각이다. 왜 이렇게 배우는 순서가 들쭉날쭉한지 궁금한가? 안 알려줄 것이다. 내 맘이다. 히히. 힘을 숨긴 찐따 ValueA, ValueB, ValueC라는 정수형 상수를 선언한다면 두세 개까지는 뭐 그럭저럭 괜찮지만 개수가 많아지면 입에서 야발 소리가 절로 나오지 않을 수가 없다. const int ValueA = 1; const int ValueB = 2; const int ValueC = 3; · · · · · 이러한 상황에서 열거형(enumeration)을 사용하여 정수형 상수를 좀 더 편하게 정의할 수 있다. 다음처럼 말이다. 열거형은 정의만 한다고 해서 사용할 수가 없다. 따라서 열거형도 변수로 선언해서 사용한다. enum (열거형 이름) (변수 이름);..
[C++] C의 구조체와는 클라스가 다르다, 클래스(Class) - 2 들어가며 오늘도 클래스를 제대로 배울 수 있는지 클래스를 배우고 있는지는 아무도 모른다. 아무튼 일단 들이받고 보는 거다. 하나 정확한 것은, 클래스로 나아가고 있다는 점. 절대 클래스를 배움에 있어서 빗나가고 있지는 않다. 아무튼 시작하겠다. 구조체 안에 enum 상수의 선언 전에 필자가 보여준 코드에는 다음과 같은 매크로 상수들이 있다. #define ID_len 30 // 아이템 이름(ID) #define MAX_DURABILITY 250 // 내구도 최대치 #define DURABILITY_DEBUFF 50 // 내구도 디버프 #define DURABILITY_STEP 2 // 내구도 감소 수치 그런데 이들 상수 역시 구조체 『WEAPON』에게만 의미가 있는 상수들이다. 즉, 다른 영역에서 사용하..
[1. 개념잡기 - 4] 시스템 기획의 중요성 시스템 기획 기능 개발 기능 개발을 할 때는 시스템적인 접근을 하는 것이 크게 매력적이지 않을 수 있다. 하지만 이후 기능을 활용하는 시점이 되면, 개발된 시스템이 큰 힘을 발휘한다. 특히 컨텐츠를 제작할 때 필요한 기능들을 시스템으로 구현해 두었다면, 컨텐츠 제작에 드는 비용을 많이 줄일 수 있다. 『League of Legend(LOL)』에 등장하는 『이즈리얼』의 『정조준 일격(컨텐츠)』과 『징크스』의 『초강력 초토화 로켓(컨텐츠)』과 『애쉬』의 『마법의 수정화살(컨텐츠)』을 비교해 보자. 이 세 스킬은 『직선 투사체(시스템)』를 발사하는 스킬이며 세부 능력치는 다르지만, 기능은 거의 동일하다. 직선 투사체 기능을 시스템적으로 개발한다는 것은 투사체의 종류, 투사체의 사거리, 투사체의 판정 등을 시스..
[C] 자료형을 설계하다, 구조체 들어가며 C++에서는 클래스가 있다면 C에서는 구조체가 있다. 뭔가 순서가 좀 바뀐 것 같지만 아무튼 기분 탓이다. 구조체도 어디서 많이 들어만 봤지 뭐하는 놈인지 감도 잘 안 잡히고 어디다 써먹는지도 모르는 게 우리의 현실이다. 어쨌든 이번에도 구조체를 박살 내 보도록 하자. 사용자 정의 타입, 구조체 구조체(Structure Type). 사용자가 C언어의 기본 타입을 가지고 새롭게 정의할 수 있는 자료형이라고 말할 수 있다. 구조체의 정의가 그렇다고 한다면, 그럼 어디다가 써먹을 수 있는가? 구조체는 기본 타입(자료형)만으로는 나타낼 수 없는 복잡한 데이터를 표현할 수 있다. 예를 들어, 배열이 같은 타입의 변수 집합이라고 한다면 구조체는 다양한 타입의 변수 집합을 '하나'의 타입으로 나타낸 것이다...
[C++] C의 구조체와는 클라스가 다르다, 클래스(Class) - 1 들어가며 클래스에 대해서 배우기 전에, 구조체에 대해서 알고 있음을 전제로 글을 진행해 나가기 때문에 구조체에 대한 이해가 부족하다면 이 블로그의 구조체에 관한 글을 먼저 읽고 오길 바란다. C++에서의 구조체 본격적인 C++의 클래스를 배우기 전에 간단하게 알고 가자. C에서 '구조체 변수'를 선언하는 방법은 다음과 같다. struct weapon sword; struct potion potion_red; C++에서는 기본 자료형 변수의 선언 방식이나 구조체를 기반으로 정의된 자료형의 변수 선언 방식에 차이가 없다. 즉, C++에서는 별도의 typedef 선언 없이도 다음과 같이 변수를 선언할 수 있다. weapon sword; potion potion_red; 아무튼 이와 관련하여 구조체를 기반으로 ..
[C++] new와 delete의 동적 할당 들어가며 이 시국이 계속 지속되는 한······. 당신의 새내기 생활 및 1학기 전부, 사이버 강의로 대체되었다. 아마 본인은 대학으로 상경하지 못한 체 현재 주거지에서 죽치고 있을 미래가 보인다. 이러고자 공부해서 대학 갔나 자괴감이 들고 괴롭다. C언어를 공부하면서 malloc 함수와 free 함수의 필요성을 이해하는 것은 하나의 고비가 될 수 있다. 그러나 필자는 독자들이 힙 영역의 특성을 이해하고, 힙 메모리 할당 및 소멸에 필요한 함수가 malloc과 free 임을 알고 있다는 전제를 가지고 이번 글을 시작하도록 하겠다. new & delete 우리가 기존에 듣도 보도 못 한, 그런 키워드를 배워볼 차례다. 일단 이해하기에 앞서, C의 동적 할당에는 2가지 불편한 점이 있다 그런데 C++에서 제..
[1. 개념 잡기 - 3] 시스템 기획과 비용 비시스템 기획과 시스템 기획의 비용 기능을 비시스템적으로 개발하게 되면 최소한의 비용으로 개발을 할 수 있다. 그렇기 때문에 속도와 비용이 중요한 프로토타이핑에서는 시스템 개발을 하지 않고, 되는 대로 빠르게 개발을 하는 것이다. 근시안적인 관점에서의 시스템 개발은 효율이 떨어지는 경우가 많다. 하지만 장기적인 관점에서는 시스템 개발을 통한 기능이 오히려 더 경제적으로, 비용을 줄일 수 있다. 시스템 기획의 비용 먼저 시스템 개발을 통해 얻는 높은 완성도는 장기적인 관점에서 개발 비용이 줄어듦을 알 수 있다. 기능의 완성도가 증가함에 따라 결함과 하자가 줄어들고, 줄어듦에 따라 수정해야 하는 상황도 적어진다. 게임의 결함은 시간이 지날수록 그 수정 비용이 엄청나게 커진다는 것을 생각해 보면, 높은 완성도..
[1. 개념 잡기 - 2] 시스템 기획의 양면성 시스템 기획의 장단점 우리는 원인과 근본, 이유를 생각할 필요가 있다. 즉, '왜'라고 질문해야 한다. 핵심 기능에 대해 시스템 기획을 해야 한다는 당위성에 대해서 말이다. 시스템 기획의 장단점, 기본적인 목적을 인식하고 시스템 기획을 하는 것이 바람직하다고 생각한다. 이를 통해서 불필요한 시스템 기획은 줄이고, 더 나은 방향으로 시스템 기획을 할 수 있을 것이다. 시스템 기획 개발의 장점 기능이 시스템 기획으로 개발되었을 때의 가장 큰 장점은 높은 완성도를 기대할 수 있다는 것이다. 시스템 기획은 기능을 위해 필요한 것을 심사숙고하여 체계적으로 정리한다는 의미다. 그렇기에 단순히 기획하여 개발된 기능들보다, 시스템 기획으로 개발한 기능들은 더 높은 완성도를 기대할 수 있는 것이다. 또한 시스템 기획으로..
[C] 이 메모리는 무료로 할당해 줍니다. (실전편) 들어가며 오늘은 필자가 주로 애용하는 유튜브 채널을 추천해 줄 생각이다. 공부를 하거나 코딩을 하거나 이렇게 블로그를 운영할 때 적막함을 한 층 덜어준 아주 고마운 채널이다. 소리를 적당히 줄이고 배경음이나 백색소음처럼 깔아 두면 잔잔한 음악이 꽤나 괜찮은 채널이다. 여러분도 한 번 애용해 보는 것을 추천한다. 실전 박치기 전 글에서는 메모리 할당과 해제에 대해서 알아보았다. 그렇다고 딱히 뭔가 실제로 사용해보지는 않았다. 따라서 오늘은 여러 코드를 가지고 해석해 보며 실전적으로 알아볼 예정이다. 아무튼 다음 코드를 보고 해석해 보라. #include #include // malloc, free 함수가 선언되어 있는 헤더 int main() { int num1 = 20; int* numptr1; nump..
[C] 컴퓨터의 산와머니, 동적 할당 (Ver. c) (개념편) 들어가며 들어가기에 앞서 본 필자는 대부업에 관해서는 잘 모르고 대출과 금융권에 대해서 심도 있는 소견을 가진 사람이 아니니 이점 참고하며 글을 읽어나가길 부탁하겠다. 전 포스트에서는 메모리에 대해서 알아보았다. 그중에서도 함수의 호출과 관련이 있는, 아무튼 프로그램이 실행되는 것과 아주 밀접하게 관련이 있는 '스택 영역(Stack Segment)'에 대해서 알아보았다. 오늘은 메모리의 여러 영역 중에서도 사용자가 직접적으로 관여하여 관리할 수 있는, 그리고 해야만 하는 영역인 '힙 영역(Heap Segment)'에 대해서 알아볼 예정이다. 메모리계의 산와머니, 동적 할당 '힙 영역(Heap Segment)'의 메모리 크기는 프로그램이 실행되는 도중인 런 타임(Run Time)에 사용자가 직접 결정하게 ..
[C] '메모리' 잘 모르는 사람, 앞으로 나오시오. (기본편) 들어가며 '동적 할당'이라고 들어본 적 있는가? 프로그래밍을 처음 배우는 입장에서의 이 단어는 매우 생소하기 그지없다. 그렇다고 필자라고 해서 익숙한가? 전혀 그렇지 않다. 급하게 뒤로 가기 버튼이 마려워지는가? 같이 배워가는 입장에서 너무 그러지 말길 바란다. 그만큼 이 개념을 처음 접하는 사람의 입장과 시각에 입각해 바라볼 수 있기에 더 쉽게 설명할 수 있지 않겠는가? 그렇기에 신뢰해주길 바란다. 아 믿어달라고. 메모리는 어떻게 생겨먹었는가 메모리(Memory). 듣기만 많이 들어봤지, 구조나 구성이나 우린 그런 거 아무것도 모른다. 알아도 일단 아무튼 모른다고 가정하자. 프로그램이 실행되기에 앞서, 프로그램은 메모리에서 로드(Load, 불러오기)되어야 한다. 또한, 프로그램에서 사용되는 변수들도 어..