스프링

    [Spring] 스프링의 IoC

    👉 지금까지 대표적인 IoC 프레임워크인 스프링 없이도 IoC 개념을 적용했었는데, 이번에는 스프링 프레임워크를 사용해 IoC 스타일의 애플리케이션을 설계해보겠습니다. 스프링의 IoC 핵심은 빈 팩토리(Bean Factroy)와 애플리케이션 컨텍스트(Application Context)가 있습니다. 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리라 부릅니다. 그리고 이를 좀 더 확장한 것을 애플리케이션 컨텍스트라고 부릅니다. 이 둘의 차이점은 빈팩토리는 빈을 생성하고 관계를 설정하는 IoC의 기본 기능에 초점을 맞췄고, 애플리케이션 컨텍스트는 애플리케이션 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC엔진입니다. 💡 빈(Bean)이란? 스프링이 제어권을 가지고..

    [Spring] 오브젝트 팩토리

    👉 클라이언트인 UserDaoTest에서 ConnectionMaker 구현 클래스를 사용할지를 결정하는 기능을 갖고 있습니다. 하지만 UserDaoTest는 UserDao의 기능이 잘 동작하는지 테스트를 위한 클래스입니다. 그렇기 때문에 UserDaoTest에 있는 Connection Maker 구현 부분을 분리해야합니다. 💡 팩토리 분리시킬 기능을 담당할 클래스를 만들기 위해, 이 클래스는 객체의 생성 방법을 결정하고 그렇게 만들어진 오브젝트를 돌려주는 것인데, 이 클래스를 팩토리라고 부릅니다. 주의해야할 점은 추상 팩토리 패턴이나 팩토리 메소드 패턴과는 다르다는 것을 인지해야합니다. 이제 팩토리 클래스의 역할을 하는 DaoFactory 클래스를 만들어보겠습니다. DaoFactory 클래스 public..

    [Spring] 객체지향적 DAO - 확장 (전략 패턴)

    객체지향 세계에서 모든 오브젝트는 변한다고 했는데, 모든 오브젝트가 다 동일한 방식으로 변하진 않습니다. 이전 글에서, 상속을 통해 DAO를 분리해봤습니다. 하지만 상속에는 여러 가지 문제점이 있습니다. 참고: https://withseungryu.tistory.com/67 [Spring] 객체지향적 DAO 만들기 - 분리 👉 객체지향의 세계에서는 모든것이 변하는데, 쉽게 말하면 객체에 대한 설계와 이를 구현한 코드가 변한다는 것입니다. 그렇기 때문에 개발자는 객체를 설계할 때 바로 미래의 변화를 어떻게 withseungryu.tistory.com 이러한 문제들이 있기 때문에, 이번에는 상속 관계과 아닌 독립적인 클래스로 만들어보겠습니다. 즉, DB Connection 부분을 서브클래스가 아닌, 별도의 ..

    [Spring] 객체지향적 DAO - 분리 (템플릿 메소드 패턴)

    👉 객체지향의 세계에서는 모든것이 변하는데, 쉽게 말하면 객체에 대한 설계와 이를 구현한 코드가 변한다는 것입니다. 그렇기 때문에 개발자는 객체를 설계할 때 바로 미래의 변화를 어떻게 대비할 것인가 염두해 둬야 합니다. 객체지향 기술(언어)는 이러한 객체지향 세계의 변화에 효과적으로 대처할 수 있습니다. How? 변화의 폭을 분리를 통해 최소한으로 줄여줘야 합니다. 🧐 분리란? 프로그래밍의 기초 개념 중 관심사의 분리라는 게 있는데, 이를 객체지향에 적용해보면, 관심이 같은 것끼리는 하나의 객체 안으로 또는 친한 객체로 모이게 할 수 있고, 관심이 다른 것은 가능한 한 따로 떨어져서 서로 영향을 주지 않도록 분리하는 것입니다. 관심사의 분리를 적용해보면, DB connection 부분을 다른 것과 영향을..

    [Spring] DAO 기본 구조 만들기

    🧐 DAO란? DAO(Data Access Object)는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트 🧐 DAO 기본 구조 먼저 사용자 정보를 쉽게 저장하기 위한 객체를 위해 User 클래스를 만들어줍니다. User Class public class User { String id; String name; String password; public String getId(){ return id; } public void setId(String id){ this.id = id; } public String getName(){ return name; } public void setName(String name){ this.name = name; } public String ge..

    [Spring] @Autowired vs @Resource vs @Inject

    🧐 @Autowired, @Resource, @Inject을 사용하는 이유 의존 주입을 위해 사용한다. 특정 Bean 기능을 수행하기 위해 기능에 필요한 특정한 Bean을 참조해야 하는데, 이 때 특정 Bean에 자동 연결을 위해 위 어노테이션들을 사용한다. 😊 @Autowired vs @Resource vs @Inject public class Animal{} @Component public class Dog implements Animal{} @Component public class Cat implements Animal{} 차이 @Autowired private Dog cat //타입 기준 -- Dog 타입으로 연결 @Resource private Dog cat //이름 기준 -- Cat 타입으로..