자바 공부 기록 2회독(5) - 2024.1.21

동준·2024년 1월 21일
0

개인공부(자바)

목록 보기
7/16

5. 라이브러리, 모듈

참고로 이 부분은... 뭔가 직접 프로젝트를 하고 더 찾아오면서 체득하는 과정이 필요하다
왜냐하면 나는 자바 프로젝트를 인텔리제이로 작성하는데, 내가 공부한 이것이 자바다에서 사용한 IDE는 인텔리제이가 아닌 이클립스라서...

근데 이클립스에서 가능하다면 인텔리제이에서도 가능할 거잖아(아마?)
1회독 당시에 라이브러리 커스터마이징은 성공했는데, 모듈은 아무리 봐도 모르겠다(...)

그래서 다시 공부하면서 할 간단 찍먹 커스터마이징 연습 :D

1) 라이브러리 커스터마이징

(1) 라이브러리? 프레임워크?

Q : 리액트는 자바스크립트 기반 라이브러리일까요, 프레임워크일까요?
나 : 🤔...?
Q : 그럼 스프링은 자바 기반 라이브러리일까요, 프레임워크일까요?
나 : 😨...

프론트엔드를 공부할 때는 라이브러리랑 프레임워크 용어를 별로 구분하지 않는 죄악(?)을 저지르며 살아왔다. 풀찍먹을 달리는 지금은 저 둘을 잘 구분해서 사용해야 될 시점이다.

사실, 둘이 혼동이 자주 오는 이유는, 라이브러리와 프레임워크는 모두 다른 사람이 작성한 재사용 가능한 코드의 모음일 뿐이라는 점에서 큰 공통점을 지니고 있기 때문이다.

그렇지만, 둘은 명확하게 다른 용어다.

라이브러리는 개발에 필요한 것들이 이미 구현되어 있다. 즉, 원하는 구조대로 집을 짓고 가구를 배치할 수 있다. 반면 프레임워크는 개발에 필요한 장을 마련한다. 즉, 집을 짓기 위한 설계도와 터를 마련하는 셈이다.

여기서 개념의 광협 여부가 결정된다. 원하는 대로 집을 짓는다고 한들, 설계도를 무시할 수 없고, 부지의 너비를 초과해서 지을 수 없다. 무시하면 집 무너진다

저수준의 라이브러리는 프레임워크에 이미 포함되어서 제공되는 경우가 있다. 이런 예시를 봐도 프레임워크가 넓은 개념에 포함됐다고 할 수 있겠다.

좀 더 학술적으로 들어가면, 둘을 구별하는 가장 큰 기준은 통제권이다.

통제권을 지닌 측이 사용자냐 아니냐에 따라서 구별이 된다.

라이브러리의 경우, 앞서 언급했듯이 개발에 필요한 것들은 이미 구현되어 있고, 개발자는 그저 호출만 하면 된다. 라이브러리를 설치했다고 한들, 내장된 메소드나 함수 등을 호출하지 않아도 개발에 전혀 지장이 없다.

요약하자면, 라이브러리는 개발자에게 통제권이 있다.
여담으로, React JS는 라이브러리이다.

프레임워크의 경우, 개발에 필요한 환경을 제공하므로 개발자는 해당 환경의 통제 하에서 프로젝트를 수행한다. 프레임워크에서 사용된 코드를 개발자 임의대로 수정하거나 삭제할 수 없다.

요약하자면, 프레임워크는 프레임워크에게 통제권이 있다.
여담으로, Spring은 프레임워크이다.

참조 링크
https://code-lab1.tistory.com/284
https://www.interviewbit.com/blog/framework-vs-library/
https://www.sencha.com/blog/difference-between-framework-vs-library-snc/

(2) 인텔리제이에서의 라이브러리

아주아주 심플한 프로젝트를 하나 만들었다.
이것조차 라이브러리가 될 수 있다.

라이브러리로 외부 프로젝트에서 쓰고자 하는 것은 src 폴더 내부의 각 패키지 내부에 정의된 메소드들이다.

File -> Project Structure -> Artifacts ->
+ -> JAR -> From modules with dependencies...

이렇게 들어가서 jar 파일 생성을 위한 준비를 한다.

클릭하면 나오는 창에서 Main 클래스 지정을 요구하던데, 저거는 main(String[] args) 메소드가 있는 클래스를 요구하는 거다. 저거의 존재 여부에 따라서 어떤 차이점이 존재하냐 여부는 모르겠다(...)

앞선 작업이 전부 완료되면 이렇게 화면이 뜬다.
저장하려는 디렉토리 경로를 선택하고 Apply 후, OK를 누른다. 그러면 원래 인텔리제이 화면으로 돌아오고 아무런 변화가 없다(?)

이제 Build -> Build Artifacts... 과정을 거친다.

그러면 이전에 지정한 경로에 라이브러리로 삼으려는 해당 프로젝트의 jar 파일이 생성된다.


이제, 생성한 jar 파일을 다른 프로젝트에 추가해서 사용해보자.

외부의 다른 프로젝트에서 File -> Project Structue...로 접속한다.


Modules -> + -> JARs or Directories... 를 클릭한다.

추가하려는 라이브러리 jar 파일을 찾아서 의존성 모듈에 추가한다. 적용된 것을 확인하면 창을 빠져나온다.

이런 식으로 라이브러리가 추가된 것을 확인할 수 있다.
시강하는 json 파싱 라이브러리와 sql 커넥팅 라이브러리

import 문법을 사용하면 추가한 라이브러리를 사용할 수 있다.

(3) 라이브러리 정리

External Libraries를 확인하면 < 17 >이라는 라이브러리를 확인할 수 있다.(자바 버전마다 다르다)

나는 Java 17를 사용하고 있기 때문에 라이브러리 폴더명이 저렇게 이름지어진 것이다. 저곳에 컬렉션, sql, 스트림 등의 여러 요소들이 모여있고, 자바를 설치할 때 자연스럽게 따라온 것들이다.

즉, 거창하게 무언가를 덧대고 그 규모가 기준을 충족해야만 라이브러리가 아니고, 내가 직접 추가한 아주 보잘것없는 저수준의 코드 묶음부터, 표준화된 자바 라이브러리들까지 정의에 따라 모든 코드가 라이브러리의 가능성을 내포하고 있다.

모듈은 내일 공부해야지

profile
scientia est potentia / 벨로그 이사 예정...

0개의 댓글