책 참고 - PROGRAMMING Principles and Practice Using C++ (SECOND EDITION)
프로그래밍의 이상
프로그래밍 시 추구해야 할 가치
- 정확성, 유지 보수성, 성능, 적시 배포, 보다 명확한 구조, 가급적 테스팅과 튜닝에 이점이 있는 하이레벨 프로그래밍
접근 방식
: 정확성을 갖춘 소프트웨어를 작성하기 위한 접근 방식
- 상향식: 정호가성이 입증된 구성 요소만 이용해 시스템 구성
- 하향식: 구성요소에 오류가 존재한다는 가정하에 시스템 구성 > 모든 오류 수정
아이디어를 직접적으로 표현하는 방식
- 인자를 일반적인 타입으로 표현하기 보다 구체적인 타입(ex> Month, Color)로 표현하는 편이 낫다.
- 서로 독립적인 아이디어는 코드에서도 독립적으로 표현(ex> sort()는 몇 가지 예외만 제외하면 어떠한 타입의 요소를 포함한 어떠한 표준 컨테이너라도 정렬 가능)
- 아이디어 간의 관계를 직접적으로 표현. (ex> 상속, 매개변수화)
- 조합이 의미를 갖는 경우에 한해서 코드로 표현된 아이디어를 자유롭게 조합(ex> sort는 거의 모든 요소들과 컨테이너들을 허용하지만 요소는 반드시 < 연산자를 지원해야 하고, 정렬한 컨테이너는 반드시 임의 접근 반복자를 지원)
- 간단한 아이디어는 간단하게. 위의 모든 경우를 따르면 지나치게 일반화 될 수 있다. 뭐하나 만드는데 6-7개의 매개 변수나 설정 값이 필요할 수도 있다. 간단하게 축약된 버전을 제공하는게 좋다.
추상화
: 저자는 가능한 한 높은 추상화 수준을 선호. 왜냐하면, 문제와 해결책에 대해 생각하는 방식이 좀 더 익숙한 차원이기 때문.
- 추상화 수준을 낮추는 이유: 효율성, 어떠한 경우에는 로우레벨이 더 효율적일 때가 있다. 하지만 그 외의 경우는 로우 레벨이 꼭 성능향상에 이득을 주는 것이 아니다.
모듈화(추구해야할 이상)
: 독립적으로 개발하고 이해하고 테스트 할 수 있는 구성 요소로 시스템 구성. 때로는 이런 구성요소를 다른 곳에서 재사용할 수 있게 설계.
> 코드의 재사용성을 높이고자 클래스 A와 B를 C로 합치는 일은 코드를 복잡하게 함.
> 이러한 경우에는 상속(공용 인터페이스), 매개변수화를 통해 풀어갈 수 있다.
> 하지만 이때 만드는 상속, 매개변수화 모두 A와 B의 인터페이스들을 단순히 합친것 보다 작은 인터페이스를 제공해야 가치가 있다.
일관성과 미니멀리즘
1. 활용성이 의심이 가는 기능은 추가하지 않는다.
2. 유사한 기능에는 유사한 이름. 이 때 유사성은 근본적인 유사성.
3. 이질적인 기능에는 서로 다른 이름. 이 때 이질성은 근본적인 이질성.
프로그래밍 스타일/패러다임
- 절차적 프로그래밍, procedural programming : 루틴, 서브루틴, 함수, 메소드들을 활용하는 명령형 프로그래밍.
- 데이터 추상화: 필요한 타입을 우선 정의하고, 이를 활용해 프로그램을 작성하는 방식.
- 객체지향 프로그래밍: 동질성을 가진 내용을 상속으로 풀어내는 것.
- 제네릭 프로그래밍: 일반화
'개발자로 > Cpp' 카테고리의 다른 글
Cpp, 테스팅 메모 (0) | 2023.10.05 |
---|---|
Cpp, 정규 표현식 (0) | 2023.10.04 |
Cpp, 알고리즘과 맵 파트 메모 (0) | 2023.09.22 |
Cpp, priority_queue (0) | 2022.09.07 |
Cpp, vector (0) | 2022.09.02 |