### 소프트웨어 공학
#### 프로그래밍 패러다임
##### 관점 지향 프로그래밍 (AOP, Aspect-Oriented Programming)
> 모듈성 향상을 위해 횡단 관심사 분리를 허용하는 방식의 접근법
- 모듈성: 프로그램을 독립적인 모듈로 분리하고 조합할 수 있는 정도
- 모듈: 프로그램의 구성을 독립적인 개념 단위로 분리한 구성 요소
- 횡단 관심사: 프로그램의 여러 기능을 가로지르는 범분야적 관심사
- 관심사: 프로그램에서 상당한 중요성을 갖는 하나의 특정한 문제 영역
#### 설계 원칙
##### 제어의 역전 (Inversion of Control, IoC)
> 호출 관계에서 제어 흐름을 결정하는 주체를 역전시키는 설계 원칙
- 제어 흐름: 한 명령에서 다음 명령으로 실행 동작이 진행되는 양상
#### 설계 패턴
##### 프록시 패턴 (Proxy Pattern)
> 프록시를 활용해 접근과 호출에 대해 제어하도록 설계하는 패턴
- 프록시: 특정 대상의 인터페이스 역할을 대체하는 자리표시자
- 인터페이스: 특정 대상과 다른 대상의 상호작용 방식에 대한 정의
#### 프로그래밍 기법
##### 의존성 주입(DI, Dependency Injection)
> IoC 원칙에 따라 호출자가 의존성을 전달하도록 구현하는 기법
- 의존성: 기능 수행에 필요한 대상 또는 그 대상을 필요로 하는 상태
- 구체화: 추상적인 개념을 구체적인 대상으로 구현하는 과정이나 상태
- 생성자 주입: 생성자 매개변수를 활용하여 DI를 구현하는 방식