# 빈을 등록하는 방법 빈을 등록하는 방법에는 2가지 방법이 있다. 더보기 1. xml 설정파일을 통한 등록 2. Java 코드를 이용해서 Bean 등록 최근에는 xml 설정파일을 통한 등록보다는 Java 코드를 이용해서 Bean을 등록한다고 한다. xml을 통한 방법을 이해하고 싶은 분들은 "스프링 입문을 위한 자바 객체 지향의 원리와 이해" 책을 참고하도록 하자! 1. xml 설정파일을 통한 등록 public class DemoApplication { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("application.xml"); String[] getBean..
# 컨테이너란? 컨테이너는 보통 인스턴스의 생명주기를 관리하고 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것이라고 한다. 즉, 컨테이너는 코드의 처리과정을 위임받은 독립적인 존재이다. 컨테이너는 누구의 도움없이도 프로그래머가 장석한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 관리해 주는 역할을 한다. # IoC 컨테이너란? 컨테이너의 사전적 의미는 무언가를 담는 용기, 그릇이다. 스프링 컨테이너는 프로그래머가 작성한 코드의 처리과정을 위임받아 독립적으로 처리하는 존재이다. IoC 컨테이너는 객체의 생성을 책임지고, 의존성을 관리한다. POJO의 생성, 초기화, 서비스, 소멸에 대한 권한을 가지기 때문에 개발자는 직접 POJO를 생성할 수 있지만 컨테이너에게 역할을 맡긴다. > Bea..
/** 망나니 개발자 블로그를 그대로 Ctrl C + Ctrl V한 것입니다. https://mangkyu.tistory.com/125?category=761302 */ Spring 프레임워크의 핵심 기술 중 하나가 바로 DI(Dependency Injection, 의존성 주입)이다. Spring 프레임워크와 같은 DI 프레임워크를 이용하면 다양한 의존성 주입을 이용하는 방법이 있는데, 각각의 방법에 대해 알아보도록 하자. [ 1. 생성자 주입(Constructor Injection) ] 생성자를 통해 의존 관계를 주입하는 방법이다. @Service public class UserServiceImpl implements UserService { private UserRepository userReposi..
# 의존성이란? class Player { private Weapon weapon; Plyaer(){ } void setWeapon(){ this.weapon = new Weapon(); } // 나머지 코드 } 게임 플레이어는 여러 무기를 활용하여 게임을 즐길수 있다. 게임 플레이어(Player클래스)는 무기(Weapon클래스)가 반드시 있어야 몬스터를 사냥할 수 있다. 즉, 플레이어는 무기가 반드시 있어야 한다. 이러한 관계를 의존성(Dependency)이라고 한다. 코드에서는 new 키워드를 통해 객체간의 의존성이 생성된다. 즉, 의존성은 new 키워드로 생성된다. ex) this.weapon = new Weapon( ); 하지만 이러한 방식은 객체 간의 강한 결합(Tightly Coupled)으로..
# 전략 패턴 "클라이언트가 전략을 생성해 전략을 실행할 컨텍스트에 주입하는 패턴" 전략 패턴은 객체의 꽃이라고도 불린다. 전략 패턴은 템플릿 메서드 패턴과 유사하다. 차이점이 있다면 템플릿 메서드 패턴은 상속을 이용하여 문제를 해결하지만 전략 패턴은 객체 주입을 통해 문제를 해결한다. # 전략 패턴 적용X Q. 전략 패턴을 적용하지 않은 예시를 어떻게 들어야 할까요? (언제 어떤 코드에서 전략 패턴을 사용해야 하는지에 대해 알고 싶습니다.) public interface Strategy { public abstract void runStrategy(); } public class StrategyGun implements Strategy{ @Override public void runStrategy() ..
# 퍼사드 패턴 "복잡한 과정을 간단하게 표현하는 패턴" Facade는 "건물의 정면"을 의미하는 단어로 내부의 클래스를 추상화한 인터페이스를 외부에 제공해주는 의미를 지닌 패턴이다. # 퍼사드 패턴 적용x a~z까지의 기능들이 있습니다. a~z까지의 기능들을 모두 동작 시키기 위해서는 일일이 기능을 호출하고 동작 시켜야 하는 번거로움이 있습니다. # 퍼사드 패턴 적용o a~z까지의 기능들이 있습니다. a~z까지의 기능들을 모두 동작 시키기 위해서는 하나의 클래스에 모두 선언을 하면 다음 부터 버튼하나만 이용하여 a~z 모든 기능들을 동작시키고 멈추게 할 수 있습니다. 즉, 퍼사드 패턴이란 여러 클래스에 있는 기능들을 호출해야 하는 경우 일일이 호출하게 되면 코드가 복잡해지고 귀찮은 점이 많이 있습니다...
# 싱글턴 패턴 "클래스의 인스턴스, 즉 객체를 하나만 만들어 사용하는 패턴" 싱글턴 패턴이란 인스턴스를 하나만 만들어 사용하기 위한 패턴이다. 커넥션 풀, 스레드 풀, 디바잉스 설정 객체등과 같은 경우 인스턴스를 여러 개 만들게 되면 불필요한 자원을 사용하게 되고, 또 프로그램이 예상치 못한 결과를 낳을 수 있다. 싱글턴 패턴은 오직 인스턴스를 하나만 만들고 그것을 계속해서 재사용한다. 싱글턴 패턴은 의미상 두 개의 객체가 존재할 수 없다. 싱글턴 패턴을 구현하려면 객체 생성에 제약을 걸어야 한다. # 구현 방법 1. new를 실행할 수 없도록 생성자에 private 접근 제어자를 지정한다. private 생성자이기에 외부 클래스나 메인 클래스에서 new를 이용한 객체를 생성할 수 없다. 2. 유일한 ..
# 프록시 패턴(Proxy) // 프록시를 이용하지 않은 호출 public class Service { public String runSomething() { return "서비스 짱!!"; } } public class ClientWithNoProxy { public static void main(String[] args){ Service service = new Service(); System.out.println(service.runSomething()); } } // 프록시를 적용한 호출 public interface IService { String runSomething(); } public class Service implements IService { public String runSomet..