본문 바로가기

전체 글

(37)
Class, Object, Instance 에 대한 글 가끔씩 OOP 관련된 강의나 동영상을 관심있게 보곤 한다. 이 사람은 어떤 관점으로 설명을 하고 있을까? 라는 관심이 이유다. 원론적인 설명을 하는 내용도 있지만, 대부분의 초보자를 위한 강의 영상에서는 이해를 돕기 위해 비유를 들어 설명하기도 한다. 그런데.. 그 내용이 썩 맘에 들지가 않는다. 최근에 자주 보이는 비유중 하나는 붕어빵(object)과 붕어빵틀(class) 라는 비유였는데 이건 class와 object의 관계를 오해하기 딱 좋은 비유라고 생각된다. 이 글은 그 이유에 대해 끄적여 볼 생각으로 쓰는 글이다. 붕어빵틀은 붕어빵이라는 object의 class가 맞는가? class를 원론적으로 기술하자면, 세상 (그것이 현실이든 아니든)에 존재하는 '어떤 것(object)'을 코드로 옮기기 위..
FloodFill Flood Fill을 쓸 일이 있어서 퍼다 쓸까 했었는데.. 최적화에 문제가 좀 있더군요. 그래서 최적화 적용해서 만든 김에 공유합니다. PixelColor 관련된 부분과 비트맵의 폭, 높이 관련된 부분만 적절히 수정하면 바로 실제 코드에 적용할 수 있도록 해두었습니다. void FloodFill( CPixelColor* pBmp, const int nPosX, const int nPosY, CPixelColor colorTarget, CPixelColor colorReplace ) { std::queue qNode; int nStrife = ::GetStrifeFromBitmap(); int nHeight = ::GetHeightFromBitmap(); CPixelColor* pNode = pBmp +..
'첫 프로그래밍 언어로서 왜 Python인가?' 라는 글을 읽고 (원문링크) '첫 프로그래밍 언어로서 왜 Python인가?' : http://ces.yonsei.ac.kr/?p=1576 미안하게도 이 글에는 매우 반대합니다. 글이 길어질듯 하니 경어는 생략하겠습니다. 첫 프로그래밍 언어의 선택은 중요한 문제다. 그러나, 이 글에서 언급한 '수업을 위한 프로그래밍 언어'의 요구조건 (구문, 구조 간단. 표현 용이. 현대적 접근법 지원. 실용성)은 파이썬만의 특징이 아니다. 첫 언어로 가장 기피되고 있는 C++를 예로 들어보자. 실용성과 현대적 접근법의 지원은 물론 되지만, 간단하거나 쉽지는 않다. 하지만, 관점을 돌려볼 필요가 있다. 두 가지 질문을 던져보겠다.1. 첫 프로그래밍 언어를 배우는데 그 언어의 100%를 배울 필요가 있는가? 2. 정말 배우려는건 '프로그래..
C++ 버전별 변천사 #3 - C++11 이번에 소개할 버전은 C++11입니다.한 가지 사과의 말씀을 드려야할 것이 C++11을 정리하려다보니 내가 여지껏 C++0x라는 명칭을 잘못 사용하고 있었더군요. C++0x는 C++11이 원래 2008년에 표준화될 계획이어서 붙여졌던 이름인데 2011년에 C++11이 표준화되면서 지금은 쓰이지 않는 이름이라고 합니다. (제가 C++03을 한참 사용하던 시절에 자주 듣던 이름이어서 혼동을...) 이전의 문서에서는 모두 03으로 오류를 수정해 두었으니 글 읽으시는 분들도 오해 없으시기 바랍니다.한 가지 더. STL 관련된 부분은 너무 많고, 버전별로 수정된 사항도 있어서 나중에 C++03부터 14까지 한꺼번에 정리를 할 예정입니다. (그래서, 이번 글에서 C++11의 STL 관련부분은 이름만 대충 나열할 참..
C++ 버전별 변천사 #2 - C++03 지난번 글을 경어로 적었더니 살짝 멀미가 나더군요. 그래서, 이번 글 부터는 죄송스럽지만 경어를 사용하지 않고 작성하도록 하겠습니다. (버릇없어 보인다거나, 글이 길어져도 좋으니 경어로 된 글을 보고 싶으시다는 분이 계신다면 안타깝지만 직접 경어로 인터프리팅 하시거나...) 이번에 살펴볼 버전은 2003에 표준으로 등록된 C++03 이다.나올 당시에는 C++의 완성판이다 라는 평가도 있었지만, 다음 버전이 나올 때 보니 그건 아니었던 걸로.사실, 언어적인 입장에서 변한 점은 별로 없다. 다만, C++03의 가장 큰 특징은 STL이 정식으로 C++의 표준 라이브러리로 제공되었다는 점이 중요하다. 덕분에 많은 골수 C++ 개발자들에게는 환영받았지만, 이 때 부터 정말로 '배우기 어려운 언어'가 되어버렸다. ..
C++ 버전별 변천사 #1 - C++98 앞으로 연재하듯 써내려갈 글들은 초보자를 위한 글이 아닙니다. 그렇다고 친절한 메뉴얼 같은 성격의 글도 아닙니다. 다분히 주관적인 입장에서 적는 소개의 글이 될 것이고, 개인적인 견해나 경험담이 주를 이룰것 같습니다.따라서, 혹시나 C++의 입문자이거나 전혀 익숙치 않은 분들에게 제 글은 오히려 혼란스러울 수도 있다는 점 미리 유의하시기 바랍니다. 하나하나의 항목들을 살펴보기 앞서 이번 포스트 부터, 지금껏 C++에 적용된 (혹은 앞으로 적용될 예정인) 사항들을 각 버전별로 간략히 정리해 보는 내용으로 채워볼까 합니다. C++98 ISO 표준으로 공식 등록된 첫 버전입니다. 이름 그대로 1998년에 등록되었고, Stroustrup의 저서인 "The C++ Programming Language (이하 TC..
C++ 이야기를 시작하면서 1992년. C++를 처음 접하면서 나의 프로그래밍 인생은 큰 전환점을 맞이했다.88년부터 배우기 시작했던 C언어에 익숙해질 대로 익숙해져 있던 시기에 만난 이 난해한 언어는 선배의 한 마디 조언 덕분에 정복하고 싶은 언어로 떠올랐다. "C를 잊어야 C++를 배울 수 있다" 그 시절 나는 우직했나보다. 정말 그 말대로 C를 잊기로 결심했고, 결국 거의 6개월 만에 C언어를 잊는데 성공했다. 물론, 잊는다는게 문법이라던가 사용법을 싹 다 잊어버린다는 의미는 아니다. 문제를 접근하는 C언어만의 방식을 잊는다는 의미다. 대표적인 Functional Programming Language인 C언어는 문제를 해결하기 위해 어떤 것들을 함수화 시키는지가 주된 접근법이었다. 함수의 특성상 다분히 기능 중심의 프로그래밍..
카드 효율에 대한 조금 복잡한 이야기 #2 보호되어 있는 글입니다.