728x90
반응형

소프트웨어 공부/프로그래밍 24

안전한 공유를 위한 코딩의 시기와 방식을 결정하라.

애플리케이션이 다중 스레드나 프로세스를 이용한다면, 공유 개체를 최소화할 수 있는 방법과 올바르고 안전한 공유를 위한 시기를 알아야 한다. C++ 표준에는 스레드에 대한 별다른 언급이 없지만 C++는 멀티스레드 코드를 만드는 데 꾸준하게 이용되고 있다. 만약 여러분의 애플리케이션이 스레드 간의 데이터를 공유하고 있다면 반드시 안전한 방법을 강구해야 한다. 타깃 플랫폼의 문서를 참조하라 아주 사소한 정수 연산에서부터 내부 프로세스 및 크로스 프로세스 연산에 이르기까지 로컬 범위의 싱크로 문제에 대해서는 일단 타깃 플랫폼이 어떠한 기능을 갖추고 있는지부터 확인해야 한다. 플랫폼의 기본 기능들을 여러분의 자체적인 추상체에 포함시켜라 여러 플랫폼 간의 호환이 필요할 때 좋은 방법이다. 플랫폼이 지원하는 기능을 ..

정보를 숨겨라.

추상화되어 있는 엔티티의 내부 정보는 누출하지 않는 것이 좋다. 추상화를 제어하는 호출 코드와 추상화의 임플리먼테이션 사이의 의존성을 최소화하기 위해서는 임플리먼테이션의 내부 데이터를 숨겨야 한다. 그렇지 않으면 호출 코드가 그 정보에 접근(심한 경우는 제어까지)하여 내부 정보가 누설되기 때문이다. 데이터 대신에 추상체(가능하면 도메인 추상화를 사용하고, 최소한 get/set 추상화 정도는 써야 한다)만을 노출하라. 정보를 숨기면 프로젝트의 비용, 스케줄 그리고 위험을 줄일 수 있다. - 변경 내용이 내부에 국한된다 : 정보를 숨기면 변경 내용이 다른 부분에 영향을 주는 것을 줄일 수 있고, 그만큼 그 비용이 절약된다. - 외부의 접근을 방어한다 : 코드의 관리 기능을 제한하여 버그나 외부 침입을 막는 ..

적절한 규모 유지를 위해서는 '언제, 어떻게' 를 아는 것이 중요하다.

폭발적인 데이터 증가를 주의하라. 너무 이른 최적화는 피하되, 복잡함의 정도를 분명하게 지켜보아야 한다. 데이터를 제어하는 알고리즘은 예측이 가능하고, 선형보다 나쁘지 않으며, 데이터를 처리하는 시간이 적절한 것을 택하자. 최적화가 필요한 시점이 되면 작은 추가 부분을 줄이는 미세한 최적화보다는 전체적인 그림의 복잡성을 줄이는 데 노력하자. 메모리와 디스크 용량은 계속해서 눈에 띄게 증가하고 있다. 예를 들어 1988년부터 2004년까지의 디스크 용량의 증가는 연간 112%에 이르고, 무어의 법칙을 적용한다고 해도 59%나 된다. 따라서 분명한 것은 여러분이 지금 만들어 놓은 코드가 이후에도 계속 사용된다면 보다 많은 데이터를 처리하게 될 것이라는 점이다. 잘못된 알고리즘이라면 그 증가량을 버티지 못할 ..

코드 리뷰에 시간을 투자하라.

코드를 다시 살펴보라. 눈이 많을수록 코드의 질은 높아진다. 코드를 다른 사람들에게 보여주고, 다른 사람의 코드도 읽어보라. 배우고 얻을 것이다. 코드 리뷰 과정의 좋은점 여러 동료들의 조언을 통해 코드의 질을 높일 수 있다. 버그를 찾아내고, 적절하지 않은 부분이나 호환/확장성 문제를 찾아낼 수 있다. 아이디어를 공유하는 과정에서 보다 나은 디자인을 찾아낼 수 있다. 새로운 팀 동료나 아직 코드에 익숙하지 않은 사람은 보다 빨리 팀의 업무에 익숙해질 수 있다. 팀의 커뮤니티에 도움을 주며, 일관된 목표를 향해 나아갈 수 있게끔 해준다. 서로에 대한 신뢰, 동기 부여, 전문성 확보에 도움이 된다. 코드 리뷰의 결과를 이메일 등의 간결한 문서로 남기고, 진행 과정을 기록하여 중복되지 않도록 하는 것이 좋다..

하나의 엔티티에는 하나의 역할만을 부여하자

한 번에 하나에만 집중하자. 각 엔티티(변수, 클래스, 함수, 네임스페이스, 모듈, 라이브러리)에는 잘 정의된 하나의 역할만을 부여하라. 엔티티의 덩치가 커지면 역할 또한 커지겠지만, 그렇다고 지정된 진로를 벗어나서는 안된다. 좋은 비즈니스 아이디어는 한문장으로 설명될 수 있듯이 , 좋은 엔티티는 분명 하나의 목적만을 가진다. 많은 기능을 가진 엔티티는 사용하기에 힘들다. 복잡함은 버그와 밀접한 관련이 있으며, 특별한 이유 없이 덩치가 커진 엔티티는 재사용이 어렵다. 안정적이지 못할 뿐더러, 여러 목적 간의 경계가 불분명해지면 관리 또한 힘들다.

정확성, 간결성, 명확성을 먼저 생각하라.

KISS ( Keep It Simple Software ) : 정확한 것이 빠른 것보다 좋고, 간단한 것이 복잡한 것보다 좋으며, 안전한 것이 불안한 것보다 좋다. 간결한 디자인과 깔끔한 코드의 중요성은 아무리 강조해도 지나침이 없다. 프로그램은 사람이 읽을 수 있도록 쓰여져야 하고, 컴퓨터가 실행할 수 있도록 하는 것은 그 후의 문제다. "헤롤드 아벨슨, 제랄드 제이 수스맨" 프로그램을 쓸 때는 사람을 먼저 생각하고, 컴퓨터는 두 번째로 생각하라. "스티브 맥코넬" 컴퓨터 시스템의 가장 값싸고, 빠르고 안정적인 구성 요소는 바로 "없는" 요소이다. "고든 벨" 빠진 구성 요소야말로 가장 정확한 요소이며, 가장 안전한 요소이며, 디자인하고, 문서화하고, 테스트 관리하기 가장 쉬운 요소이다. 간결한 디자인..

728x90
반응형