다른 사람들이 만들어 놓은 것을 활용하기 위해서 -> 라이브러리라는 개념을 사용한다.
라이브러리를 사용하기 위해서 cmd 명령어 class를 읽어주기 위해서
javac -cp ".;lib" 를 활용하게 된다. cp는 class path의 약자로서, 현재 디렉토리에서의
Okjavaprogram class를 읽어주기 위해서 . 을 사용, 이후 같은 디렉토리에 있지 않은
lib 폴더의 디렉토리에서 탐색을 위해서, 세미콜론 ;을 활용하여 탐색하고, 실행 할 수 있게 한다
cmd실행
실행하고자하는 자바파일이 있는 폴더위에서 폴더경로를 복사한후에
cmd창에서 cd+복사한주소입력후 엔터: cmd의 현재경로를 복사한 주소로 경로를지정
javac ( c는 compile로 추정) 으로 class파일로 컴파일
java 로 class파일을 실행하기
+내가만든 자바파일이 순전히 내가만든 프로그램이아니라 다른사람이 만든프로그램을 import하여
도구로 사용한거라면
컴파일할 java파일이 다른사람이 만든 java파일들을 import해서 도구로 사용한경우에 컴파일할경우
import하여 도구로사용한 java파일들도 같이 컴파일되서 class파일이 생긴다.
이때 도구로사용한 java파일들이 있는 패키지가 컴파일할 java파일이 있는 현재위치와 다를경우
--class-path 혹은 -cp + "폴더명" 으로 경로를 지정해주어서 찾게만든다. ( "." :현재위치를찾으라는뜻)
ex) -cp "ABC;." : ABC폴더와 현재폴더에서 찾으라는뜻)
+이때 arguments로 입력값을 따로 입력하게 했던 자바파일의경우 실행할때
cmd에서 java + 실행하고자하는 자바클래스파일명 + arguments로 입력하고자 했던 값을 순서대로 입력하면된다.
0. 내 PC 우클릭>속성>고급 시스템 설정>고급>환경 변수>(사용자 이름)에 대한 사용자 변수>path>jdk가 설치된 경로로 환경 변수 설정
1. cmd 실행
2. cd 주소 엔터로 java 파일이 있는 경로 지정
3. javac 파일명.java로 수동 컴파일 (javac는 java compile로 추정)
4. 내 것이 아닌 코드 (라이브러리, 패키지 등)가 있는 경우 자바 파일과 같은 경로에 존재해야 함.
ㄴ4-1. 자바 파일과 같은 경로에 사용한 라이브러리(혹은 패키지)가 없는 경우 javac -cp ".;폴더명" 파일명.java로 라이브러리 혹은 패키지의 경로를 지정해주어야 함(세미 콜론으로 구분, 마침표로 현재 경로도 포함)
5. 컴파일 하여 class 파일이 생성되었다면 java 파일명 으로 실행
ㄴ5-1. 자바 파일과 같은 경로에 사용한 라이브러리(혹은 패키지)가 없는 경우 마찬가지로 java -cp".;폴더명" 파일명 으로 실행
6. input 값을 입력하려면 java 파일명.java "args[0]에 들어갈 input값" "[1]에 들어갈 input 값"(띄어쓰기로 구분)
컴파일Compile!
① Comile ! .java 확장자가 붙은 소스코드를 .class 확장자가 붙은 실행파일로 바꾼다.
② Run ! 클래스 확장자가 붙은 파일을 실행한다.
③ Input ! 실행할 때 입력값을 주어 입력값마다 다르게 동작하는 출력값을 만든다.
어떻게 java라고 명령을 내렸을 때 이 명령이 실행되는 이유가 뭘까?
그것은 path 라고 불리는 환경변수 때문인데...
윈도우에서는 내 PC 우클릭>속성>고급 시스템 설정>고급>환경 변수>(사용자)에 대한 사용자 변수>path>jdk가 설치된 경로를 작성해 환경변수 설정이 가능하다.
낯설고 건드리면 안될것처럼 생겼던 명령 프롬프트에 직접 과감하게 클래스를 찾게 하고 그 안의 코드를 읽게 만들고... 적는 것에 따라 꼬박꼬박 잘 대답하는 cmd를 보니 굉장히 신기하다.
```bash
# Mac or Linux
$ echo $PATH
$ nano ~/.bash_profile
```
```bash
# Windows
$ cd # Then right-click to paste the thing copied
```
```bash
# Windows
$ javac <java-file>
# If error
$ javac -cp "." <java-file> # cp stands for classpath; "." means the current dir
$ java Program # Don't include .class at the end of "Program"
$ type Program.java # Windows equivalent of the Unix command "cat"
```
```bash
# package is now under /lib
$ javac -cp ".;lib" GoingHome.java # In Mac and Linux, use : instead of ;
$ java -cp "lib" GoingHome # Tells Java that GoingHome is under /lib
$ java -cp ".;lib" GoingHome # "lib"이라고만 하면 "lib" 안에서만 찾음 (같은 디렉토레에서 찾지 않음). 따라서 .이 필요
```
Exception: 자바에서의 error
Library
```bash
$ tree .
```
```bash
# After moving /org out of /lib
$ java GoingHome "507 Java Apt" 15.0
```
=====
윈도우 cmd에서 `tree` 작동 안 되는 분들:
환경변수에 C:\Windows\System32 추가하면 됩니다.
=====
error: unmappable character (0x80) 뜨면
`$ javac -encoding UTF-8 <java-file-name>` 이렇게 `-encoding UTF-8` 플래그를 넣으면 됩니다.
javac를 이용해서 우리가 보기 편한 소스코드들을 이용해서 만든 .java 확장자를 compile 해서 컴퓨터가 읽을 수 있는 .class 파일 확장자로 변환해줄 수 있다.
여러 class 파일들을 모아둔것을 package 라고 하고, 자바 라이브러리는 일반 폴더 구조에서 볼 수 있는 계층적 패키지 구조를 가지고 있다.
cmd에서 디렉토리를 변경하는 법:
cd C:\Users\Usersname\eclipse-workspace\Programing
.java파일을 class파일로 compile 하는법:
org 패키지 파일이 하위 디렉토리에 숨어있어서 오류가 난 경우 -cp 또는 -classpath를 이용하여 "."는 현재 디렉토리, ".;lib"는 현재 디렉토리의 lib 파일을 경로 지정 해줘서 compile 할 수 있다.
javac -cp ".;lib" OkGoingHome.java
javac를 입력하면
The operation couldn’t be completed. Unable to locate a Java Runtime that supports javac.
Please visit http://www.java.com for information on installing Java.
라는 문구가 뜹니다. 도와주세요..!
1. 자바확장자가 붙은 소스코드를 클래스 확장자가 붙은 실행파일로 바꾸는 것.
2. 클래스 확장자 파일을 실행(런)하는 것
3. 입력값을 주기.
-----
1) cmd > java > 환경변수(내컴퓨터 속성 > 고급설정 > 환경변수> 커맨드 명령어 입력시 설정되는 디렉토리 설정)
2) cd => change directory C:\Users\...
3) javac Program.java => to generate java.class file.
4) java -cp "." Program
cp=> class path
. =>현재 디렉토리
*javac 명령부터 안된 걸 보니 .. 일단 구경모드.
----
window는 구분자로 ;를 사용.
javec -cp ".;lib" OkjavaGoInHome.java
다른 사람이 만든 잘 정리된 프로그램을 라이브러리라고 함. 혼자서 개발 다 하지 않음. 어떤 라이브러리 있는지 살펴보는 것. 견문넓히는 일.
명령어로 앱실행시 입력값을 주면 어떤 점이 좋을까? 이클립스 같은 툴 사용하여 아규먼트 입력 받는 것보다 안에 내용만 바꿔서 실행하면 되기 때ㅜㅁㄴ에 입력값 주는 방법이 더 간편함.
강의 4 : 라이브러리란 각종 다른사람들이 만든 method들를 import하여 그 기능을 내 프로그램에서 사용할 수 있도록 빌려 쓸수있는 method 도서관이다.