목록Software Engineering (80)
Pure Software Engineer :)
코드를 작성하다보면 bool 타입을 써야할 때가 종종 있다. 1바이트를 사용하고, 그 변수의 이름과 맞물려서 true/false를 잘 표현해낸다면 딱일 것이다. 최근 코드를 보다가 아래와 같은 코드를 본적이 있다. 1 2 3 4 5 //=========================================================================== void CStsRouteConn::OnRouteRegisterFinished (bool result) { ... ... } (주관적일지 모르겠지만)저기서 result를 사용하는것은 좋은 코드같아 보이지는 않는다. 함수 이름으로 봤을때 뭔가 하는 작업이 끝났을때 callback되는것 같고, result는 작업이 성공했는지, 실패했는지를 나..
Refactoring - written by by Martin Fowler 프로그래머라면 반드시 읽어봐야 할 책중에 하나인 리팩토링에 관한 책. 리팩토링에 대한 개념부터 시작해서 코드예제까지 조금씩 읽으면서 정리를 해보자. 오늘은 그 시작!! 리팩토링이란? - 외부 동작을 바꾸지 않으면서 내부 구조를 개선하는 방법 - 소프트웨어 시스템을 변경하는 프로세스 - 버그가 끼어 들 가능성을 최소화 - 코드를 정리하는 정형화된 방법 그렇다면 리팩토링은 반대는? 퍼포먼스 최적화! 퍼포먼스 최적화란? - 리팩토링과 마찬가지로 소프트웨어의 동작을 바꾸지는 않음 - 하지만, 리팩토링과 달리 종종 코드를 이해하기 더 어렵게 만듦 - 이것은 필요한 퍼포먼스를 얻기 위해서는 감수해내야 하는 것 리팩토링을 할때 두 가지 구별된..
SQL Server에서 사용되는 typed xml 과 untyped xml에 대해 정리해보자. SQL Server는 variable, parameter, column에 xml 타입을 사용할 수 있게 한다.그리고 흔히 xml의 스키마를 정의하기 위한 xsd(xml schema definition)를 SQL Server에도 적용시킬 수 있는데,xml과 xsd를 연계시키면 typed xml, 연계 안시켰다면 untyped xml 이라고 부른다. xsd를 사용하는 이유는 이미 다 알고 있다고 생각하고, 여기서는 SQL Server에서 어떻게 xsd를 사용하고,xml과 xsd를 연계시키는지에 대해 알아보도록 한다. 그래도 xsd 가 제공하는 것을 간단히 살펴보면 다음 2가지가 있다.1. validation con..
C++카테고리 이지만 C내용도 끼어서 써보자. 회사에서 C++ 를 사용해서 개발을 하고 있다. 그런데 구조체를 사용하는데 있어서 다음과 같은 형태로 사용하고 있었다. 1 2 3 4 5 6 7 8 9 10 11 12 struct Samle { int a; int b; }; int main () { Sample s1; ... return 0; } 아무생각도 없이 이런식으로 쓰고 있었는데, 문득 C언어에서는 typedef을 하지 않으면 아래와 같이 struct 키워드를 붙여서 사용해야만 했다는것이 기억이 났다. 1 2 3 4 5 6 7 8 9 10 11 12 struct Samle { int a; int b; }; int main () { struct Sample s1; ... return 0; } 찾아본 결..
C++은 개발자가 클래스에 직접 넣지 않더라도 자동으로 생성하는 함수들이 있다. 그것들은 바로 1. 복사 생성자(copy constructor) 2. 복사 대입 연산자(copy assignment operator) 3. 소멸자(destructor) 위의 3가지에 더하여, 어떠한 생성자도 선언되지 있지 않으면 다음도 생성한다. 4. 기본 생성자 위 1~4가지의 공통점은 모두 public 멤버라는 것과 inline 함수라는 것이다. 즉, 다음 두 코드 블럭은 동일하다. 1 class Empty {}; 1 2 3 4 5 6 7 8 9 class Empty { public: Empty () { ... } Empty (const Empty & rhs) { ... } ~Empty () { ... } Empty & ..
프로그램 실행중에 특정 값이나 조건이 성립하는지 확인하기 위해 ASSERT 매크로를 사용한다. 조건이 실패하게 되면 abort 같은 것을 통해 실행중인 프로그램이 즉시 종료하게 된다. (무조건 abort()가 아니라 컴파일러마다 다른 방법으로 종료하는지는 확실하지 않다. 확인이 필요함) 하지만 프로그램 실행중이 아니라, 컴파일 타임에 특정 조건이 성립하는지 확인할 수 있다면 미리 검사하는 것이 더 좋을 것이다. 이러한 방법을 compile time assertion 또는 static assertion 이라고 부른다. boost 라이브러리나, C++0x 에서부터는 static_assert 를 통해 지원하는 것 같지만, 이를 사용하지 않고도 다음과 같이 간단한 매크로를 정의하여 쉽게 사용할 수 있다. Col..
Google app engine 을 사용하여 hello world를 한번 찍어보자. 언어는 python으로 결정했고, OS는 ubuntu 12.04를 사용했다. 설치 프로그램1. python2.72. google app engine SDK for python 다운로드 1. python2.7 다운로드// python에서 zlib 모듈을 설치하기 위한 패키지sudo apt-get install dpkg-dev// python에서 sqlite3 모듈을 설치하기 위한 패키지sudo apt-get install libsqlite3-devcd python2.7./configuremakesudo make install 2. Helloworld sample 작성아래 가이드를 참고하여 작성 3. web server 실행..