1. 의존이란?

A 클래스에서 B 클래스의 method를 실행할 때 이를 의존한다고 표현한다.

어떻게 B 클래스의 method를 실행하는가?

  •     A 클래스에서 B 객체를 생성해서 필드에 할당한다.
  •     이 경우 유지보수 관점에서 문제점을 유발할 수 있다.

 

2. DI (Dependency Injection)

DI는 의존하는 객체를 직접 생성하지 않고 생성자를 통해 전달 받는다.

public class MemberResgisterService {

    public MemberRegisterService(MemberDao memberDao) {
        this.memberDao = memberDao;
    }
    
}

DI를 적용한 MemberRegisterService 클래스는 객체를 생성할 때 생성자에 MemberDao 객체를 전달해야 한다.

MemberRegisterService svc = new MemberRegisterService(memberDao);

 

3.  DI와 의존 객체 변경의 유연함

DI를 적용하지 않고 클래스에서 의존하는 클래스를 직접 생성하는 경우 의존하는 클래스가 변경되었을 때 그 클래스를 사용하는(의존하는) 모든 클래스의 코드를 수정해야한다.

DI를 적용한 경우 의존 대상이 되는 객체를 생성하는 코드만 수정하면 된다.

 

4. 인터페이스를 통한 객체 주입

Reference - https://mangkyu.tistory.com/150

public interface Product {

}

public class Pencil implements Product {

}

public class store {
    private Product product;
    public Store(Product product) {
        this.product = product;
    }
}

Product 인터페이스를 이용하여 Store 에서 product 객체를 주입받는다.

public class BeanFactory {
    public void store() {
        // Bean 생성
        Product pencil = new Pencil();
        // 의존성 주입
        Store store = new Store(pencil);
    }
}

pencil 객체를 생성하여 그 객체를 Store로 주입한다.

Store에서 판매하는 객체가 pencil이 아니라 다른 상품으로 변경한다면 pencil 객체 생성하는 부분만 수정하면 된다.

이런 의존 주입 방법은 상속보다 유연하다.

'Spring' 카테고리의 다른 글

Ch.2 스프링 시작하기  (0) 2022.04.09
스프링 공부를 위한 개발 환경 세팅!  (0) 2022.02.22

스프링을 시작하기에 앞서 가장 먼저 나오는 내용이 Maven이다.

웹 개발은 전혀 모르기에 Maven에 대해 먼저 정리할 필요가 있다.

 

1. 간단한 Maven 설명

자바용 프로젝트 관리도구 및 빌드 도구

java 코드와 프로젝트에 쓰인 자원등을 WAS가 인식할 수 있는 구조로 패키징하는 도구

필요한 라이브러리를 pom.xml(Project object Model)에 정의해 두면 네트워크를 통해서 라이브러리(jar파일)들을 자동으로 다운받아준다.

Life cycle : 미리 정해진 필드 순서가 있다. 이를 Life cycle이라 한다.

Phase : Life cycle의 각각의 단계를 Phase라 한다.

Goal : 특정 작업, 최소한의 실행 단위를 Goal이라 한다.
POM에 대해 자세히 설명이 되어있다. - https://goddaehee.tistory.com/199

 

*Reference

https://mangkyu.tistory.com/8

https://velog.io/@changyeonyoo/Maven-%EC%9D%B4%EB%9E%80

https://goddaehee.tistory.com/199

 

2. Maven project를 위한 pom 작성

https://github.com/yo-young/spring5fs/blob/main/sp5-chap02/pom.xml

 

3. 간단한 예제 구현

스프링 프레임워크에서 annotation이 자주 쓰인다. 따로 정리할 필요가 있다.

page 46

@Configuration annotation은 spring 설정 클래스로 지정한다.

@Bean annotation : 스프링이 생성하는 객체를 Bean 객체라고 부른다. 이 annotation이 붙으면 해당 method가 생성한 객체를 스프링이 관리하는 Bean 객체로 등록한다.

 

page 47

간단한 String return class

https://github.com/yo-young/spring5fs/blob/main/sp5-chap02/src/main/java/chap02/Greeter.java

 

AnnotationConfigApplicationContext 객체에 생성자 파라미터로 전달된 클래스에서 @Bean 설정 정보를 읽어와 Greeter객체를 생성하고 초기화한다.

https://github.com/yo-young/spring5fs/blob/main/sp5-chap02/src/main/java/chap02/AppContext.java

 

AnnotationConfigApplicationContext 클래스는 java설정에서 정보를 읽어와 Bean 객체를 생성하고 관리한다.

getBean() method : AnnotationConfigApplicationContext가 생성한 Bean 객체를 검색할 때 사용. 첫 번째 파라미터는 Bean 객체 이름, 두 번째는 객체의 type

https://github.com/yo-young/spring5fs/blob/main/sp5-chap02/src/main/java/chap02/main.java

*책에 있는 내용은 책을 다시 읽어보는 것이 좋겟다.

 

4. Singleton 객체

스프링은 기본적으로 @Bean annotation에 대해 한 개의 bean 객체를 생성한다.

그 bean 객체는 'sigleton 범위를 갖는다'고 표현한다.

 

5. 정리 및 포인트

스프링은 객체 컨테이너이다.

스프링의 핵심 기능은 객체를 생성하고 초기화하는 것이다. 관련된 기능은 ApplicationContext라는 인터페이스에 정의되어 있다.

AnnotationConfigApplicationContext클래스는 이 인터페이스에 알맞게 구현한 클래스 중 하나이다.

이 클래스는 자바 클래스에서 정보를 읽어와 객체 생성과 초기화를 수행한다.

XML이나 그루비 설정 코드를 이용해서 객체 생성/초기화를 수행하는 클래스도 있다.

 


5월 17일 업데이트

이전에 메이븐이 컴파일러인가? 하는 생각이 있었는데 지금 다시 보니 프로젝트 관리 도구였다.

참조한 블로그를 다시 보니 소스코드와 프로젝트에서 사용된 여러 자원들을 통합하여 WAS에서 인식할 수 구조로 패키징하는 것을 빌드라고 한다.

빌드 과정은 compile -> test -> package 라고 하니 메이븐은 컴파일부터 프로젝트를 배포할 수 있는 단계까지 도와주는 도구였던 것이다.

'Spring' 카테고리의 다른 글

Ch.3 스프링 DI(Dependency Injection)  (0) 2022.05.17
스프링 공부를 위한 개발 환경 세팅!  (0) 2022.02.22

백엔드 개발자로 전향하고자 스프링 공부를 시작해보려고 한다.

일단 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 책을 사고 한 일주일 묵혀뒀다가 이제야 펴본다.

 

책의 첫 페이지를 보니 대상 독자는 JAVA에 대해서 어느정돈 알고 있어야 하는 것 같다.

대부분은 알겠는데 콜렉션 타입?이 뭔지 잘 모르겠다. JAVA 공부도 병행할 예정.

 

이클립스는 현재 회사에서 사용하는 tool도 이클립스 기반이기 때문에 별 문제는 없을 것 같다.

 

서블릿/JSP/HTML은 필요한 경우 따로 정리가 필요.

 

대부분 JAVA 8버전을 주로 사용하는 것 같다. 책 내용도 8 버전이 기준이라고 쓰여있고..

개발환경 구성을 위해 검색을 해보니 JAVA 9버전 부터는 상업적 이용에 비용이 들어가나보다.

 

아무튼 JDK 설치를 위해 책과 아래 블로그를 참조했다. 

https://the-duchi.tistory.com/4

 

JDK 8 다운로드 및 설치하기, 환경변수 설정 [Java개발환경 구축하기 1]

JDK8 설치하기 (윈도우10) jdk는 지금 14버전까지 나와있다. 근데 왜 우리는 왜 8버전을 쓸까?? 그러게여.. 알려주세요.. 아마 9버전 이상부터는 상업적 이용을 위해선 돈을 지불하고 사용해야 하기

the-duchi.tistory.com

 

해당 블로그 내에 이클립스 설치까지 친절하게 설명되어있다.

책의 예제들은 UTF-8 인코딩을 통해 작성되었다고 한다. 그래서 동일하게 설정을 해준다.

 

Windows - Preferences - General - Workspace로 이동.

UTF-8 인코딩 설정

 

 

다음은 메이븐 설치 과정이다.

https://maven.apache.org/

 

Maven – Welcome to Apache Maven

Welcome to Apache Maven Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. If you

maven.apache.org

위 사이트에서 다운로드 받는다.

나는 binary zip파일을 받아서 C:\devtool이라는 폴더를 만들어서 압축을 풀었다.

source 파일도 있던데 이건 뭔지 잘 모르겠다. 나중에 알게되면 업데이트 예정.

 

 

환경 변수 설정

환경 변수에서 Path에 메이븐 폴더의 bin 폴더 경로를 추가한다.

 

그리고 cmd에서 mvn -version을 수행하면 다음과 같이 version 정보가 보인다.

mvn -version

책에 의하면 웹 어플리케이션을 개발할 때 메이븐을 사용하면 톰캣 없이 간단한 설정으로 웹 어플리케이션을 실행할 수 있다고 한다.

 

음... 아직은 와닿지가 않는다. 일단 다음 단계인 gradle 설치로.

https://gradle.org/releases/

 

Gradle | Releases

Find binaries and reference documentation for current and past versions of Gradle.

gradle.org

 

gradle 같은 경우 binary only와 complete 버전이 있는데 일단 complete으로 다운 받았다.

maven과 동일하게 devtool 폴더에 압축풀기.

환경 변수 설정도 동일하게 bin 폴더까지 추가해준다.

그리고 cmd에서 버전을 확인하면 다음과 같이 버전을 볼 수 있다.

gradle -v

 

 

자 이제 준비는 끝났다. 다음은 진짜 스프링을 시작해보자.

'Spring' 카테고리의 다른 글

Ch.3 스프링 DI(Dependency Injection)  (0) 2022.05.17
Ch.2 스프링 시작하기  (0) 2022.04.09

+ Recent posts