배고픈 개발자 이야기

1.Code Complete (1-17장) 본문

전산학/코드컴플리트

1.Code Complete (1-17장)

이융희 2019. 9. 8. 12:11
728x90

Chapter1. 소프트웨어 구현으로의 초대

  1. 요구사항, 아키텍처 - 구현을 효율적으로 하기 위해 선행됨

  2. 구현

  3. 시스템 테스트 - 구현이 정확하게 수행되는지 검증

Chapter2. 소프트웨어 개발의 이해를 돕기 위한 비유

  • 비유는 모든 사람이 이해 할 수 있고 불필요한 실수를 줄여 줄 수 있다.

  • 답을 어디서 찾을지가 아니라 어떻게 찾을지 알 수 있다.

  • 편지를 쓰는것?(작은 프로젝트, 씨를 심고 곡물을 기르는것?(작은 부분을 추가 - 오류 최소화 )

  • 골격(더미 클래스) -> 근육과 피부(실질적 클래스)

  • 발견적 학습, 알고리즘x

Chapter3. 준비는 철저하게 : 선행 조건

  • 아키텍처와 설계, 프로젝트 계획 수립이 성공적인 프로젝트에 필요함, 위험 절감

  • 논리적 설득 - 프로젝트의 규모에 따른 계획수립의 중요성 : 비용절감

  • 비유적 설득 - 건축에서 기반 토지 및 청사진 승인과정의 필요성

  • 데이터 설계 - 만약 응용 프로그램이 고객 ID목록을 유지하는데, 이를 구현하기 위해서 설계자가 순차적 접근 리스트를 사용하여 ID 목록을 표현하는 방법을 선택했다면, 왜 순차적 접근 리스트가 랜덤-액세스 리스트, 스택, 또는 해시 테이블보다 더 나은 선택인지를 설명해야 함.

  • 아키텍처 - 데이터베이스 연결, 스레드, 핸들과 같이 부족한 자원들을 관리하기 위한 계획을 기술해야함, 메모리 관리는 드라이버 개발이나 임베디드 시스템과 같이 메모리가 한정된 분야를 다룰 때 중요하다.

Chapter4. 구현 시 결정해야 할 핵심적인 사항들

  • 고급언어가 생선성, 신뢰성, 명료성, 이해성이 저급언어 보다 훨씬 좋다.

  • 에이다 - 실시간 시스템, 임베디드에 강력 : 주로 군사용 (미 국방성)

  • 자바 - 소스를 바이트코드로 변환하고 가성머신에 실행함으로 모든 플랫폼에서 실행 가능하게함 (웹 응용 프로그래밍 분야)

  • 파이썬 - 인터프리트 방식인 대화식 객체 지향 언어, 스크립트와 간단한 웹 응용프로그램을 만들기 위해 널리 사용됨

  • 모든 프로그래밍 언어에는 장단점이 있고 개발언어 선택할 때 고려해야함

 

Part2. 고급 코드 생성하기

Chapter5. 구현 설계

  • 실수를 하는것이 설계의 핵심이다.

  • 설계는 트레이드 오프와 우선순위에 관한것이다.

  • 제한된 리소스는 소스를 간단화하여 솔루션을 향상시킴

  • 개발자에 따라 다양성을 가짐

  • 시행착오 - 발견적 학습이다.

핵심 개념

복잡성 관리 - 두 가지 접근 방법

  1. 한 번에 처리해야 하는 본질적인 복잡성의 양을 최소화한다.

  2. 비본질적인 복잡성이 불필요하게 증가하지 않도록 한다.

바람직한 설계

  1. 복잡성의 최소화 : "간단"하고 "이해하기 쉬운" 설계를 만들어라

  2. 유지 관리의 편안함 : 자가 설명적으로 설계한다.

  3. 느슨한 결합 : 프로그램의 서로 다른 부분의 연결을 최소화(캡슐화, 추상화, 정보은닉 사용) -> 테스트, 유지보수의 작업 줄일 수 있다.

  4. 확장성 : 예측 가능한 변경사항일수록 좋음, 내부구조 해치지 않고 시스템기능을 높일 수 있다는것

  5. 재사용성 : 다른 시스템에서도 사용할 수 있도록 설계

  6. 높은 fan-in : 주어진 클래스를 사용하는 클래스가 많다는 것을 의미, 유틸리티 클래스가 잘 활용하도록 설계되어야 한다는것

  7. 낮은 fan-out : 주어진 클래스가 다른 클래스를 적게 사용한다는것, 클래스 내에 호출되는 루틴을 분석할 때 유용, 복잡도 내려감

  8. 이식성 : 다른환경에 쉽게 이동할 수 있도록 설계하는것

  9. 간결성 : 추가적인 부분이 없도록 시스템을 설계하는것, 테스트/재검토가 소프트웨어 수정시 필요하기 때문

  10. 계층화 : 일관된 뷰를 얻을 수 있게 분산 계층을 유지하는것, 잘못된 코드가 가져오는 오류를 막을 수 있다, 특정 부분에서 상관성을 살펴볼 수 있기 때문에 해당 계층만 재구성하면 되게 됨

  11. 표준 기술들 : 이해하기 쉽도록 색다른 방법에 의존하지 않는것이 좋음

클래스는 정적, 객체는 동적 / 스키마와 인스턴스의 차이와 같음

정보은닉은 추상화를 통해 복잡도를 낮추게 해준다 - 4배유지,보수가 쉬워짐

정보은닉 -> 효과적인 설계 솔루션이 생각나게하는 고유한 발견적 능력을 갖고 있음

변경될 것 같은 영역을 규명하라

  1. 변결될 것처럼 보이는 항목들을 규명한다

  2. 변결될 것 같은 항목을 분류한다

  3. 변경될 것처럼 항목들을 고립시킨다

'전산학 > 코드컴플리트' 카테고리의 다른 글

2.Code Complete (23-26장)  (0) 2019.09.08
0.Development Common Sense  (0) 2019.09.08
Comments