목록Categories (1099)
KoreanFoodie's Study
사람들은 전부 조금씩 다른 옷을 입고 있다. 오늘도 수많은 행자들은 남들과 다른 천쪼가리를 갖기 위해 백화점을 걷고 또 걷는다. 뒤적거린다. 사막에서 바늘을 찾듯이, 끝없는 탐구심은 멈출 줄을 모른다. 지치지도 않나 보다. 왜 모든 사람들은 남들과 다르게 입으려 하는 걸까. 같으면서도 조금 다르게. 비슷하면서도 특색있게. 왜일까. 모두가 꿈꾸는 똑같은 얼굴을 갖기 위해 분주하면서, 옷에는 왜. 강남언니가 되기 위해 따라쟁이라는 오명도 감수하면서 왜. 똑같은 눈, 똑같은 코, 똑같은 입을 갖길 바라는 사람들. 하지만 유독 옷에는 너그럽지 못한 사람들. 관대함을 경험하지 못한, 불쌍한 옷들에게 심심한 위로를 건내고 싶은 날이다. 선택받지 못한 피조물에게 축복을. 다음 생에는 누군가의 옷장에 걸려 있기를.
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 생성자의 초기화 리스트(initializer list) 간단한 예시 코드를 보자. class Test { int a; int b; Test(); } Test::Test() : a(1), b(2) {} 위의 예시에서, (생성자 이름) : var1(arg1), var2(arg2) ... 같은 형식을 써 주면, 생성자 호출과 동시에 멤버 변수들을 초기화해줄 수 있다. "동시에"라는 개념이 중요하다. 초기화 리스트를 사용하지 않으면 생성을 먼저 하고 그 다음에 대입을 수행하게 된다. 따라서, 초기화 리스트는 int a = 10; 와 같고, 일반 버전의 생성자는 int a; a = 10; 처..
모두의 코드를 참고하여 핵심 내용을 간추리고 있습니다. 자세한 내용은 모두의 코드의 씹어먹는 C++ 강좌를 참고해 주세요! 소멸자 클래스 생성자에서 만들어 준 자원은 객체가 소멸할 때 반드시 해제되어야 메모리 누수(memory leak)이 일어나지 않는다. #include class Marine { char* name; public: Marine(); Marine(const char* marine_name); ~Marine(); }; Marine::Marine() { name = NULL; } Marine::Marine(const char* marine_name) { name = new char[strlen(marine_name) + 1]; strcpy(name, marine_name); } Marine..
함수의 오버로딩 (function overloading) 함수의 오버로딩은, 인자로 들어오는 변수의 타입에 따라 이름이 같은 함수들 중 적합한 함수를 호출해 주는 것을 의미한다. 이때, 인자를 찾는 과정은 다음과 같다. 1 단계 : 자신과 타입이 일치하는 함수를 찾는다. 2단계 : 정확히 일치하는 타입이 없는 경우, 아래와 같은 형변환을 통해 일치하는 함수를 찾는다. Char, unsigned char, short 는 int로 변환된다. Unsinged Short는 int의 크기에 따라 int 혹은 unsigned int로 변환된다. Float는 double로 변환된다. Enum은 int로 변환된다. 3단계 : 위와 같이 변환해도 일치하는 것이 없다면 아래의 좀 더 포괄적인 형변환이 일어난다. 임의의 숫..
객체란? 객체는 인스턴스 변수(instance variable)과 인스턴스 메소드(instance method)로 이루어져 있다. 클래스 클래스는 객체를 찍어내는 '설계도'이다. 클래스 내부의 변수와 함수를 각각 멤버 변수(member variable)과 멤버 함수(member function)이라고 부른다. 멤버 변수와 함수는 접근 지정자를 설정할 수 있다. public : 외부에서 접근 가능 protected : 상속된 클래스만 접근 가능 private : 외부에서 접근 불가능 사실 C++에서 클래스와 구조체의 유일한 차이는 바로 접근 지정자에 있다!
new와 delete c에 malloc과 calloc이 있다면, C++에는 new와 delete가 있다. int* p = new int; *p = 10; delete p; 만약 지역변수를 delete로 해제하려 한다면 Heap이 아닌 공간을 해제하려 한다는 경고 메시지가 나타난다. 컴파일러는 변수를 가까운 곳에서 찾는다. int a = 4; { std::cout
참조자 (레퍼런스) 레퍼런스(reference)는 & 기호를 이용해서 표기한다. #include int main() { int a = 3; int& another_a = a; } 참조자는 별명, 즉 또다른 이름이다. 레퍼런스는 반드시 정의 시 누구의 별명이 될 것인지 지정해야 한다. 또한, 레퍼런스가 한 번 별명이 되면 절대로 다른 이의 별명이 될 수 없다! int a = 10; int& another_a = a; int b = 3; another_a = b; 제일 마지막 줄은, 실제로 "a=b"와 같은 의미를 지닌다. 또한, 레퍼런스는 메모리 공간 속에 존재하지 않을 수도 있다. 이는 레퍼런스를 위해 새로운 공간을 할당할 필요가 없을 수도 있다는 것이다. 참조자의 참조자? int a = 1; int& ..
이름 공간 (namespace) namespace는 정의된 객체가 어디 소속인지를 지정해준다. #include "header1.h" #include "header2.h" int main() { header1::foo(); header2::foo(); } 위의 예시처럼, header1과 header2에 같은 이름의 함수 foo( )가 정의되어 있더라도 namespace를 사용하면 구분해서 사용할 수 있다. 또한, "using namespace std;"와 같은 방식은 추천하지 않는다. std에는 수많은 함수들이 포함되어 있기 때문에, 충돌이 일어날 수 있기 때문이다. 이름 없는 이름 공간 이름 없는 이름 공간을 설정할 경우, 정의된 것들은 해당 파일 안에서만 접근할 수 있게 된다. 이 경우 마치 stati..
가치란 무엇인가. 무엇을 가치있다고 정의할 수 있을까. 비트코인이 처음 열풍이 불었을 때를 생생히 기억한다. 무엇이 가치 있길래 사람들은 데이터 쪼가리에 그리도 열광하는 것인가. 나 또한 비트코인 기술서적을 읽으며, 실제 투자도 하고 글도 쓰며 스타트업에도 기웃거렸다. 너무나도 궁금했기에. 당췌 그게 무엇이길래 그리도 가치가 있다고 하는지 알아야겠다고 생각했었다. 하지만 아무리 기술이 훌륭하다 한들, 결국 가치는 인간이 정하는 것이었다. 상호간의 합의, '이것은 가치가 있는 것이다'라는 공통의 신뢰가 무에서 유를 창출해내고 있었다. 출퇴근길을 책임지는 버스 유리창에는, 오늘도 명품 세일을 홍보하는 스티커가 덕지덕지 붙어있다. 명품은 정말로 가치가 있는 것일까. 억 소리가 나는 돈을 지불할 정도의 값어치가..
인생은 혼자다. 그렇기에 더욱 더 사람이 필요하다. 사람 인(人)이라는 한자를 해부하며 진부한 이야기 보따리를 풀고 싶은 것이 아니다. 다만 외로움에 대해서 한 번쯤 생각해 볼 필요가 있다는 걸 말하고 싶었을 뿐이다. 인간의 외로움이라는 것은 참으로 복잡 미묘해서, 나는 그것을 영원히 충족되지 못할 근원적인 공허함으로 정의내렸다. 정말로, 외롭지 않은 사람이 존재할 수 있는가. 수많은 사람들은 오늘도 다른 사람을 만난다. 눈을 마주치고, 이야기를 나눈다. 웃고 떠들고 포옹하고, 교감한다. 뜨거우면서도 차가운, 가까우면서 먼 관계를 잘도 맺는다. 하지만 그들의 하소연은 멈출 줄을 모른다. 사랑을 하고 있음에도 고독하다는 불편한 투정과, 사랑받고 있지 않음에서 오는 환상통을 느낀다는 우울한 푸념. 그리고 사..