: 소프트웨어의 설계와 구현을 재사용이 가능하게끔 일련의 협업화된 형태로 클래스들을 제공하는 것
: 애플리케이션을 개발하는 데 사용되는 일련의 데이터 및 프로그래밍 코드
: Framework는 뼈대, Library는 다양한 기능을 제공하는 부품을 의미한다. 그래서 Framework를 변경하는 일은 어렵지만, Library는 쉽게 교체가 가능하며 선택적으로 사용할 수 있다. 또한 Library는 애플리케이션 흐름의 주도권이 개발자에게 있지만 Framework는 주도권이 개발자가 아닌 Framework에 있다.
: POJO(Java로 생성하는 순수한 객체)를 이용해 프로그래밍 코드를 작성하는 것.
: 애플리케이션의 흐름의 주도권이 뒤바뀐 것(제어의 역전), Spring에는 IoC 개념이 DI를 통해 적용되어 있다.
: 객체지향 프로그래밍에서 의존성은 객체 간의 의존성을 의미한다. 생성자를 통해 어떤 클래스의 객체를 전달받는 것을 의존성 주입이라 한다.
: 만약 new 키워드를 사용해서 의존성 주입을 한다면 참조할 클래스가 바뀔 경우, 이 클래스를 사용하는 모든 클래스들을 수정해야 한다. 이처럼 new를 사용해 의존 객체를 생성할 때, 클래스 간에 강하게 결합되어 있다고 한다.
: 클래스 간의 관계를 느슨하게 만드는 대표적인 방법을 인터페이스를 사용하는 것이다. 이처럼 어떤 클래스가 인터페이스 같이 일반화된 구성 요소에 의존하고 있을 때, 느슨하게 결합되어 있다고 한다. 그리고 Spring 기반 애플리케이션에서는 Spring이 의존 객체들을 주입해 주기 때문에 코드를 유연하게 구성할 수 있다.
: AOP에서 Aspect는 애플리케이션의 공통 관심사를 의미한다. 그리고 AOP는 관심지향 프로그래밍으로 애플리케이션에 필요한 기능 중 핵심 관심 사항에서 공통 관심 사항(로깅, 보안, 트랜잭션, 모니터링, 트레이싱 등)을 분리하는 것이다.
: 어떤 클래스의 본질적인 특성만을 추출해 일반화하는 것을 Abstraction(추상화)이라 한다. 그리고 추상화된 상위 클래스를 일관되게 바라보며 하위 클래스의 기능을 사용하는 것, 일관된 방식으로 해당 서비스의 기능을 사용할 수 있다는 것이 바로 일관된 서비스 추상화(PSA)이다.