본문 바로가기

프로그래밍/스프링 프레임워크

Spring FrameWork(스프링 프레임워크) IOC 개념과 Container

안녕하세요... 스프링을 같이 공부해 볼 엉뚱한 마녀입니다.
이번에 엉뚱한 마녀가 스프링을 여러분과 같이 공부하게 되었습니다 와아~ 환영해주세요^^

프로그램 특히 모바일 쪽을 개발하다보면 자바쪽을 많이 개발하게 되며, 서버쪽을 하게 된다면..
프레임워크라는것을 사용하게 됩니다. (프레임워크가 뭐야? 그건... 나도 몰라!)

프레임워크중에서도 스프링을 이번 글에서 여러분들과 같이 공부하게 되었는데요...
흠.. 제가 귀차니즘이 많은 사람이라.. 글 연재가 계속 될지 모르겠습니다.

한가지 확실히! 말씀드릴수 있는것은 저도 배우는 입장이라는것이므로 틀리는 경우가 있습니다.

자 그러면 한번 도전!~~~~

일단 스프링 프레임워크의 기초중의 기초! IOC의 대해 살펴보도록 하겠습니다.
스프링? 이라고 한다면 가장 먼저 생각해야 할게 IOC와 AOP 일것입니다. (스프링에서 중요하게 여겨져요!)

☆ Spring IOC의 개념!
Spring의 IOC의 알려면 우선! 결합도가 무엇인지 부터 알아야 할것입니다.
그 이유는 ? IOC의 궁극적인 최종 목표는 결합도를 낮추는것의 있기 때문이죠 (맞나?)

그럼 결합도의 대해서 알아보도록 하죠 (결합도가 무엇인가요?)
결합도는 말 그대로 해석하시면 될것 같아요.. 한개의 객체가 다른 객체와 얼마나 연결고리가 강하냐?
이 말로 알아들으시면 될 것 같아요...

자바의 객체지향적으로 표현해 보자면.. 이렇게 해석하실 수 있습니다.
하나의 클래스가 다른 클래스와 얼마나 연결이 되어있느냐? 라고 보 실수 있는데요..

즉! 한 객체(클래스) 안에서 다른 객체(클래스)의 있는 메소드 호출이나 변수의 접근하기도 하죠?
이럴땐 두 객체(클래스)는 연결되어있다라고 말할 수가 있습니다.

※ 원래 클래스는 객체라고 말 할수 없습니다. 그저 틀일 뿐이지요.. 객체라고 말할려면 인스턴스화 ~ 

별로 쓰지 않았는데 벌써 지치는군요^^  여기서 끝내버려?
하지만 이렇게 끝내면 아직개념의 '개'자도 설명 안했는데 휙`~ 하고 갈수 는 없겠죠..

그럼 프로그램 코드를 만지는 사람들끼리 코드를 보면서 애기를 해보도록 할게요 와아 멋지다~



간단한 클래스 작성으로 결합도를 알아봅시다.
class Test 1{
 void method{
}
}

class Test 2{
 void method{
}
}

class Test 3{
 void method{
}
}

이렇게 3개의 클래스가 각각 존재하며, 그의 맞게 메소드가 존재합니다. (예를든것 입니다.)

3개의 클래스를 Test라는 클래스를 하나 더! 만들어서 Test1~3까지의 메소드를 호출해보도록 하겠습니다.


public class Test{ // Test 클래스를 하나 만들었습니다.
Test1 test1 = new Test1();
Test2 test2 = new Test2();
Test3 test3 = new Test3(); // Test1~3까지 인스턴스화 해서 객체로 만들었습니다.

void Test(){ // 메소드를 만들어 냈죠?
test1.method(); //각각의 참조변수를 통하여 메소드를 호출하고 있습니다.
test2.method(); //메소드 호출
test3.method(); // 메소드 호출
}

}


}

헤헤~ 여기까지 생성해놓고 보니... 뭐가 보이시나요? 3개의 클래스와 Test클래스의 연결고리가 보이시나요? (조금이라도 안보여요? 힘들게 적었는데 쳇~)

이해 잘하시는 분들은 벌써 이해하셨을거에요 자바 조금만 알아도 이해하신답니다.
Test 클래스는 Test1~3까지의 클래스를 이용하고 있다고 볼수 있습니다 즉! Test1~3클래스와 결합(연결)
되어 있다고 말 할수가 있게 되죠! (아하~ 그렇구나)

그렇다면 여기서 한가지 더 생각해볼수 있겠는데요?
유지 보수 할경우 결합도 연결고리가 길면.. 즉 위의 코드처럼 메소드호출같은 경우 Test 클래스에서 Test1~3까지의 객체를 생성하여주고 메소드 호출해주잖아요?

그럼 Test1~3 클래스를 약간만 수정해본다고 해봐요~
Test1~3 코드에서 method를 methodd라고 수정한다고 해보죠...
그러면.. Test코드에서도 메소드 호출 부위에서 method(); → methodd(); 이렇게 해줘야하겠죠?

한마디로 Test1~3 클래스가 변경되는 경우 그것을 사용하는 Test 클래스도 변경이 이루어진다는 것이죠

여기서 잠깐! 혹시 Test1~3이 Test1, Test2, Test3 인 것은 아시죠?

위의 설명한것처럼 저런 코드같은경우 Test클래스가 Test1~3 클래스의대해 결합도가 높다고 볼수 있습니다. 이런 경우에는 유지보수의 어려움을 겪게되죠.. 위에서 말한것처럼 하나 고쳐주면 다른하나도 고쳐줘야하고...



결합도 하나 설명하는데 말이 길어져버렸습니다만 이해는 혹시 하셨나요?
못하셨어도 그냥무시하고 고고~ 과거는 보지않고 미래만 보는자가 되어라 ㅠㅠ

결합도를 낮추는 방법은 다형성을 이용하는 방법과 IOC Container를 이용하는 방법이 있습니다.
다형성은 인터넷 뒤져서 뭔지 알아보시면 되겠구요...


그럼 IOC Container의대해 공부해볼 차례인데 필자가 쓰다가 지칠것 같아.. 여기서 도중의 끝내겠습니다 ㅠㅠ