소프트웨어 구축 / 프로그래밍 스타일

Contents

  • 소프트웨어 구현

    • 소프트웨어 구현이란?
    • 소프트웨어 구현이 중요한 이유
  • 소프트웨어 개발의 이해를 돕기 위한 비유
  • 선행 조건
  • 구현 시 결정해야 할 핵심 사항
  • 구현 설계
  • 클래스 다루기

    • 클래스의 토대: 추상 데이터형(ADT)
    • 좋은 클래스 인터페이스
    • 설계와 구현에 관한 이슈
    • 클래스를 작성하는 이유
    • 프로그래밍 언어에 특화된 이슈
    • 클래스를 넘어서: 패키지
  • 고급 루틴
  • 방어적 프로그래밍
  • 의사코드 프로그래밍 프로세스
  • 변수 사용 시 고려할 사항
  • 변수 이름의 기능
  • 기본 데이터형
  • 특이한 데이터형
  • 순차적 코드 구성하기
  • 조건문 사용
  • 반복문 제어
  • 특이한 제어 구조
  • 테이블 활용 기법
  • 제어와 관련된 일반적인 이슈
  • 소프트웨어 품질
  • 협력 구현
  • 개발자 테스트
  • 디버깅
  • 리팩터링
  • 코드 튜닝 전략
  • 코드 튜닝 기법
  • 프로그램의 크기가 구현에 미치는 영향
  • 구현 관리
  • 통합
  • 프로그래밍 도구
  • 레이아웃과 스타일
  • 코드 설명
  • 개발자의 성격
  • 철학
  • 기타

언어에 상관없이 구현 단계에서 개발자가 고민해야 하는 고민의 깊이와 기본기는 예전과 크게 다르지 않다고 합니다. 개발도구와 프레임워크의 도움으로 품질 높은 코드를 빠르게 개발할 수 있지만 논리를 구현하기 위한 코드 작성 자체는 여전히 개발자의 몫이고, 또 많은 코드가 협력에 의해 개발됩니다.


소프트웨어 구현

개발에서 구현 관정에는 계획과 설계, 작업 내용 확인 등이 포함되지만 대개 "구현"이라고 하면 어떠한 것을 만드는 실직적 작업을 의미합니다.

소프트웨어 구현이란 무엇인가?

컴퓨터 소프트웨어 개발은 복잡과 과정이며, 전문가들의 연구에 따르면 다음과 같은 활동이 포함될 수 있습니다.

  • 문제 정의
  • 요구사항 개발
  • 구현 계획 수립
  • 소프트웨어 아키텍쳐 또는 고급 수준 설계
  • 상세 설계
  • 코드 작성 및 디버깅
  • 단위 테스트
  • 통합 테스트
  • 통합
  • 시스템 테스트
  • 유지보수

절차가 없이 프로젝트를 진행한 경험이 있다면, 위 항목들은 불필요해 보일 수 있습니다. 지나치게 형식을 중요시하는 프로젝트를 해 봤다면 이러한 것들이 형식적 절차라고 인지할 수 있습니다. 절차의 모자람과 지나침 사이에 균형을 맞추는 것은 쉽지 않은 일 같습니다.

구현이라고 하면 "코드 작성", "프로그래밍"이라고도 합니다. 하지만, 구현 활동에는 코드 작성만 있는 게 아니라 창의성과 판단력이 상당히 필요한 작업들이 많습니다.

거시적 관점에서 구현 활동을 위에서 표현했다면, 다음은 구현 활동에 속하는 구체적인 몇 가지를 정리한 것입니다.

  • 성공적인 구현 활동을 위한 기초 작업 검증
  • 코드에 대한 테스트 방법 결정
  • 클래스 및 루틴 설계와 작성
  • 변수와 이름 상수(named constant) 생성 및 이름 부여
  • 제어 구조 선택과 명령문 블록 구조화
  • 코드에 대한 단위 테스트, 통합 테스트, 디버깅
  • 저수준 설계와 코드를 다른 팀원과 교차 검토
  • 조심스럽게 코드의 포맷을 맞추고 추적을 달아 코드를 정리
  • 개별적으로 작성한 소프트웨어 컴포넌트의 통합
  • 코드가 더 빨리 실행되고 더 적은 자원을 사용하도록 최적화

구현이 중요한 이유

구현은 프로젝트 기간의 30 ~ 80%의 시간을 차지합니다. 이 정도의 시간이면 해당 프로젝트의 성공에 큰 영향을 미치기 때문에 소프트웨어 개발에서 구현은 큰 비중을 차지합니다.

소스코드만이 소프트웨어를 정확하게 설명하는 경우가 많습니다. 요구사항 명세서나 설명서는 최신 정보를 반영하지 못 할 수 있지만, 소스코드는 항상 최신 내용입니다. 따라서 소스코드는 항상 최고의 품질을 유지해야 합니다.

프로그래머 개인의 생산성은 구현하는 동안 10배에서 20배 정도 차이가 있다고 합니다.

구현의 결과물인 소소코드만이 소프트웨어를 정확하게 설명하는 경우가 많습니다.

구현은 반드시 해야만 하는 활동입니다.

6. 클래스 다루기

클래스는 연관성이 높고 잘 정의된 기능을 공유하는 데이터와 루틴의 모음입니다. 능력 있는 개발자가 되려면 현재 작업 중인 코드에 집중할 수 있게 프로그램에서 무시할 수 있는 부분을 최대화할 수 있어야 합니다. 클래스는 이러한 것을 달성하기 위한 일차적인 도구입니다.

클래스의 토대: 추상 데이터형(ADT)

추상 데이터형(Abstract Data Type, ADT )은 데이터와 데이터를 처리하는 연산의 집합입니다. 연산은 프로그램의 나머지 부분에 데이터가무엇인지를 설명해주는 역할과 나머지 프로그램에서 그 데이터를 변경할 수 있게 해주는 역할을 합니다.

객체지향 프로그래밍을 이해하기 위해서는 ADT를 반드시 이해해야 합니다. ADT 를 이해하지 않고는 이름만 "클래스"인 클래스를 작성하게 될 것입니다. 그런 클래스는 실제로는 연관성이 높지 않은 데이터와 루틴을 편의를 위해 보관하는 상자와 다를 게 없습니다. ADT 를 이해한다면 처음에 구현하기 쉽고 나중에 변경하기 쉬운 클래스를 만들 수 있습니다.

좋은 클래스 인터페이스

설계와 구현에 관한 이슈

클래스를 작성하는 이유

프로그래밍 언어에 특화된 이슈

클래스를 넘어서: 패키지