본문 바로가기

토비의 스프링 정리

토비의 스프링 - 1.7 의존관계 주입(DI) //의존관계 검색 public UserDao(){ DaoFactory daoFactory = new DaoFactory(); //daoFactory가 미리 정의한 이름 this.connectionMaker = daoFactory.connectionMaker(); } //의존관계 주입 public UserDao(ConnectionMaker connectionMaker){ this.connectionMaker = connectionMaker(); } 1.7.1 제어의 역전(IoC)과 의존관계 주입 IoC 단어는 스프링 서블릿 컨테이너처럼 서버에서 동작하는 서비스 컨테이너라는 뜻인지, 단순희 IoC 개념이 적용된 템플릿 메소드 패턴을 이용해 만들어진 프레임워크인지, IoC 특징을 지닌 기술인지 해석하기 애매함.. 더보기
토비의 스프링 - 1.6 싱글톤 레지스트리와 오브젝트 스코프 1.6.1 오브젝트의 동일성과 동등성 동일성 두 개의 오브젝트가 동일한(identical) 오브젝트 == 연산자로 확인 사실 하나의 오브젝트만 존재하는 것이고, 두 개의 오브젝트 레퍼런스 변수를 가지고 있을 뿐임 동등성 두 개의 오브젝트가 동등한(equality) 오브젝트 equals() 메소드로 확인 두 개의 각기 다른 오브젝트가 메모리상 존재 💡 스프링은 빈 요청(getBean()) 할 때다마다 동일한 오브젝트를 반환함(싱글톤) 1.6.2 싱글톤 레지스트리로서의 애플리케이션 컨텍스트 애플리케이션 컨텍스트는 싱글톤을 저장하고 관리하는 싱글톤 레지스트리(Singleton Registry)임 별다른 설정을 하지 않으면 스프링 내부에서 생성하는 빈 오브젝트는 모두 싱글톤 디자인 패턴에서 나오는 싱글톤과 비슷.. 더보기
토비의 스프링 - 1.5 스프링의 IoC 1.5.1 애플리케이션 컨텍스트와 설정정보 스프링이 제어권을 가져 직접 만들고 관계를 부여하는 오브젝트를 빈(Bean)이라 함 빈은 오브젝트 단위의 애플리케이션 컴포넌트 및 IoC가 적용된 오브젝트 스프링에서 빈의 생성과 관계설정 같은 제어 정보를 담당하는 IoC오브젝트를 빈 팩토리(Bean Factory)라 한다 애플리케이션 컨텍스트(Application Context)는 빈 팩토리를 상속받아 구현 하였는데, 실제 빈 팩토리보다 애플리케이션 컨텍스트를 더 많이 사용한다. 애플리케이션 컨텍스트는 IoC 방식을 따라 만들어진 일종의 빈 팩토리라 할 수 있음 애플리케이션 컨텍스트는 별도의 설정정보(Configration)를 참고해서 빈의 생성, 관계설정 등의 제어작업을 총괄함 애플리케이션 컨텍스트는 설정정보.. 더보기
토비의 스프링 - 1.4 제어의 역전(IoC) 1.4.1 오브젝트 팩토리 UserDaoTest는 테스트를 하는 코드지만, ConnectionMaker을 구현하는 코드의 역할까지 있음 관심을 분리하여 UserDao 오브젝트 생성 및 ConnectionMaker 구현 클래스 오브젝트를 생성할 DaoFactory 클래스 생성 DaoFactory는 팩토리 클래스임 💡 팩토리 클래스 : 객체 생성 방법 결정 및 생성된 오브젝트 반환 팩토리를 사용하여 오브젝트를 생성(DaoFactory) 하는 쪽과 사용(UserDaoTest)하는 쪽을 분리 public class DaoFactory { public UserDao userDao() throws SQLException, ClassNotFoundException { return new UserDao(connecti.. 더보기
토비의 스프링 - 1.3 DAO의 확장 1.3.1 클래스의 분리 DB연결 메소드를 클래스로 분리한다 이 방법은 DB연결 방식이 달라질 때 마다 새로운 클래스를 만들어 UserDao에 추가해야함(UserDao에 디자인 패턴을 적용시킨 것보다 못함) public class SimpleConnectionMaker { public Connection getConnection() throws ClassNotFoundException, SQLException { Class.forName("com.mysql.cj.jdbc.Driver"); return DriverManager.getConnection( "jdbc:mysql://localhost/toby?serverTimezone=UTC" , "root", "1234" ); } } public class .. 더보기
토비의 스프링 - 1.2 DAO의 분리 1.2.1 관심사의 분리(Separation of Concerns) 관심사를 분리하면 코드 변화에 효과적으로 대체할 수 있음 객체제향 기술이 만들어내는 가상의 추상세계 자체를 효과적으로 구성 가능 자유롭고 편리하게 변경, 발전, 확장할 수 있음 관심사의 분리가 가능한 이유는, 모든 변경과 발전은 한 번에 한 가지 관심사항에 집중해서 발생하기 때문 1.2.2 리팩토링 기존의 코드를 외부의 동작방식에 변화 없이 내부 구조를 변경해서 재구성하는 기술 용이, 견고, 유연한 제품을 개발 할 수 있게 됨 관심사 하나하나를 리팩토링 하여 분리시킴 1.2.3 UserDao의 관심사항 DB와 연결된 관심 사용자 정보를 Statement에 바인딩(DB연결) 하고, Statement에 담긴 SQL을 DB를 통해 실행 Obj.. 더보기
토비의 스프링 - 1.1 초난감 DAO 1.1.1 DAO(Data Access Object) DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트 1.1.2 자바빈 원래는 비주얼 툴에서 조작 가능한 컴포넌트를 의미함 현재는 두 가지 관례에 따라 만들어진 오브젝트를 가리킴 디폴트 생성자 자바빈은 파라미터가 없는 디폴트 생성자를 갖고 있어야 한다. 프레임워크에서 리플렉션을 이용하여 오브젝트를 생성하기 때문 💡 리플렉션 : 구체적인 클래스 타입을 알 수 없어도, 클래스의 변수 및 메소드 등을 접근할 수 있도록 하는 API. 라이브러리에서 사용자가 어떤 클래스를 만들지 모르기 때문에 리플렉션을 사용하여 접근할 수 있도록 함. ex) DI 참고[https://dublin-java.tistory.com/53] 프로퍼티 자바빈이 노출.. 더보기
토비의 스프링 - 0.1 스프링 0.1.1 스프링이란 무엇인가? 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워크 💡 스프링을 사용하기 위해서는 스프링 컨테이너를 다루는 방법과 스프링 컨테이너가 애플리케이션 오브젝트를 이용할 수 있도록 하는 설정정보를 작성할 수 있어야 한다. 💡 스프링의 모든 기술을 JavaEE에 기반을 두고 있다. 0.1.2 스프링 컨테이너 스프링은 스프링 컨테이너, 애플리케이션 컨텍스트라 불리는 스프링 런타임 제공 스프링 컨테이너는 설정정보를 참고로 해서 애플리케이션을 구성하는 오브젝트를 생성하고 관리 스프링 컨테이너는 독립적으로 동작할 수 있지만, 웹 모듈에서 동작하는 서비스나 서블릿을 등록하여 사용 0.1.3 스프링의 핵심 개념 세 가지 Ioc/DI(Inversion of Control/De.. 더보기