본문 바로가기

프로그래밍

(26)
[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』에게만 의미가 있는 상수들이다. 즉, 다른 영역에서 사용하..
[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++에서 제..
[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, 불러오기)되어야 한다. 또한, 프로그램에서 사용되는 변수들도 어..
[C++] 이명제조기, 참조자 - 5 (with. 함수) 들어가며 필자는 20대 초반이며 이제 막 대학에 입학하는 입장인지라, 대학 생활이나 OT, MT 등등 기대하고 있었는데 MT는 커녕 empty에 가까운 것 같다. 진짜 나한테 왜 그래 어흐흑. const 참조자의 뇌절 전 글에서 const 참조자에 대해 이야기한 바가 있다. 이와 관련하여 추가적으로 보충할 내용이 남아있다. 그럼 어쨌거나 저쨌거나 다음 코드를 보고 논리적으로 무엇이 잘못 되었는지 확인하라. const int num = 20; int& ref = num; ref += 10; cout
[C++] 이명제조기, 참조자 - 4 (with. 함수) 들어가며 시작하기에 앞서 드디어 본인이 현재 서식하고 있는 지역에서도 코로나 바이러스 확진자가 나왔다. 발이나 손은 반드시 외출 후 세척해야 한다. 신천지 신도라고 환자가 말해주었기에 천만다행으로 빠르게 역학조사가 실시 되었다. 지금 할 수 있는 최선의 방법은 외출을 자제하는 것이지 않을까. 참조형 반환(진) - 중 전 글의 끝 무렵에 코드를 주고 해석을 하고 의미를 찾아오라고 하였다. 우선 그 코드는 다음과 같다. #include using namespace std; int& RefRetFuncOne(int& ref) { ref++; return ref; } int main() { int num1 = 1; int num2 = RefRetFuncOne(num1); num1+=1; num2+=10; cout
[C++] 이명제조기, 참조자 - 3 (with. 함수) 들어가며 1720년에는 마르세이유 역병이 창궐했다. 1820년에는 콜레라, 1920년에는 림프절 페스트, 그리고 2020년에는 코로나 바이러스. 이쯤 되면 지구가 친환경을 직접 실천하는 것이 아닐까 싶다. 100년 주기로 이렇게 기승인 것을 보면, 역병 스킬 쿨타임이 꽤나 긴 것 같다. 진짜 Call-By-Reference 전 글에서 말했듯이 이번엔 진짜 'Call-By-Reference' 방식을 학습할 것이다. 이름에 맞게 참조자를 사용한 함수 호출 방식 말이다. 전에도 말했다시피 핵심은 '함수 외부에 선언된 변수에 접근' 이지 않은가? 일단 빠르게 코드와 부딪쳐보자. int SwapByRef(int& ref1, int& ref2) { int temp = ref1; ref1 = ref2; ref2 = ..