
지난 포스팅에서는 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는 개발자가 직접 코딩을 하여 객체를 생성하는 것이 아니라, 컨테이너가 이를 생성시켜 주는 것입니다. 그렇게 된다면 코드에서 직접적인 연관 관계가 발생하지 않아 각 클래스들의 변경이 자유로워 집니다...