임베디드 시스템 개발시 자주 할 수 있는 실수를 엮어보았다.
너무나 먼 하수의 길일런지~^^

#1 표준 문서의 내용에 대한 오해
개발시 가장 중요한 부분이다. 표준 문서, 또는 요구사항에 대해서 잘 못 이해하고 있는 부분은 치명적인 아픔(?)을 낳게 한다.
오해로 인해서 개발이 늦춰지게 되거나, 잘못된 인퍼페이스에 의해 디펀던스가 있는 주위 동료들에게 많은 폐를 끼치게 된다.
선임자 혹은 스펙을 이해한 사람에게 확인해 볼 수 있어야 한다.

#2 비동기 메소드 처리
비동시 메소드 처리시는 항상 메모리 릭이 없도록 해야 한다.

예를 들자면, 파일을 읽기 위해서, mount를 하고, 해당 파일 핸들에 대한 파일을 요청을 한다.
요청에 대한 callback을 처리하고 나는 것로 끝내는 것이 아니라, 각 단계에 대한 여러 시나리오를 생각해 볼 수 있어야 한다.
파일 요청에 대한 어플리케이션이 mount만 하고 종료할 수 있으며, callback이 불려지기 전에 어플리케이션이 종료할 수 있다.
여러 시나리오에 대해서 처리가 가능하도록 해야 한다.
즉, 어플리케이션 종료시에 대한 destroy를 염두하면서, 잘 못 생각하거나, 생각하지 못한 것에 대해서 메모리 릭이 생길 수 있는 소지는 항상 염두해야 한다.

#3 잘못 쓰인 주석
잘못된 주석, 과거에 사용되었던 코드가 불필요하게 남아있으면 안된다.
사람은 기본적으로 망각의 동물이라, 쉽게 잊기도 한다. 그래서 주석이 반드시 필요하다.
하지만, 원 의미가 변경된 경우에는 반드시 주석을 삭제하는 것이 중요하다.
또한 변경된 소스가 나중에 필요하지 않을 경우는 반드시 지울 수 있도록 한다.

#4 비적절한 naming convention.
올바르지 못한 naming 변수는 개발자 본인에게나 인수인계자에게 두려움을 줄 수 있다.
변수 이름만으로 변수의 symantics를 알지 못하고 다른 symantics로 이해한다면, 개발자 본인이 아닌 다른 이에게 잘못된 생각을 심어줄 수 있으며, 코드의 readibility가 떨어지게 된다.
시간을 들여서라도 변수의 설명이 되는 적절한 이름을 가질 수 있도록 한다.

#5 복잡한 코딩
복잡한 코딩은 혼자만 알게 하고, 인수인계자에게는 상당히 난해함을 전달할 수 있으므로 복잡성을 낮춰야 한다.
readibility가 좋아야 한다. 요즘 나온 모든 c 컴파일러는 optimizer를 포함하고 있기 때문에 걱정하지 않아도 된다.
int port;
while(port = getPort()) {
   if (port < 0) {
       break;
   }
}
보다는 다음의 코드가 훨씬 보기가 편하다.

int port;
for ( ; ; ) {
   port = getPort();
   if (port < 0) {
       break;
   }
}

#6 불필요한 코드
자바의 경우는 쓰지 않는 패키지를 import하지 않도록 하며, c언어의 경우는 쓰지 않는 header를 include하지 않는다.
또한 쓰지 않는 메소드나 함수는 오버헤드이다. 현재도 쓰지 않고, 앞으로 쓰지 않을 것이라면, 과감히 지워라. 코드는 심플한 것이 아름답다.


#7 로마에 가면 로마의 법을 따른다.
해당 프로젝트에서 정한 coding convention 및 naming convention은 지키도록 한다.
80 컬럼을 지키는 것이나, identation은 정신적인 건강을 제공하며 코드가 오랫동안 살 수 있다.
이외에도 아키텍트가 정한 룰은 반드시 지킬 수 있도록 한다. 싸우면 피곤해 진다.

#8 tribary statement 문 사용
if문대신 tribary statment 문 이용하여 코드를 최대한 줄인다. 물론 이는 readibility를 기준으로 한다.
복잡스러운 tribary statement는 절대로 쓰지 마라!


#9 체크 습관
해당 함수의 아규먼트는 타입 혹은 값이 절대적일 수 없다. 잘못된 값은 언제든지 들어 올 수 있으므로 null 체크와 길이 체크는 항상해야 한다.
if (l == null || l.length == 0) { 
   throw new IOException("Wrong Paramter");
}

 

'철학' 카테고리의 다른 글

글쓰기의 어려움  (0) 2006.07.20
Favor object composition over class inheritance.  (0) 2006.07.20
디자인-요구사항 파악하기-3  (0) 2006.07.20
Project Management Office (PMO)  (0) 2006.07.20
디자인-요구사항 파악하기-1  (0) 2006.07.20
Posted by '김용환'
,