본문 바로가기

프로그래밍/스프링

[spring] 스프링 기반기술이해 (Feat.전자정부프레임워크)

[spring] 스프링 기반기술이해 (Feat.전자정부프레임워크)







스프링을 이해해봅시다. IOC, DI 를 활용하기 좋게 만들었기 때문에 사용하는 것 입니다. 이전부터 있던 개념들인데, framework로 잘 정리해서 묶어놓았습니다. 그리고 우리나라에서는 정부가 스프링프레임워크를 사용하라고 했기때문에 다른 프레임워크들은 구경하거나 활용하기가 쉽지않죠. 


1. 스프링 기반지식


framework 와 library의 차이    ||    


- 프레임워크 특징
1. 특정 개념들의 추상화를 제공하는 클래스나 컴포넌트들로 구성
2. 상기의 추상적 개념드링 문제를 해결하기 위해 협업하는 방법을 정의함.
3. 재사용 가능한 컴포넌트들의 집합
4. 보다 수준 높은 패텀들로 조직화된 구조.

- 라이브러리
소프트웨어에서 호출할 수 있는 함수와 루틴

- 실무
프레임워크는 얘가 코딩하라는대로 일정한 패턴을 지켜서 코딩르 해줘야하는 것이고, 라이브러리는 필요할 때 호출해서 쓴다는 차이가 있다. 

팁1    ||    xml 파싱할 일이 있으면, JAXB를 공부해서 사용해라!

팁2    ||    자바의 스트링 비교 특성



String name1 = "홍길동";

String name2 = "홍길동";

String name3 = new String("홍길동");

String name4 = new String("홍길동");

System.out.println(name1 == name2);

System.out.println(name1 == name3);

System.out.println(name3 == name4);




정답은 ?  true, false, false 요래 나옵니다.

그냥 스트링 자체는 literal pool이라는 영역에 저장을 해놓기 때문에, 똑같은 값이 들어오면 literal pool영역에 이미 있는 주소에 담긴 값을 넘겨준다. 즉, name1 과 name2은 같은 주소를 가지고 있는 것이다. 같은 객체를 참조하고 있다는 말이다. 하지만, new해서 객체를 생성한 것은 각자 다른 객체이다. 즉, 서로 다른 주소값을 가지고 있다. 기초를 잊어서는 안된다! 값 비교가 아닌 주소값 비교라는 것을 다시 되새기자!


스프링을 사용하기 위해 꼭 필요한 3가지    ||

1. Container (설정정보를 통해 객체를 관리해주는 친구)
    -  Spring IoC Container는 객체를 생성하고, 객체 간의 의존성을 이어주는 역할을 한다.
2. XML (설정정보)
    - 객체를 관리하는 설정정보들이 나열되어있다. 어떤 객체를 언제, 어떻게 생성관리 할 것 일지를 관리 하는 것이다.
3. Bean (객체)
    - 객체를 말한다. 





container가 설정정보와 객체를 관리한다. 특히, 객체를 singleton으로 관리한다는 사실을 알아야한다. 아래의 코딩으로 해당 사실을 이해해보자.



2. 스프링 이해


스프링 이해1.     ||    Singleton


===========================================================bean.xml 설정

    <!-- bean을 여기에 정의하는 것이다. -->

<bean name="foo" class="kr.or.ddit.spring.lab1.Foo">

<constructor-arg>

<bean class="kr.or.ddit.spring.lab1.Bar" />

</constructor-arg>

<constructor-arg>

<bean class="kr.or.ddit.spring.lab1.Baz" />

</constructor-arg>

</bean>


    ============================================= 클래스 테스트

    public static void main(String[] args) {

ApplicationContext context = new ClassPathXmlApplicationContext(

            new String[]{"kr/or/ddit/spring/lab1/beans.xml"});

/* 싱글톤 개념 같은 주소값을 갖는다. getBean을 해와야 스프링에서 노는 것. 

* Foo 클래스에서와 같이 내 멋대로 코딩하면, */

Foo foo = (Foo) context.getBean("foo");

System.out.println("foo : " + foo);


Foo foo1 = (Foo) context.getBean("foo");

System.out.println("foo1 : " + foo);

}


   =========================================== 결과

   foo : kr.or.ddit.spring.lab1.Foo@67e9f96b

   foo1 : kr.or.ddit.spring.lab1.Foo@67e9f96b





new로 생성하지 않아도 객체를 불러올 수 있다. 그리고 하나의 객체의 레퍼런스를 참조해서 가져오는 것을 알 수 있다. 근데, 내 멋대로 new해서 생성하게 되면 서로 다른 객체가 생성되기 때문에 원하는 값을 제대로 넘겨받지 못할 수가 있다. 스프링을 제대로 사용하려면 이걸 이해합시다. 



context.getBean("foo")



이미 xml에 정의된  <bean name="foo" class="kr.or.ddit.spring.lab1.Foo"> 요친구를 불러오는 것이다. 이름을 "foo"라 명명해줬기 때문에, getBean("")요 안에 "foo"를 넣어 불러온다. 
 













'프로그래밍 > 스프링' 카테고리의 다른 글

[jsp] jsp 인코딩시 주의사항  (0) 2017.01.20