PATH에 대해서
- 컴퓨터 내에서 나의 경로..?ㅜ
컴파일 과정에서 어떤 일이 일어나는지.
- 자바파일을 통해서 클래스파일이 만들어지고 임포트된 자바파일이 존재하고 같은 카테고리에 존재한다면 같이 컴파일 되지만 다른 카테고리에 존재한다면 수동적으로 직접 경로를 입력해서 컴파일 시켜야함
라이브러리란
- 이미 만들어놓은 자바파일들을 의미하며 다른 사람들과 공유되어 자유롭게 쓸 수있는 도서관을 생각하면 된다.
명령어로 앱을 실행할 때 입력값을 주면 어떤것이 좋은지
- 사용자마다 입력값을 달리하여 각기 사용자에 맞는 출력값을 낼 수 있다.
이클립스에서는 버튼하나로 컴파일과 런이 모두 실행되니까 어떤식으로 이뤄지는지 감이 덜왔었다. 이렇게 명령어를 직접입력해서 class파일을 생성시키고 java파일을 동작시키는 과정을 직관적으로 보니까 실행과정이 어떻게 이루어지는지 이해를 할 수 있었다. 그리고 import문으로 참조된 파일들도 컴파일시키면 같이 class파일이 생성되는것이 신기했다.
다른사람이 사용할 수 있도록 잘 정리된 프로그램들을 라이브러리라고한다. 우리는 이를 이용해서 많은 코딩을 하게될것이고 매우 중요하다.
커맨드창에서 명령어로 인자값을 전달하는것이 이클립스에서 여러과정을 거치는 것보다 훨씬 간편하다.
컴파일하려는 코드가 경로가 다를 경우
-cp를 한 다음 ".(이 점은 현재 디렉토리를 칭한다. 이를 하지 않으면 자바는 다른 경로만 찾기 때문에 컴파일이 안 된다.)에다가 ;을 붙인 다음 그 다른 경로를 붙이면 된다.
ex) -cp ".lib"
혹은 다른 것도 있으면 another과 경로를 같이 붙이면 된다.
원래 cmd, terminal 과 같은 명령프롬포트 에서는 특정한 파일을 실행시키기 위해서는 일일히, 그 경로를 cd 명령어를 통해서 찾아 들어가야만 했었다.
하지만 Path 환경변수를 이용한다면 쉽게 해당파일에 한번에 접근이 가능하다. 전체경로를 미리 환경변수 안에 등록해놓으면, 내 현재 위치와 상관없이 그 경로에 있는 파일들을 실행시킬 수 있는 장점이 있다.
(사실 왜 아직 이게 장점이지? 라는 생각 안써봐서..개발을 해보면..알겠지..)
8/26 강의 1,2 완료
2. cmd에 java또는 javac를 입력하면 위치가 나오고 설명서가 나온다. 이 이유는 Path 때문인데 내PC에서 속성에 들어가 고급설정에서 환경변수를 찾아 Path를 확인해보면 java의 경로가 입력되어 있끼 때문이다. 따라서 java의 위치가 나오지 않는다면 환경변수 Path에 java의 경로가 입력되어 있는지 알아보자.(이 Path를 이용하여 언제 어디서든 java를 이용할 수 있다.)
2. cmd에서 java 입력시에 바로 위치가 나온다. 만약 위치가 나오지않는다면 시스템 환경 변수에서 path에 java가 들어있는지 확인하자.(만약 없다면 java 경로를 입력시켜주자) 이 작업은 이후 이클립스가 없어도 java를 cmd에서 작업 할 수 있도록 자바를 실행시켜주는 경로를 뚫는 일이다.
도움이 됐다니 다행이네요 ㅎ
추가로 얘기드리면, 코딩한 텍스트 중 한글 등 영어를 제외한 외국어가 하나라도 이렇게 있으면 오류가 나옵니다.
이런 식으로 귀찮게 하고 싶지 않으면, 그냥 주석이나 출력 등 평소에 한글로 쓰는 부분도 영어로 쓰면 얼추 해결이 될 수 있어요..ㅎ(영어 공부한다는 마음으로...)
javac 입력하려섯 클래스 파일로 컴파일 되셨다면 환경변수는 문제 없으신 것 같네요.
에러 설명대로 main 클래스를 선언하지 않으셔서 그러신 것 같아요. 실행시 스택에 메인함수가 올라가서 실행이 되거든요. static void main(String[] args){} 부분이 있는 지 확인해 보세요
ReadFile.java:17: error: unmappable character for encoding MS949 ArrayList<AmountVO> amountArr[] = new ArrayList[3]; //1. naver, 2. ?넗?뒪 異쒓툑 3. ?넗?뒪 ?넚湲?
이런 식으로 나오는 경우엔
MS949로 인코딩해서 에러가 발생하는 겁니다.
UTF-8로 인코딩하도록 직접 지정해야 되네요.
(코딩한 내용 안에 영문이 아닌 다른 문자가 있으면 MS949방식은 읽을 수 없습니다)
org.opentutorials.iot 패키지를 직접 가져오면서 궁금했던 점이 swing과 같은 라이브러리는 어떻게 가져오는건지였어요. 방금 10분동안 혼자서 한참 파일 열어보면서 찾아다니다가 떠오른 생각이 java를 실행시키면 이미 jdk 폴더 안에 있는 라이브러리들은 자동으로 가져올 수 있는 거 아닐까 해서, 일반성을 잃지 않고 패러미터를 사용한 인자들만 입력해서 동작시켜봤는데 정상적으로 돌아가네요! 어떻게 명령하지도 않았는데 기본적으로 내장된 라이브러리가 동작할까요?
웃긴 점이, eclipse에서 pakage explorer-JRE Library에 있는 파일들을 보면
C:\Program Files\Java\jdk-13.0.1\jmods인데 우리가 환경변수로 컴퓨터가 찾을 수 있도록 등록한 path는 jdk-13.0.1까지만 디렉토리가 같은 bin 파일이에요. 즉, 컴퓨터에서 라이브러리를 직접 찾아서 연 게 아니란 말이죠. 우리가 같은 디렉토리에 있던 org파일을 연 것과 동작하는 방식이 달라요. java를 실행시키니 java에서 자동으로 라이브러리를 가지고 왔다는 말로 밖엔 설명이 안 되네요. 하긴, jdk-13.0.1 폴더에 들어 있던 파일들은 이미 다 세팅되어 있던거니 java에서도 미리 입력된 위치에 따라 라이브러리 파일을 들고 왔겠죠.
또한, jmods 폴더는 org폴더와 다르게 다른 디렉토리 안에 넣어놔도 프로그램이 작동하네요. 저는 이게 왜 이렇게 작동하는지 잘 모르겠네요.
ps. 위에 실험하면서 실수로 lib파일을 다른 디렉토리 안에 넣어놨어요. 그러니까 프롬프트에서 jdk-13.0.1안에 있는 lib 안에 있는 jvm.cfg를 열 수 없습니다. 라고 떠요. jvm. 우리가 저번 시간에 배웠던 Java Virtual Machine!! java에서 가상 머신을 실행시켜 프로그램을 동작시킨다고 했던가요? java를 직접 실행시켜도 java에서 가상 머신을 동작시키는 건 변함없네요. 그런데 이것으로 궁금해지는게 lib, 즉 library인데 eclipse에서 JRE Library를 열어보면 jmods에 있는 파일들이 보이는 이유는 뭘까요?
근데 신기한 사실을 발견했어요. 1부터 10,000,000까지 차례대로 출력하는 프로그램을 만들었었는데 통합 개발 환경에서 실행했을 때와 명령 프롬프트에서 실행했을 때 속도 차이가 나요. 통합 개발 환경에서보다 직접 컴퓨터에서 자바를 실행해 프로그램을 동작시켰을 때 실행 속도가 현저히 떨어집니다. 둘 다 저소음 모드 상태에서 통합 실행 환경의 경우에 1부터 1천만까지 출력하는데 1분 16초 19가 걸린 반면, 컴퓨터에서 자바를 실행해 프로그램을 동작시켰을 땐 37분 28초 72가 나옵니다. 왜 이런 결과가 나오는지 굉장히 궁금하네요.
저번 수업 때, 이클립스에서 패러미터를 사용해 값을 입력하는 이유가 궁금했는데 오늘에서야 알게되었어요. 이클립스 없이 자바를 실행할 때, 굳이 입력 라이브러리를 포함시키지 않고도 값을 입력할 수 있기 때문이군요. 이렇게 하면 디렉토리에 관한 신경도 덜 쓸 수 있겠지요. 사용자야 편하겠지만 우리는 매번 실행할 때마다 입력해주는 게 불편하다는 말도 이제서야 공감이 가요. 우리가 원하는 건 프로그램이 올바르게 동작하는지 실행해보려는 거니까요. 굳이 안내 테스트 입력 받지 않고도, 프로그램이 정상적으로 작동할 때에, 미리 자바가 계산할 수 있는 값들을 넣어 테스트 해보는게 더 편하네요. 다만 디버깅, 컴파일을 알아서 해주는 기능, 소스코드 확인 등등을 생각해보면 통합개발환경이 편하고요. 이클립스를 사용하지 않고 직접 앱을 실행할 때의 좋은 점은 아무래도 프로그램 하나를 덜 실행하는 점과 특정 입력 값으로 테스트할 때 편한 점이네요.
java.lang.UnsupportedClassVersionError 클래스 파일 실행시 에러발생하였습니다. 해당 링크대로
클래스 파일을 다시 컴파일 하니 해결되었네요.^^ 알음알음 알아가는 재미가 쏠쏠 합니다.~~~~ https://www.mkyong.com......or/
라이브러리가 일종의 오픈소스라고 생각하면 되는 건가요? 라이브러리 검색을 어떻게 하는게 좋을지.... 또하나의 숙제인거 같습니다.