목적 : 최근 면접을 보러 다니게 되면서 이론적인 질문들이 많아졌다. 면접을 보면서 대답하지 못한 문제, 혹은 필요할 것 같은 질문들에 대한 공부를 필요로 하게 되었다.
1. DI(Dependency Injection) / 의존성 주입
쉽게 말하자면 객체가 객체를 사용한다고 보면된다.
클라이언트 객체가 의존하고 있는 서비스 객체를 클라이언트 객체 내부에서 생성해서 사용하는 것이 아닌 외부, 즉 제 3자가 서비스 객체를 생성해 주입시켜서 사용하도록 하는 것
여기서 서비스 객체는 사용당하는 객체, 클라이언트 객체는 서비스 객체를 사용하는 주체가 되는 객체를 뜻한다.
2. IOC(Inversion Of Control) / 제어의 역행
프로그램의 흐름을 개발자가 아닌 프레임워크가 주도하게 된다는 뜻이다.
모든 객체는 자신이 사용할 클래스를 결정하고, 언제 어떻게 그 객체를 만들고 사용할지를 스스로 결정한다.
하지만 IOC에선 객체가 자신이 사용할 클래스를 스스로 선택하지도 않고, 생성하지도 않는다. 또한 자신이 어떻게 만들어지고 어디서 사용되는지 알 수 없다. 왜냐하면 모든 제어 권한을 자신이 아닌 다른 대상에게 위임 하기 때문이다.
3. AOP(Aspect-Oriented Programming) / 관점지향프로그래밍
횡단 관심사(중복코드)의 분리를 허용함으로써 모듈성을 증가시키는것이 목적이다.
기존 객체지향프로그래밍(OOP)에서 중복코드가 발생한다는 단점을 해결하기 위한 방식으로, 개발코드에서는 비지니스 로직에 집중하고 실행시에는 비지니스 로직 앞, 뒤 등 원하는 지점에 해당 공통 관심사를 수행하게 하여 중복 코드를 줄일 수 있다.
4. POJO(Plain Old Java Object) / 단순한 자바 객체
클래스 상속을 강제하지 않고, 인터페이스 구현을 강제하지 않으며, 애노테이션 사용을 강제하지 않는다.
개발자는 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않고, 가장 일반적인 형태로 코드를 작성할 수 있다는 것이다. 이것은 생산성에도 유리하고, 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있다는 장점을 가지고 있다.
스프링 프레임워크의 프로젝트를 말하며, 스프링부트에는 스프링 프레임워크를 사용하기 위해 필요한 설정의 상당부분을 자동화 해 사용자가 보다 쉽게 스프링을 활용 할 수 있도록 도와준다.
1. starter를 통한 어플리케이션의 간편하고 자동화된 빌드 및 설정을 제공한다.
2. Embed 서버를 제공함으로써 복잡한 배포 설정들을 간단하게 제공한다.
3. Production에서 사용할 수 있는 추가적인 기능을 제공한다.