본문 바로가기

프로그래밍/C++

보기 좋은 코드의 중요성과 코드의 디자인


보기 좋은 코드의 중요성

구성요소
1. 문서
2. 분할
3. 네이밍
4. 언어의 사용 형태
5. 포매팅

코드의 문서화

주석을 작성해야 하는 이유
: 사용자가 그 코드와 어떻게 연동할 수 있는지 설명하기 위해서

공개 메소드에 주석을 제공하면
1. 코드로는 표현하기 어려운 내용을 자연 언어로 기술할 수 있다
2. 그 메소드의 사용 방법을 담을 수 있다

메타정보를 제공하는 주석
: 코드의 개별적인 기능을 설명하기 보다 코드가 생성된 배경에 대해 설명한다

리팩토링 : 코드를 재구성하는 것

추상화를 더욱 강화하는 방법
1. 필드(멤버 변수)를 캡슐화한다
  : 필드를 private 블록에 두고 접근은 게터와 세터를 이용

2. 타입을 일반화한다
  : 좀 더 일반적, 범용적 타입을 이용햇 많은 코드에서 활용할 수 있게 한다

코드를 좀 더 논리적인 부분으로 분할하는 방법
1. 메소드를 추출한다
  : 덩치가 큰 메소드의 일부를 새로운 메소드로 분리해서 만든다

2. 클래스를 추출한다
  : 기존 클래스에서 일부분을 추려내어 새로운 클래스로 만든다

네이밍과 코드 위치를 개선하는 방법
1. 메소드나 필드를 이동시킨다
2. 메소드나 필드의 이름을 변경한다
3. 풀업 : OOP 코드에서 상위 클래스로 이동
4. 풀다운 : 하위 클래스로 이동


프로그램 디자인 (소프트웨어 디자인)
: 주어진 기능적, 성능적 요건을 구현하기 위한 아키텍처의 설명서이다

1. 전체 프로그램을 구성하고 있는 서브시스템
  : 각 서브시스템 간의 종속성 및 인터페이스, 각 서브시스템 간의 데이터 흐름과 입출력, 전체적인 스레드 활용 모델을 설명하는 부분

2. 서브시스템별 상세 사항
  : 클래스 구성, 계층도, 데이터 구조, 알고리즘, 개별 스레드 활용 모델, 에러 처리 방법을 설명하는 부분

나선형 개발 모델 (Spiral Mode)
: 요구 분석, 디자인, 구현 단계를 반복적으로 순회하면서 점진적으로 완성해나간다

프로그램 디자인은 각 서브시스템의 구성과 연동 방식을 설명하여 목적하는 요구 조건에 따라 프로그램이 작동할지 판단할 수 있게 해준다.

디자인이 주는 큰 그림이 없으면 세부적인 구현에 몰입되어 중요한 아키텍처적 요소나 목표를 잃어버릴 수 있다

문서화 디자인은 모든 프로젝트 멤버가 상시 참조할 수 있는 공유정보 역할을 한다

디자인의 두가지 원칙

1. 추상화 (abstraction)
: 내부 구현과 외부 인터페이스를 분리

2. 재사용
: 기존 코드를 활용, 여러 가지 일반적인 디자인 문제에 적용되는 접근 방법이나 전략을 재활용한다. 코드 재사용은 중복되는 코드가 없어야 한다

재사용이 가능한 코드

1. 과거에 직접 작성했던 코드

2. 동료가 작성한 코드

3. 재직 중인 조직 바깥에 있는 협력 업체에서 작성한 코드

재사용 코드의 구성 형태

1. 독립 함수 / 클래스

2. 라이브러리 : 함수 목록을 제공

3. 프레임워크 : 프로그램의 디자인과 구조의 기반

Big-O 표기법
: 상대적인 성능을 나타낸다. 알고리즘의 실행 소요 시간을 입력  

데이터의 크기에 대한 함수로 나타낸 것
알고리즘 복잡도라고도 한다
ex) O(n) : O는 Big-O 표기법, n은 입력 데이터의 크기

'프로그래밍 > C++' 카테고리의 다른 글

STL컨테이너에 저장되어야할 항목과 반복자  (0) 2019.03.18
객체지향과 클래스  (0) 2019.03.12
auto, decltype, 문자열  (0) 2019.03.08
Lambda (람다)  (0) 2019.03.07
가상 메모리 (Virtual Memory)  (0) 2019.02.23