Oct 282008
 

웹 서핑 중에 간단히 잘 정리된 사이트를 찾아서 가물가물 하던 터에 한번 정리해봤다.

 

Assignment Operator =

MyClass& operator=(const MyClass& rhs)
{
    // check for self-assignment
    if (this == &rhs)       return *this;

    // 어쩌구 저쩌구

    return *this;
}

자기를 자기 자신에게 대입(self-assignment)하는지 검사하는 버릇을 들여야 한다. 메모리 할당, 해제를 하는 클래스는 self-assignment 검사를 안 해주면 저기서 안 죽고 엉뚱한 곳에서 터지는 버그로 고생할 수 있다. 프로그램이 저기서 잘 죽어 주기만을 빌어야 한다.

리턴 값이 const-reference가 아니라서 좀 이상할 수 있는데, 이딴 식의 대입을 지원하기 위해서이다. primitive type은 다 이런 대입을 지원하니, 내가 정의한 클래스도 지원해주도록 한다.

MyClass a,b,c;
(a=b)=c;

Continue reading »

by-nc-sa

Oct 172008
 

조엘이 소프트웨어에 관한 좋은 글들을 묶어서 책으로 냈다. 내가 관심 있는 분야에 관한 글도 있고 소셜 네트워크와 같이 관심 없는 분야의 글도 실려 있다. 처음에는 관심 있는 분야만 쏙쏙 골라서 봤는데, 관심이 없는 분야라도 좋은 글이라고 하니 억지로라도 읽어봤다. 사실 이런 관심 없는 쪽은 내가 스스로 찾아볼 리는 절대 없고 지인의 추천이나 이렇게 책으로만 접할 것 같다. 그런 면에서 여러 분야를 다룬 게 이 책의 단점이 아니라 장점이다. 특히 소개하는 글마다 조엘의 짧은 소갯글이 들어가는데, 이게 참 볼만하다.

가장 흥미롭게 읽은 글은 제일 처음 소개된 "스타일은 언어 요소다 - 켄 아놀드'라는 글이었다. Python을 예로 들면서 많은 언어가 무시하고 있는 공백문자를 언어의 요소로 넣자고 주장한다. 그렇게 함으로써 지긋지긋한 코딩 스타일 논쟁을 끝내자는 얘기다. 정말 동의한다. 탭으로 하자니 스페이스로 하자니 이런 논쟁부터 if( foo )와 if (foo) 중 어떤 스타일이 좋다는 논쟁까지 싹 다 없어져 버리고 좀 더 건설적인 일에 시간을 쓸 수 있을 것이다. 언어에서 정한 스타일이 마음에 안 들어도 쓰다 보면 다 적응된다. 코딩 컨벤션이 정해져 있는 팀에 들어갔을 때, 아무리 정해진 코딩 컨벤션이 마음에 안 들어도 시간이 지나면 익숙해지고 친근해지는 것처럼 말이다.

이외에도 왜 지나치게 관대하고 유연해서 모호하기까지 한 HTML이 살아남을 수밖에 없었는지를 설명하는 글, Windows 95의 하위 호환성을 유지하려고 비정상적으로 행동하는 애플리케이션을 막지 않고 호환성 코드를 넣어서 제대로 동작하도록 했다는 글, 왜 C++ 기존 커뮤니티를 효과적으로 장악했는지 설명하는 글 등 재미있는 글들이 많았다.

 

by-nc-sa

Oct 122008
 
#include <cstdlib>
#include <cstdio>
#include <cerrno>

int main()
{
    char    *str = NULL;
    int     value = 0;

    str = "-123124";
    value = atoi( str );
    printf( "Function: atoi( \"%s\" ) = %d\n", str, value );

    str = "3336402735171707160320";
    value = atoi( str );
    printf( "Function: atoi( \"%s\" ) = %d\n", str, value );
    if (errno == ERANGE)
    {
        printf("Overflow condition occurred.\n");
    }

    return 0;
}

문자열에서 integer, float로 캐스팅이 필요할 때, 주로 atoi, atofstrtol 등 CRT 함수를 사용한다. underflow, overflow가 발생하면 errno이 ERANGE로 세팅되고 최대값 혹은 최소값을 반환한다. 위 예제 코드는 MSDN 에서 가져왔다.

Continue reading »

by-nc-sa

Oct 052008
 

프로그래밍 경험도 풍부하고 그 경험에 걸맞은 내공을 가진 사람이 프로그래머로서 소프트웨어에 관한 글을 쓴다면 어떤 책이 나올까? 내가 생각하기에는 바로 '조엘 온 소프트웨어'와 같은 책이 나올 것 같다. 소프트웨어에 관한 그의 통찰력을 무미건조하지 않고 재미있게 풀어놓았다. 미국식 유머라 이해 안 가고 재미없는 유머도 있지만 그런 유머가 없더라도 글 자체가 흥미롭고 재미있다.

참 흥미롭고 재미있다. 깊이 생각하지 못한 내용도 가득해서 느끼는 점도 많다. 그리고 또한 읽으면 "내가 이런데..."하며 찔리는 내용도 가득하다. 프로그래머들이 시켜야지만 억지로 작성하는 명세서 작업과 일정 관리, 자기 개밥을 먹는 이야기(자기가 만든 제품을 실제로 사용해보기)들을 읽으면서 참 찔렸다.

소프트웨어에 관해 모르고 있던 사실들도 재미있게 풀어놓았는데, "40장 전략 메모 V : 오픈소스 경제학"을 가장 재미있게 읽었다. 왜 기업들이 오픈소스를 지원하는지 그 이유를 대체재(substitutes)보완재(complements)를 이용해 설명하는데, 읽고 깜짝 놀랐다. 난 기업들이 오픈소스를 지원하는 이유가 우수한 개발자 영입하는 기회가 되고 또한 기업 이미지를 좋게 만드는 기회이기 때문인 줄 알았는데, 완전 착각이었다. 예를 들면 IBM이 오픈소스 소프트웨어 개발에 수백만 달러를 투자하고 있는데, 이유는 IBM이 기업 전략을 IT 컨설팅 회사로 전환했기 때문이다. 기업용 소프트웨어를 일반 재화로 만들어 버리면 기업용 소프트웨어의 가격은 싸지게 되는데, 가격이 싸지면 수요가 증가하고 그에 따라 IT 컨설팅의 수요도 증가하게 된다. 이런 이유로 오픈소스 소프트웨어 개발에 투자해 기업용 소프트웨어를 일반 재화로 만들려는 것이다. 음! 이런 것이었군.

사람들이 프로그래머가 읽어야 하는 필독서라고 얘기를 하는데, 동의한다. 이 정도 책이면 필독서라 할만하다. 이번이 두 번째 읽는 건데, 소장할 가치가 있는 책이다. 언젠가 다음에 책을 한 번 더 읽을 때 그땐 뜨끔한 얘기들이 없길 바라며...


by-nc-sa