Wanna be Brilliant Full-Stack Developer

3/1 Java 객체지향 프로그래밍 문법 #2 #라이브러리 # JAR 본문

Some Memos/Java

3/1 Java 객체지향 프로그래밍 문법 #2 #라이브러리 # JAR

Flashpacker 2022. 3. 2. 16:09


1) 라이브러리라는것을 만들어보자!

라이브러리라는것은? 도서관이라고 생각해보자 , 도서관에는 책들이많다, 요리 책도 있고, 수학 책도 있고
다양한 책들이 있는데 , 이 도서관이 있으면 우리가 좋은게 우리가 만약에 김치찌개를 만들고 싶으면 

내가 김치찌개를 만들때 내가 상상해서 만들필요가 없다. 왜냐하면 도서관에 요리책에있으니까! 

그러면 도서관에 요리책에 있다.
나는 무엇만 하면될까? 도서관에 있는 요리책을 가져와서 

이 책을 활용해서 만들 수 있다. 이책을 활용해서 가져오려면
자바에서는 임포트(Import)한다는것이다. 

 

이렇게 새로운 프로젝트를 만들어서 그안에 클래스를 만들고 이 클래스를 다른 프로젝트에서 쓰려면?

프로젝트가 완전 달라서 접근할 수 있는 방법이 없다. Public이 없으니까 또 접근할수 있는 방법이 없다. 

그래서 recipe 프로젝트를 Export 하려고하는데 

이 두가지가 보인다 이두가지의 차이는 무엇인가? 

패키지는 .java 파일의 모임이다. .java가 하나만 있어도 상관없다

이거보다 조금더 큰 개념은 Jar이다. 

Jar은 무슨뜻이냐면 자바 파일을 포맷하면 자바 아카이브 파일이라고 하는데? 

자바 아카이브 파일이 뭐냐면 압축을 한다고 보면된다. 머를 압축을 하는것인가? 

Jar는 패키지의 모임이다. 더 큰개념이다. 여러패키지에 있는 자바파일을 하나에 Jar파일로 압축할 수 있다. 

Jar 파일에 패키지가 하나가 있어도 여러개가 있어도 상관이 없다. 

내가 지금 만드는 Jar파일은 패키지의 모음이다 패키지가 하나밖에 없고 자바파일이 하나밖에 없는데?

Jar File과 Runnable JAR file은 무슨 차이인가? Jar 파일이 실행 파일이면 Runnable JAR file로 만들어야하고

그냥 실행파일이 아니면 JAR file이라고 만들면된다. 

머가 실행파일이고 , 머가 실행파일이 아니냐면 메인메소드를 가지고 있으면 실행파일이다. 

메인 메소드를 안가지고 있으면 실행파일이 아니다! 

jar파일을 만들면 workspace안에 만들어져있다.

recipe.jar파일의 위치가 recipe 프로젝트와 test프로젝트 안에 있지 않고 밖에 있다. 

이거를 가져와서 쓰기 위해서는? 

build는 짓다, Path는 경로

test프로젝트에서 쓰기 위해서는 마우스 오른쪽 클릭해서 Build Path를 설정해야하는

여기서 Build Path는 또 무엇인가? 

내가 지금 이 test 프로젝트는 내부에 있는 java파일만 쓰고 있을텐데
build path를 test 프로젝트 내부 말고 다른 폴더에 있는
프로젝트 에 있는 것도 쓰고 싶으면 build path라는것을 만들어야한다.

그래서 Configure Build Path 를 선택하여

Add JARs는 내부에 있는것을 선택하고 지금 jar파일은 외부에 있으니 Add External JARs를 선택한다. 

이렇게 애를 Build한다, 가져온다는것이다 Import하고는 조금 다르다. 

Import란 다른 패키지에 있는것을 가져오는것을 말한다!

Import라는건 

Test라는 프로젝트가 있는데 이프로젝트 내부에 A 패키지가 있고 B패키지가 있다. 

그리고 A패키지 안에 Cal이라는 자바 파일이 있고 B패키지 안에서는 App이라는 자바파일이 있다.

Import라는건 다른 패키지에 있는것을 가져오는걸 말한다! 

 

Import말고 Build Path한다는건 무엇일까? 

내 Test 프로젝트 내부에 있는 먼가 정상적인 파일이 아니라 다른곳에서 만든? 완전 다른사람이 만든?
그런것들은 밖에 다른 경로에 있다. 

recipe라는 프로젝트가 있고 Jar 파일로 만들었다. ( 패키지의 모음으로 만들었다) 

Test프로젝트에서 사용하기 위해서는 임포트 하는것이 아니라 recipe 프로젝트를 내 프로젝트로 Build Path 해야한다! 

내 프로젝트에서 사용할수 있게하는것을 Build path 한다고 한다. 

Build path 하면 사용할수 있는데? 한번 해보자 

이렇게 추가가 되면 사용이 가능한거 같은데? 한번 써보자 

MySoup를 쓰려면 이건 .class 파일인데 코드 내부를 우리가 볼수가 없다. ( 인간이 이해할수있는 언어가 아니기떄문에) 

 

그래서 라이브러리를 만들어줄떄는 어떻게 사용해야하는지 알려줘야한다

어떻게 사용하는지 알려줘야한다는것이 MySoup이 어떤 메소드 , 어떤 변수를 들고있는지 알려줘야지 쓸수 있다.

이클립스라는 툴은 굉장히 좋다. m.하면 바로 튀어나온다!

MySoup클래스의 김치치개 메소드가 보인다

라이브러리를 처음 만들어봤다! 

우리가 자바를 설치하면  JDK 설치 - JDK, JRE , JVM 과 같이 여러가지가 한꺼번에 설치가 된다. 

JDK(컴파일 및 실행) 안에는 Javac, java 와같은 실행 파일이 있고, JRE는 라이브러리가 있다. JVM은 (자바 가상머신) 

근데 JRE는 정확히 무엇인지 모르겠다. 

JRE System Library를 보면 이렇게 수많은 파일들이 보이는데 이거는 자바라는 언어를 공부할때 쉽게 사용하기 위한 라이브러리들이 다 모여 있다. 

이렇게 자바의 유틸이라는것이 나오는데? 

package ch04;

import java.util.Random;

import recipe.MySoup;

// JDK 설치 - JDK, JRE , JVM ㅇ
public class LibEx01 {
	public static void main(String[] args) {
		MySoup m = new MySoup();
		m.김치찌개();
		
		Random
	}
}

보면 Import한것을 통해 Random이 어디에 있는지 추측이 가능한데 자바라는 패키지 안에 util이라는 패키지 안에 Random이라는 클래스가 있는것인가? 

그건 어디에 있을까

랜덤 클래스를 사용하기 위해서 메모리에 띄우려고하는데 Static이 아닌 모든것들을 ( Random r = new Random(): 으로 메모리에 띄운다!

Static이 있는지 확인하려면 .해보면되는데 

아무것도 없고

Random이 들고 있는 메소드들이 보인다! 

이렇게 하면 자동으로 난수들이 호출이 된다! 

여기서 Random 을 컨트롤 클릭해서 보면 클래스가 어떻게 생겼는지 내부를 볼 수가 있다. 

Static들이 조금 있는데 Private니까 못찾는다. 

저 안에 있는것들중에 nextInt를 사용했는데 이거를 컨트롤 클릭해보면 

Private이 적혀있으면 찾을수 없겠지만 public이 적혀있기떄문에 사용이 가능하다! 

 

우리는 라이브러리를 만들어보기도했고(recipe를 Jar로 만들어서 Build Path 통해) 

제공된 라이브러리를 사용도 해봤다 ( Random클래스에서 nextInt 메소드를 사용해봄)