기록/Spring framework

스프링 DI 공부 및 내가 실수했던 것들[최범균의 스프링5 책](2021-05-26)

최동훈1 2021. 5. 26. 01:43

 DI(DIpendency Ingection)란 '의존주입' 이라고 불린다. 여기서 의존에 대한 정의를 알아야 하는데 의존은 클래스 안에서 다른 클래스를 실행할 때, 이를 의존한다고 표현한다. 다시 정확하게 설명하자면, 의존은 한 클래스의 변경에의해 필연적으로 영향을 받는 관계를 의미한다. 즉, 의존의 대상이되는 코드의 변경이 이루어졌을때, 의존하는 메서드에 기능적, 프로그래밍적 영향을 미치면, 그건 두 클래스가 의존관계에 있다고 말할수 있다.

 

스프링은 이런 클래스들간의 의존관계를 관리해주는 기능을 제공한다. 대표적으로 DI 이다. 

 스프링의 DI없이 의존관계를 주입하려면, 어떤 클래스가 다른 클래스를 의존할때, 의존이 필요한 클래스 안에서 의존의 대상이 되는 클래스의 객체를 생성하는 방법으로 클래스간 의존주입을 해 줘야 하는데, 객체지향적 관점에서 유지보수성이 떨어지는 방법이라, 스프링은 다른 방식을 이용하여 이를 보완해주는 기능을 제공한다.

유지보수성이 떨어지는 이유는 만약 의존의 대상이 되는 클래스가 변경이 일어날 경우, 클래스 안에서 의존의 대상이되는 클래스의 객체를 생성한 코드들을 전부 다 바꾸어 주어야 하기 때문이다.

그러나, 만약 의존이 필요한 클래스의 생성자로 의존의 대상이되는 클래스를 내부 참조변수로 받을 수 있다면, 굳이 여러번 코드를 고칠 필요가 없을 것이다.

 

스프링 DI를 보여주는 새로운 메이븐 프로젝트를 이클립스에 임포트 하는 과정에서, src/main/java 패키지가 나타나지 않았다. 이유를 알고 보니,  메이븐 프로젝트를 생성하는 파일의 계층구조가 정확히 src/main/java 이렇게 일치하지 않으면, 패키지가 생성되지 않는다는 것을 알았다.

 

백준 2644번 촌수 계산 문제,

내가 실수 했던 부분은, 문제의 접근 방법은 BFS로 하는 것이 맞다, 그러나 촌수를 카운트 해주는 과정에서 난 큐에 한 노드에 연결된 다른 노드들을 너비우선 접근방식으로 다 넣은 후(for문이 끝났을떄), count값을 올려주는 방법을 생각했는데, 그게 아닌 큐에서 poll해서 나온 노드에 저장된 카운트 값에 +1을 해줘야 한다는 것을 알게 되었다.

 

page 64 공부완료.

순공부/실습 시간 1시간.

오늘따라 집중이 잘 되지 않았는데, 나태해지는것 같다. 1년 동안 하루종일 코딩공부하며 앉아있으니, 뇌가 쉴때도 된것 같다. 오늘은 수고한 나의 몸에게 쉬는시간을 주었다고 생각하고, 내일부터는 꿈을 위해 포기하지말고, 꾸준히 지속하자.