객체지향 프로그래밍
- 데이터와 함수의 조합
- 실제 세계를 모델링하는 새로운 방법
- 캡슐화, 상속, 다형성
캡슐화
- 데이터와 함수가 응집력 있게 구성됨
- C언어에서는 헤더파일만 제공함으로써 완벽한 캡슐화가 가능하다.
- 그러나 C++는 오히려 헤더에 private 멤버도 명시를 해야됨.
- 프로그래머가 올바르게 행동할 것이라고 가정하고 하는 것이기 때문에 OO의 강력한 특성이라 보기 힘듬
상속
- 어떤 변수와 함수를 유효 범위로 묶어서 재정의 하는 일
- C에서도 얼추 가능했지만, C++에서는 업캐스팅 없이 편리하게 제공함
- 0.5점 정도
다형성
- interface
- 함수 포인터라는 위험한 포인터를 안전하게 사용할 수 있도록 한다.
- 다른 모듈에서도 인터페이스를 제대로 구현했다면 별도의 재빌드 없이 사용이 가능해진다.
의존성 역전
- 구조적인 관점에서는 고수준의 함수가 저수준의 함수를 호출하는 제어흐름을 따른다.
- 이러한 관점에서는 사용할 함수를 포함하는 모듈을 include 해야 한다.
- 하지만 의존성 역전이 일어나면 특정 함수를 직접 include하는 것이 아닌 그 함수가 구현한 interface를 include한다.
함수형 프로그래밍
불변성과 아키텍처
- 어플리케이션에서는 동시성 문제를 신경써야한다.
- 이때 race condition, deadlock, concurrent update 등의 문제가 발생한다.
가변성의 분리
- 함수형 프로그래밍에서는 가변 컴포넌트와 불변 컴포넌트를 분리한다.
- atom 기법
- 불변 컴포넌트를 늘리고, 가변 컴포넌트를 줄여야 한다.
이벤트 소싱
- 상태가 아닌 트랜잭션들을 저장하는 전략
- 사용자의 포인트를 관리할 때, 포인트를 업데이트 하는 것이 아니라 포인트의 사용내역 전체를 저장하여 매번 내역 전체에서 현재 포인트를 계산하는 전략