java

    [Spring] 싱글톤 레지스트리

    💡 싱글톤 패턴이란? 서버는 하나당 최대로 초당 수십에서 수백 번씩 요청을 받아 처리할 수 있는 높은 성능을 요구하며, 계층형구조로 이뤄진 경우가 대부분이고, 비즈니스 로직도 복잡한 경우가 많습니다. 이때 매번 요청이 올때마다 로직을 담당하는 오브젝트를 만든다면, 부하가 걸려 서버가 감당하기 힘들것입니다. (오브젝트의 동일성과 등등성 참고) 그래서 서비스 오브젝트라는 개념을 사용해 하나의 오브젝트만 만들어두고, 이를 공유해서 사용하는 방식을 택합니다. 이렇게 애플리케이션 안에 제한된 수, 대개 한 개의 오브젝트만 만들엇 사용하는 것이 싱글톤 패턴 원리입니다. ✏️ 싱글톤 패턴의 구현 방법 클래스 밖에서는 오브젝트 생성을 못하고, 생성자를 private로 만듭니다. 생성된 싱글톤 오브젝트를 저장할 수 있는..

    [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] @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 타입으로..