기록/Spring framework

복습 chap 02. , 이클립스에 메이븐 프로젝트 import. , 이클립스와 자바 프로젝트와의 관계, 인텔리제이와 이클립스의 관계.

최동훈1 2021. 10. 7. 16:31

메이븐의 기본 폴더 구조.
spring5
-spring5-chap2(메이븐 루트폴더)
-src
-main
-java(실질적인 자바 코드가 들어가는곳)
-resources(자바코드외 프로퍼티 파일이나 XML 파일이 들어가는곳.)

Pom.xml( 모든 메이븐 프로젝트에는 루트폴더에 프로젝트의 설정을 정의한 POM.xml 파일이 들어가있음.)


객체의존 이란 한 클래스가 다른 클래스의 메서드를 실행할때, 서로 의존관계에 있다고 말한다.
객체의존이 사용되었을경우, 의존대상이 되는 객체의 변경이 일어났을때, 필연적으로 의존하는 객체의 코드 변화가 있을수 밖에 없는데, 이를 최소화 하기 위한 방법으로는 DI 라는 방법을 쓴다.
객체의존을 구현하는 방법은 크게 두가지가 있는데,

1. 직접 생성자를 통해 의존대상이되는 객체를 직접 생성하는 경우랑
2. DI(의존주입) 으로 외부에서 의존대상이 되는 객체를 주입받는 경우가 있다.

생성자를 만들어서 객체를 주입받는다. 만약 주입하는 객체의 변경이 일어날 경우에도 다형성이란 특성을 잘 살려서 최초의 주입하는 객체를 생성하는 부분만 바꾸어 준다면, 변경의 유연성이 보장된다.

그렇다면 DI를 통해 주입하는 과정은 과연 어느 클래스가 담당하게 될까? Main 메서드에서 의존 대상을 생성하고 주입하는 과정을 해도 되지만, 조금더 객체지향 적인 특성을 살리고, Main 메서드는 서비스를 실행하는 용도로만 사용하려 한다면, 객체 조립기라는 DI를 전담으로 하는 새로운 클래스를 만드는것이 낫다.

즉, 객체의 역할을 확실하게 분리해 주는 것이다. 객체조립기는 Assembler 클래스라고도 불린다.

**이클립스 사용법.


그전에는 이클립스랑 미리 위에서 C 드라이브에 만들어놓은 메이븐 프로젝트와의 관계를 잘 몰랐는데 알게되었다. 바로 이클립스는 단지 메이븐 프로젝트에 대한 작업을 수행할수 있는 기능을 제공하는 툴일 뿐이고, 실제로 작업이 끝난 메이븐 프로젝트는 처음 저장되었던 폴더의 구조에 그대로 저장된다. 이클립스에서 작업한다고 해서, Workspace에 저장되는것이 아니다. 단지, 작업할수 있는 장소? 를 이클립스에서 import를 통해 제공할 뿐이다.

이미 이클립스에 "기존에 만들어놓은 메이븐 프로젝트" 폴더를 import 할때 떳던 창에 힌트가 나와있었다. "Existing Maven Projects" 이미 존재하는 메이븐 프로젝트를 이클립스에서 "작업"만 한다는 뜻을 내포한다.

즉, 인텔리제이에서도 이미 '만들어진' 메이븐 프로젝트를 '작업' 하는 용도로 사용하는 툴인거 같다.

import 된 메이븐 프로젝트 들.

그런데 여기서 내가 "새로운 자바 프로젝트" 로 이클립스에 만든 JDBCprj는 이클립스의 WorkSpace에 저장된다.

이클립스에서 직접 new 해서 만든 자바 프로젝트만 들어있는 모습.

다른 메이븐 프로젝트 파일은 기존에 내가 Existing Maven Project 를 import 한 것이기 때문에, workspace에 없고, 원래 폴더에 존재한다. 계속 내가 강조하는 포인트는 이클립스는 그냥 "툴"일 뿐이다는 것이다. 즉, 다른곳에서 작업하던 자바 프로젝트를 이클립스로 불러올 수 도 있다.

다른 IDE에서 작업하거나, 혹은 다른곳에 저장된 자바 프로젝트를 이클립스로 불러오는 방법.

위 기능을 이용해서 난 인텔리제이에서 작업하던 "백준 자바 문제풀이용" 이라는 자바 프로젝트를 이클립스로 불러왔다.

인텔리제이에서 자바공부 폴더의 프로젝트 파일들.

인텔리제이는 별도의 workspace없이 디폴트 폴더로 사용자의 폴더에 저장공간을 만든다.

인텔리제이에서 작업하던 자바 프로젝트를 이클립스로 옮긴 모습.


++추가 수정.(2021-10-13)
메이븐의 아티팩트에 대해서 찾아보다가 참고하기 좋은 블로그가 있어서 추가로 남긴다.
Today I Learned. @cheers_hena 치얼스헤나 :: 메이븐이란? Maven 파헤치기. pom,repository,lifecycle ... (tistory.com)