바이트 코드 파일과 자바 가상 기계
- 바이트 코드 파일 = class 파일 (*.class)
- 자바 가상 기계 = JVM (Java Virtual Machine)
<JVM 구조 설명>
- 소스코드는 바이트코드로 컴파일되어 생성
- 코드 검증
- JVM에 의해 해석되어 실행(interpreted)
- 또는 JIT-compiled로 직접 기계어 코드로 변환 실행
- JRE(Java Runtime Environment)에 API와 JVM이 함께 만들어짐
<특징>
- 자바는 jvm이라는 가상머신을 통해서 어느 OS에서든지 다 돌아간다
- 한번작성하면 어느 os에서도 돌아가는 구조를 갖는다
- jvm이 실행을 시켜준다
<JVM 원리>
- C:\Dev211\Java\jdk_1.8.0_291\jre\lib에 들어가면 .jar 파일이 들어있다
- C:\Dev211\Java\jre_1.8.0_291\bin 에 들어가면 .dll파일이 들어있다
- .class 파일들을 JVM이 알아서 환경에 맞게 램에 만들어줌(램의 중요성), 우리는 컴파일만 해주면 됨
- ms win 의미 : microsoft window를 의미하고 내 컴퓨터 os 시스템에 맞게 들어있는 것임
- 만약 환경이 Mac으로 바뀌면 파일도 그에 맞는 이름으로 설정됨
- 이렇게 만들어주는 것이 바로 JVM이다.
- 실행이란, 하드디스크에 있는 파일을 읽어서 램에 세팅하는것
- run은 한마디로 우리가 데이터를 메모리에 세팅해줘~ 라고 명령하는 것
프로젝트 생성부터 실행까지
1. 프로젝트 생성
File - New - Java Project
Project name : Chapter01_JavaStart (대단원명)
2. 패키지 생성
src 우클릭 - New - Package
source forder : C:\Dev211\Studyjava\Chapter01_JavaStart\src
name : ch01_3_java_process
** 패키지 사용하는 이유 : 소스코드랑 이름이 같을 경우 부딪혀서 에러 발생
비유 : 삼성 엔진, 기아 엔진 등등 다 엔진이 들어감,, 그래서 패키지명을 식별가능하고 안겹치도록 사용함
사용 예시 : 주민등록번호나 Url 도메인 등 (유일키)
** 패키지명 = 폴더명
패키지 안에 클래스 파일들이 들어있음을 알려준다
3. 클래스 생성
패키지 우클릭 - New - class
name : Hello
main문 자동 생성 옵션 체크 (필자는 연습을 위해 미체크)
package ch01_3_java_process;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
4. 바이트 코드 실행
run 버튼 클릭 or Ctrl+F11
명령 라인(cmd 창)에서 컴파일하고 실행하기
1. 이클립스 사용하지않고 파일 소스코드 생성 및 실행하기
- 자바소스 만들기
메모장켜서 소스코드 작성
저장 경로 : C:\Dev211\Studyjava
확장자 : .java 로 저장
- 컴파일
cmd 창에서 C:\Dev211\Studyjava 로 들어가기 (cd 명령어)
javac HelloWorldApp.java
- 파일 생성 확인
HelloWorldApp.class 생김
- 실행
java HelloWorldApp (뒤에 .java 쓰는거 아님)
2. 컴파일 원리 알아보기 (이클립스를 통해)
C:\Dev211\Studyjava\Chapter01_JavaStart\bin\ch01_3_java_process 에서 클래스 파일 삭제
내용 변경 후 다시 저장
클래스 파일이 다시 생성되는 것을 확인할 수 있음
-> 이클립스는 저장하며 컴파일까지 같이 진행됨을 알 수 있음
3. 컴파일 원리 알아보기 (명령 프롬프트를 통해)
- src 폴더 내에 .java가 들어있고, bin 폴더 내에 .class가 들어있음
- 이클립스 종료 후 bin 폴더 내용 모두 제거
- 폴더 이동 후 컴파일해서 바이트 코드 파일을 bin 폴더에 생성
- 바이트 코드 파일 실행 ( .class 쓰지않도록 주의! )
4. javac ~ 는 실행을 했는데 java ~ 는 에러난 경우
- 우선 helloworldApp 파일은 패키지 밖에 있기 때문에 실행이 잘됨
- 그러나 Hello.java 파일은 패키지에 들어있기때문에 풀네임을 써야한다
- 클래스를 못찾고있어서 에러가 발생한것이다
- java ch01_3_java_process.Hello 라고 쓰면 해결됨
5. tree /f /a
javac -d bin src\ch01_3_java_process\Hello.java 한 후에 tree /f /a 입력하면 bin 폴더 안에 .class 파일이 생긴다
프로그램 소스 분석
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, Java");
}
}
1. 클래스
- 대문자로 시작
- 카멜표기법 : 대문자, 소문자 섞어서 작성 (오르락내리락 마치 낙타 등처럼 생김)
-> 오히려 알아보기 쉬움
2. main 메소드
- main문은 어떤 언어에서든지 필수
- 없으면 실행 자체가 안됨
- 일반 메소드랑 다름, main 메소드가 시작
- main 메소드가 들어있는 클래스는 public 꼭 써줘야함
3. println 문
- Ctrl + println에 커서대면 - Open Declaraion 클릭 - 상세보기 가능
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
- println 문도 사실 이미 저장되어있는 메소드임을 알 수 있음
- println 이라는 구현체 (bulid), 함수로 구현한 것을 합쳐줌
- 비유 : 자판기에 동전 넣었을때 콜라가 나오는 이유? 알아야할 필요없음
카카오톡 로그인하는 법? 알 필요없음. 그냥 가져다쓰면 됨 -> API 개념
마찬가지로 println 도 우리가 가져다쓰는 구현체일뿐
- System.out 안에 들어있는 소스에 불과함
4. 구조
- 클래스 내부에서 메소드를 선언한다
- 1001 이라는 기계어를 "Hello, Java"와 함께 통합해서 컴퓨터로 전달
- 그러면 화면에 출력이 됨
주석 기능 및 사용하는 이유
1. 기능 : 컴파일 할때 안읽고 넘어감
2. 주석을 써야하는 이유 :
- 남을 위해 : 구현한 소스를 주석을 통해 정리를 해놓아야 다른 사람이 이해하기 쉬움 (개발은 협업이 중요)
- 나를 위해 : 내가 작성한 코드지만 시간이 지나면 이해가 안됨 -> 주석을 통해 이해할 수 있음
- 큰 프로젝트를 진행할때 보통 주석을 다는 방법에 대한 규칙까지도 지정되어있음
- 프로젝트 제작 이유, 코드 설명 등 기록
주석의 종류 및 사용 예시
1. 한줄주석
- // 직접 입력
- 작성 완료된 코드에 커서두고 Ctrl + /
- 블록 지정 후 Ctrl + /
- 주석 제거도 마찬가지
2. 여러줄주석
- /* 쓰고 엔터치고 작성
- 사용 예시
1) 작성자정보나타내기
/**********************************************
* 작성자: OOO
* 연락처 : 010-1234-5678
* 작성일: 2021.07.20
*
**********************************************/
2) 코드 설명
/* 이 클래스는 어떤 클래스 입니다.
*
*/
3) 저작권 표시
/*
* @author unascibed
*/
3. 주석 색깔
- * 인 경우 : 초록색
- ** 인 경우 : 파랑색
제공 소스 파일 이용하기
- 파일을 import 로 불러오기
21.07.19 ~ 21.07.20
'👨💻 2. 웹개발_Back end > 2-1 Java' 카테고리의 다른 글
[JAVA] 02-3 타입변환 (0) | 2021.07.21 |
---|---|
[JAVA] 02-2 기본 타입 (0) | 2021.07.21 |
[JAVA] 02-1 변수 (0) | 2021.07.20 |
[JAVA] 01-2 이클립스 개발 환경 구축 (0) | 2021.07.20 |
[JAVA] 01-1 프로그래밍 언어와 자바 (명령어 및 단축키 정리) (0) | 2021.07.20 |
댓글