
지난 포스팅에서는 OCP와 DIP가 위배 되는 경우에 대해서 알아보았습니다. 이번에는 스프링이 아닌 순수 자바로 해결해보겠습니다. 잠깐 지난 글의 클래스 다이어그램을 살펴보겠습니다. public class DriverImpl implements Driver{ Car car = new K3(); Engine engine = new Electronic(); @Override public void findOwnCarDetail() { car.findCarName(); car.findCarBrand(); engine.WayToMove(); } } DriverImpl 역할에 구현체가 직접 new 키워드로 선언 되어 있습니다. 이럴 경우 얼핏보면 OCP와 DIP를 잘 지킨 것 같지만 사실 아니라고 지난 포스팅에서 ..

스프링의 특징을 5가지로 나눈다면 다음과 같이 나눌 수 있습니다. 경량 컨테이너 DI(Dependency Injection, 의존성 주입) IoC(제어의 역흐름, Inversion of Control) AOP(관점지향프로그래밍, Aspect oriented Programming) POJO 방식의 프레임워크 그 중 이번 글에서는 AOP(관점지향프로그래밍)에 대해 알아보려고 합니다. l AOP는 왜 필요할까? 웹 애플리케이션을 만들다 보면 해킹을 대비하기 위한 보안 기능, 사용자의 접속 내역을 위한 로깅 기능 그외에 트랜잭션, 이메일 발송 기능 등 수많은 기능들이 있습니다. 이들의 공통점은 무엇일까요? 모두 웹 애플리케이션을 구축할 때 공통적으로 필요한 기능들 입니다. 그리고 대부분의 클래스들이 이러한 기능..

자동차에서 만약 엔진이 오래되서 엔진을 바꾸고 싶다면, 자동자 전체가 아닌 엔진만 뽑아서 바꿔주면 됩니다. 객체 지향 프로그래밍에서도 클래스에 대한 변경이 필요하면 다른 클래스에 영향을 끼치지 않으면서 변경이 가능해야 합니다. 이러한 상황에 더 수월하게 변경이 가능케 도와줄수 있도록 도입된 기능이 바로 DI(Dependency Injection)와 IoC(Inversion of Control)입니다. 자바로 프로그래밍을 하면서 객체를 생성할 때 직접 클래스에 new 연산자를 이용하여 생성했습니다. 하지만 DI는 개발자가 직접 코딩을 하여 객체를 생성하는 것이 아니라, 컨테이너가 이를 생성시켜 주는 것입니다. 그렇게 된다면 코드에서 직접적인 연관 관계가 발생하지 않아 각 클래스들의 변경이 자유로워 집니다...