1:software-engineering.md
### 소프트웨어 공학

#### 프로그래밍 패러다임

##### 관점 지향 프로그래밍 (AOP, Aspect-Oriented Programming)

> 모듈성 향상을 위해 횡단 관심사 분리를 허용하는 방식의 접근법

- 모듈성: 프로그램을 독립적인 모듈로 분리하고 조합할 수 있는 정도
- 모듈: 프로그램의 구성을 독립적인 개념 단위로 분리한 구성 요소
- 횡단 관심사: 프로그램의 여러 기능을 가로지르는 범분야적 관심사
- 관심사: 프로그램에서 상당한 중요성을 갖는 하나의 특정한 문제 영역

#### 설계 원칙

##### 제어의 역전 (Inversion of Control, IoC)

> 호출 관계에서 제어 흐름을 결정하는 주체를 역전시키는 설계 원칙

- 제어 흐름: 한 명령에서 다음 명령으로 실행 동작이 진행되는 양상

#### 설계 패턴

##### 프록시 패턴 (Proxy Pattern)

> 프록시를 활용해 접근과 호출에 대해 제어하도록 설계하는 패턴

- 프록시: 특정 대상의 인터페이스 역할을 대체하는 자리표시자
- 인터페이스: 특정 대상과 다른 대상의 상호작용 방식에 대한 정의

#### 프로그래밍 기법

##### 의존성 주입(DI, Dependency Injection)

> IoC 원칙에 따라 호출자가 의존성을 전달하도록 구현하는 기법

- 의존성: 기능 수행에 필요한 대상 또는 그 대상을 필요로 하는 상태
- 구체화: 추상적인 개념을 구체적인 대상으로 구현하는 과정이나 상태
- 생성자 주입: 생성자 매개변수를 활용하여 DI를 구현하는 방식