Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 정규식 컴파일
- telegraf
- c3 축 가리기
- subporcess path
- python subprocess
- c3 축 없애기
- semanage
- snmp
- c3 second
- snmp test
- selinux port 등록
- g++ 업데이트
- python os
- regex_search
- 백준
- 정규식 활용
- 1697
- linux시간으로 변경
- gcc 업데이트
- influxdb 설치
- python popen
- grafana dashboard
- gcc regex
- InfluxDB
- CentOS7
- 정규식 문자열 출력
- c++ 정규식
- c3 step graph
- centos pyhon 설치
- c3 초
Archives
- Today
- Total
리셋 되지 말자
[IoC]간단 예제로 개념 잡기(?) 본문
IoC(Inversion of Control) 이란
- 제어의 역전 : 프로그램의 제어 흐름 구조가 '개발자'가 아닌 스프링(프레임워크)로 '역전'
- 스프링은 프로그램의 흐름을 프레임워크가 주도하게 됨
- 객체의 생성, 생명주기 관리를 컨테이너가 담당
예제 main 함수 차이
public class Main {
public static void main2(String[] args) {
HelloWorld hello = new HelloWorld();
hello.setMessage("hello world!!");
System.out.println(hello.getMessage());
}
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld hello = (HelloWorld)context.getBean("helloWorld");
System.out.println(hello.getMessage());
}
}
- ApplicationContect는 spring에서 사용하는 대표적인 인터페이스. 오브젝트(객체)의 생성, 객체들간의 관계 설정, 객체를 만드는 방식, 객체를 자동 생성한 뒤 후 처리 등의 기능을 수행
동작의 차이
main2 함수에서는 new 를 써서 객체를 생성하였고
main에서는 "beans.xml"를 읽어드린 다음, xml 안에 기술된 "helloWorld" bean을 객체화 하였다.
그래서 대체 무슨 차이가 있냐?
main2 함수를 main으로 변경하고, main 함수를 main2로 변경항 뒤에 실행시키면, 당연히 main함수가 실행되므로
"hello world!!"가 출력이 된다. 만약 이 출력되는 문자열을 바꾸려면, main2 함수의
hello.setMessage("hello world!!"); 의 문자열 부분을 변경해야 한다. 즉, class를 직접 수정해야 한다.
내 입장에서는 그냥 문자열만 바꿀 뿐이지만, 변경한 문자열을 출력하기 위해서
.java 소스코드가 .class 파일로 컴파일 되고 이를 다시 실행파일로 변경되어 실행되는 일련의 과정이 필요하다.
그에 반해 spring에서는 beans.xml에 기술된 bean의 value값만 변경하면 된다. 즉, java파일이 수정되지 않는다.
java파일의 외부 파일인 beans.xml의 value값이 java 파일로 주입된다.
흐름제어가 '개발자'가 아닌 '프레임워크'이다.
Spring Container(스프링 컨테이너)
- Spring IoC container는 설정 정보(configuration metadata)를 필요로 함 (여기서는 beans.xml이 metadata로 사용된 것이다.)
- 설정 정보는 container가 객체를 생성하고, 객체간의 종속성을 이어줄 수 있도록 필요한 정보를 제공함.(이 필요한 정보를 제공하는 것이 스프링을 설정하고 사용하는 방법)
자바 어노테이션, 자바 콘피그
- 여기서는 metadata를 xml 방식을 사용했지만 xml말고도 자바의 어노테이션 혹은 자바 콘피그 방법으로도 가능.
bean
- 스프링 컨테이너에 의해서 객체가 생성되고, 객체가 만들어져서 객체의 라이프사이클이 관리되는 녀석을 통틀어서 'bean'이라고 함.
DI
- 외부에서 객체를 만들어서 주입하는 방식을 Dependency Injection(의존성 주입)이라고 한다. 다음 게시물 참고!
'Java(폐지)' 카테고리의 다른 글
redirect (0) | 2020.08.31 |
---|---|
Spring MVC 생성 후 실행시 404 오류 (0) | 2020.08.17 |
Apache Maven (0) | 2020.07.07 |
Comments