안녕하세요 :D
지난번 자바의 기초를 다지는 '0 시리즈' 중 ' 0 _3. 자바 가상 머신 (JVM:Java Virtual Machine) '게시글 에서
JVM 을 알아보면서 간략하게 자바 프로그램 실행 과정 을 알아보았던 시간이 있었는데요
이번 시간에는 1). 자바 프로그램의 개발단계 를 조금 더 자세히 알아보고
2). 메모장 과 명령 프롬포트 로 직접 코딩 을 해보며 자바의 개발단계 를 한번 더 이해하는 시간 이 되기로 해요!
❗주의사항: 이번 게시글은 반드시 이전의 1 _0. JDK 설치하기 & JDK 환경변수 설정하기 를 학습하고 오셔야 해요❗
+ 자바 프로그램 개발단계
자바 프로그램의 개발단계는 3단계 로 나누어 볼 수 있는데 지금부터 그림과 함께 알아보도록 해요!
1 단계: 소스 파일의 생성
먼저 에디터를 사용하여 소스 코드를 입력한 후 .java 확장자 로 저장해야 해요.
에디터는 메모장 과 같은 간단한 텍스트 에디터 를 사용할 수도 있고,
인텔리제이 나 이클립스 와 같은 통합 개발 환경(IDE) 을 사용할 수 도 있어요
> 통합 개발 환경(IDE: Integrated Development Environment) 이란?텍스트를 수정하여 소스 코드를 작성하는 에디터 와 컴파일하고 실행하는 디버거 와 같이소프트웨어 개발 프로세스를 지원하는 많은 도구들을 묶어서 제공하는 친구들 을 말해요. 프로그래밍계의 공구함 이라 할 수 있죠자바 IDE 로는 대표적으로 인텔리제이(IntelliJ IDEA) 와 이클립스(Eclipse) 가 있어요.
.txt 나 다른 확장자가 아닌 반드시 .java 확장자 여야 해용
2 단계: 컴파일
작성이 완료된 소스코드.java 파일을 자바 컴파일러 로 컴파일 해요.
자바 컴파일러가 소스코드.java 를 확장자가 .class 인 바이트 코드 로 변환해주죠.
확장자가 .class 인 파일을 클래스 파일 이라 해요.
컴파일 되는 이 시간을 '컴파일 타임'이라 불러요
3 단계: 클래스 적재와 바이트 코드 검증 및 실행
🌟 클래스 적재기(Class Loader):
자바 가상 머신(JVM) 속에 들어있는 '클래스 적재기(Class loader) '라는 친구가 작성한 프로그램 내의 클래스 파일 과 함께 실행하며 필요한 필수 클래스 파 일 들을 메모리에 올려둬요.
클래스 파일은 로컬 컴퓨터의 디스크 에서 가져올 수 도 있지만, 네트워크 를 통해서도 가져올 수 있어요(URLClassLoader )
🌟 바이트 코드 검증기(ByteCode Verifier)
가져오는 클래스들의 바이트 코드 들이 이상이 없는지, 자바 의 보안 규칙을 위배하지 않는지 검사 해요.
자바 는 네트워크를 통하여 전송된 자바 프로그램이 컴퓨터를 훼손시키는 것을 방지 하기 위해서
엄격한 보안 규칙 을 가지고 있어요.
🌟 실행
이제 JVM 이 바이트 코드 를 해석하며 프로그램을 실행해요.
저번 0 _3. 자바 가상 머신 (JVM:Java Virtual Machine) 게시글에서 JVM 이 바이트 코드를 해석하고 실행하는 방식엔
크게 3가지 가 있다고 알아봤었는데요, 간단히 읽어보며 한번 더 복습해 보기로 해요!
3가지 방식
아하, 이런 방식들이 있군요
1. 인터프리터 방식
나머지 두 가지 방법을 소개하기 이전에 기초적인 인터프리터 방식부터 알아보고 넘어가요!
인터프리터 방식이란 작성된 자바 바이트 코드 를 한 줄씩 읽고 해석 하는 방식이에요.
실행 시마다 코드를 한 줄씩 읽기 때문에 그냥 컴파일 언어보단 속도는 느리지만
소스코드가 수정될 때마다 다시 컴파일해주어야 하는 정적 컴파일 방식 (C , C++ )과 달리
인터프리터 언어 는 기계어 명령어들이 만들어지는 컴파일 과정을 거칠 필요가 없어서 수정이 쉽다는 장점 이 있어요!
이 장점 덕분에 인터프리터 언어는 수정이 빈번히 발생하는 용도의 프로그래밍 에서 많이 사용되죠.
자바뿐만 아니라 Python , Ruby 그리고 웹브라우저에서 동작하는 CSS , JavaScript 와 같은 친구들도 인터프리터 언어예요!
2. JIT 컴파일(Just-In-Time Compilation) 방식: Java HotSpot
기존 인터프리터 방식 언어들의 실행 속도 개선을 위해 사용하는 기법 으로 같은 코드를 매번 해석하는 대신 처음 실행 시 인터프리트(해석)를 하면서 자주 쓰이는 코드 를 메모리에 잠시 저장(*캐싱) 한 뒤,
이후 같은 함수가 여러 번 불릴 때 저장한 코드를 가져와 쓰는 방식 으로 인터프리터 방식의 느린 실행 속도를 개선할 수 있어요.
단점이 있다면, 초기 구동 시 실행 단계에서 시간과 메모리를 소요하기 때문에
정적 컴파일된 프로그램에 비해 실행 속도면에서 사알짝 손해를 보게 되는데,
프로그램의 실행 시간이 매우 짧게 걸릴 경우에는(ex "Hello World" 한 줄 출력 하기)
캐싱한 코드를 살펴보기도 전에 프로그램이 먼저 끝나는 경우 가 일어나기도 해요.
(근데 이 정도로 짧은 프로그램이라면 음.. 컴파일 방식이나 인터프리터 방식이나 차이가 거의 안 나긴 하는데,
언어의 기능을 평가하는 벤치마크에선 평판이 조금 깎이기도 해요)
또한, 실행시간에 저장한 코드를 동적으로 생성하여 실행 한다 는 특징 때문에
잠재적으로 상당한 보안 문제 를 가지고 있기도 하죠.
3. 하드웨어와 소프트웨어를 혼합 구현한 방식
자바 가상 머신(JVM) 을 하드웨어로 구현 하여 자바 바이트코드 자체를 기계어로 해석하고 실행하는 비메모리 칩 인
자바 프로세서(Java Processor) 와 같이 하드웨어와 소프트웨어를 혼합하여 구현 하는 방법이에요.
이론적으로는 100% 하드웨어 구현도 가능하나 비효율적 이죠.
아하, 이런 방식들이 있군요
컴파일 된 클래스 파일이 JVM에서 실행되는 시간을 '런 타임'이라 불러요
+ (충격!) 메모장 으로 코딩을 할 수 있다?! ★삐슝빠슝☆
자바 프로그램의 개발 단계 를 알아보았으니 이제 우리가 직접 자바 언어 로 프로그래밍을 해볼까요?!
참, 이번 단계는 반드시 1 _0. JDK 설치하기 & JDK 환경변수 설정하기 에서 알아보았던
JDK 설치와 환경변수 설정이 모두 완료 된 다음에 진행해야 해요!
- 소스 파일의 생성
이번에 우리가 시험 삼아 자바로 만들어 볼 프로그램은 간단한 문장을 출력 해주는 프로그램이에요.
자, 먼저 메모장을 이용해 소스코드 파일 을 작성해야겠죠?
>1. 메모장 을 여시고 아래와 같은 소스코드 를 입력해주세요.
❗❗(대·소문자 구분 확실히 해야 해요)❗❗
public class Hello{
public static void main(String args[]){
System.out.println(" 쌍따옴표 사이에 원하는 문장을 입력하세요! ");
}
}
파란 색으로 밑줄 친 부분에 원하시는 문장을 적어주세요!
단 문장을 입력하실 때 몇 가지 특수문자 들( ' , " , \ 등)은 문자 앞에 ' \ '를 붙여주는 조금 특별한 표기법 을 사용하셔야 해요!
특수문자 표기법 접기
자주 사용하는 특수문자 친구들의 표기법을 알아볼게요!
이러한 표기 방식을 일컬어 이스케이프 시퀀스(Escape Sequence) 라 하는데 이스케이프 시퀀스에는
정말 많은 친구들이 존재합니당 일단 다음 네 가지 친구들만 살펴보구
나머지 친구들의 표기법은 이후 '출력(Output)' 부분에서 인사하도록해요
특수문자 표기법
보이는 결과(설명)
\'
' (작은 따옴표)
\"
" (큰 따옴표)
\n
(줄 바꿈)
\\
\ (역슬래시)
접기
>2. 소스코드 작성을 완료하셨으면 다른 이름으로 저장 > 모든파일(*.*) > ' Hello .java ' 을 통해 파일 이름을 저장해주세요!
⚠(파일을 다른 곳에 저장해도 괜찮지만, '바탕화면 '에 잠시 저장해두시길 강권할게요!
나중에 경로를 찾으실 때 더욱 편하실 거예요)⚠
대소문자 주의 하셔야해요! 아, 참 파일의 저장경로를 기억해두세요! (저는 바탕화면에 저장 했어요)
확장자가 안 보일 때 이제 잘 보여요
파일의 확장자가 보이지 않는 분들을 위한 확장자를 보이게 하는 방법이에요!
이 방법의 적용 이후엔 원활한 파일 확장자의 확인과 수정을 하실 수 있으실 거예요.
단, 확장자는 파일의 정체성을 알려주는 이름표라 정말로 아무렇게 건들다간 파일이 아야 할 수도 있으니 조심해야 해요.
그냥 '확인'부터 누르시면 안돼요!
이제 잘 보여요
- 컴파일
>1. 명령 프롬프트 창을 소환하세요.
검정색 친구가 명령 프롬프트(CMD)예요
>2. '명령 프롬프트 '에서 'cd
' 명령어 를 통하여 'Hello .java' 소스파일 이 있는 곳 으로 이동해주세요!
cd
cd(C hanage D irectory): 원하는 폴더 경로(디렉터리) 로 이동하게 해주는 명령어에요
사용 방법
용도
사용 예시
cd "폴더의 전체 경로"
'폴더 경로' 로 이동합니다.
cd C:\Program Files
cd "폴더 이름"
해당 폴더 내의 '폴더 이름' 폴더로 이동합니다.
cd Desktop
cd
..
'상위 폴더' 로 이동합니다.
cd
..
아, 참 명령어를 사용하실 때 명령어(cd) 와 '경로' 사이엔 스페이스바로 한 칸을 꼭 띄어주셔야해요 . 띄우지 않고 이어서 적는다면 프롬포트 친구가 명령어를 알아들을 수 없어요 :C ex). cd Desktop (x ) -> cd Desktop (o )
하늘색 글씨는 저번 시간에 만났던 %환경변수%와 같이 컴퓨터 내에 특정 경로를 가리켜주는 친구예요
>3. 'javac
' 명령어를 통해 Hello.java 소스코드 파일 을 클래스 파일 로 컴파일 해주세요!
javac 명령어를 통해 바이트 코드로 컴파일된 Hello.class 파일이 생성되었어요!
에러가 발생해요ㅠㅠ 접기
클릭하면 크게 볼 수 있어요!
접기
- 실행
명령 프롬포트에서 'java
' 명령어를 통해 JVM 으로 변환된 클래스 파일을 실행 해주세요!
java
자바 가상머신을 실행시켜 자바 프로그램을 실행시켜주는 명령어예요
사용 방법
용도
사용 예시
java "클래스 파일의 이름"
"클래스 파일"을 jvm으로 실행합니다.
"클래스 파일. class"가 아닌 "클래스 파일의
이름"만 입력해야 함에 주의하세요
java Hello
java "소스파일 .java"
"소스파일.java"을 컴파일하여 jvm으로 실행합니다. 단, class파일은 생성되지 않습니다.
java Hello.java
java
-cp '클래스 파일 위치'
"클래스 파일의 이름"
'클래스 파일 위치'에서
"클래스 파일의 이름"의 클래스를 jvm으로 실행합니다.
정확한 위치 지정을 통해 원하는 클래스를
불러와 실행하게 할 수 있죠.
java -cp C:\ Hello
이번 단계는 이전 단계에서 'javac'명령어를 통하여 변환된 클래스 파일이 제대로 작동을 하는지 확인하는 작업이기 때문에
'java Hello.java'를 통해 소스파일을 직접적으로 실행하는 것이 아닌 'java Hello'를 통해 클래스 파일을 실행시킬 거예요!
'java Hello.class'라고 입력하시면 절대로 안돼요!! 'java Hello'와 같이 꼭 클래스 이름만 입력하셔야해요!
에러가 발생해요ㅠㅠ 접기
간혹 가다 클래스 파일이 현재 위치에 잘 만들어졌는데도 불구하고 클래스 파일을 찾거나 불러올 수 없다고 하는
오류가 발생하는 경우도 있을 거예요.
이전 게시물인 '1 _0. 자바 JDK 설치하기 & JDK 환경변수 설정하기 '에서 설정했던 시스템 환경 변수 중
'CLASSPATH '가 제대로 설정되지 않아 자바 가 현재 위치에서는 클래스 파일을 검색하지 못해 없다고 했을 가능성이 커요.
지난번 게시물을 참고하여 CLASSPATH를 재설정해주면 오류가 풀리고 정상적으로 실행이 될거예용
물론 지금 이 상태에서도 java -cp '클래스 파일의 위치' "클래스 이름"
을 통하여 자바 에게 직 접적으로 위치를 알려주어 실행하게 할 수 도 있어요! (하지만, 실행 이후엔 나중을 위해서라도 꼭 'CLASSPATH' 환경 변수를 고쳐주셔야 해요.)
실행을 마치고 꼭 'CLASSPATH"의 변수 값을 수정해주셔야해요!
접기
이번 시간엔 자바 프로그램의 개발 과정(소스코드 작성 -> 컴파일 -> jvm으로 실행) 을 알아보고,
이 과정을 메모장과 명령 프롬프트 를 통해 한 과정, 한 과정씩 직접 해보는 시간을 가졌는데요
이러한 프로그램 개발을 위해 따로따로 했던 작업들을 효율적으로 한 곳에서 할 수 있도록 묶어둔 도구 모음 프로그램 을 일컬어 통합 개발 환경(IDE: Integrated Development Environment) 이라고 해요.
다음 시간에는 통합 개발 환경의 종류 들을 알아보며 그중 하나인 JetBrains사의 IntelliJ IDEA 를 설치하고
간단한 출력 프로그램을 작성해보는 시간을 가지도록 해요😺
수고하셨습니다⭐️
이미지에 사용된 아이콘 출처
접기
+자바 프로그램 실행단계
1단계: 소스파일 생성
- IntelliJ IDEA logo:
https://confluence.jetbrains.com/download/attachments/10818/IDEADEV?version=6&modificationDate=1449747979000&api=v2
- Eclipse logo:
https://www.eclipse.org/downloads/assets/public/images/logo-eclipse.png
- 고양이가 코딩하는 사진 :
고양이 카페에서 직접 촬영한 거시에오. 해당 사진은 러시안 블루 친구가 코드 리뷰를 해주는 장면인데,
보통 츄르 1 ~ 2개에 다들 해주는 편이에요.
- 폴라로이드 사진 프레임:
Freepik | Discover the best free Technology graphic resources, 393,864 results
We have 393,864 resources for you. Download free vectors, photos and PSD files on Freepik. Graphic resources for personal and commercial use.
www.freepik.com
- java 확장자 파일 아이콘:
Java File Icon by Ravindra Kalkani
Java File Icon of Colored Outline style - Available in SVG, PNG, EPS, AI & Icon fonts
Download Java File Icon in Colored Outline style. Free & Premium icons available in ✯SVG ✯PNG ✯EPS ✯ICS and ✯Icon fonts. Download Now!
iconscout.com
2단계: 컴파일
-class확장자 파일 아이콘:
Class Icon by Ravindra Kalkani on Iconscout
Class Icon of Colored Outline style - Available in SVG, PNG, EPS, AI & Icon fonts
Download Class Icon in Colored Outline style. Free & Premium icons available in ✯SVG ✯PNG ✯EPS ✯ICS and ✯Icon fonts. Download Now!
iconscout.com
-톱니바퀴(gear) 아이콘:
나머지 중복되는 아이콘의 출처는 위와 동일
3 단계: 클래스 적재와 바이트 코드 검증 및 실행
윈도우:
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
애플:
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
리눅스:
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
Class 파일:
Class Icon by Ravindra Kalkani
Class Icon of Colored Outline style - Available in SVG, PNG, EPS, AI & Icon fonts
Download Class Icon in Colored Outline style. Free & Premium icons available in ✯SVG ✯PNG ✯EPS ✯ICS and ✯Icon fonts. Download Now!
iconscout.com
Verification Icon(검증기):
Icons made by Freepik from www.flaticon.com is licensed by CC 3.0 BY
Wall_E 이미지:
https://www.iconfinder.com/icons/23180/pixar_robot_wall-e_walle_icon
Pixar, robot, wall-e, walle icon - Free download
Download this pixar, robot, wall-e, walle icon in isometric style from the Avatars category. Available in PNG format. No signup required.
www.iconfinder.com
나머지 중복되는 아이콘의 출처는 위와 동일
+메모장으로 코딩하기
확장자가 안 보일 때
윈도우 로고(Windows logo):
손가락 스크롤(Scroll Down):
나머지 중복되는 아이콘의 출처는 위와 동일
접기
도움을 받은 곳: enow님의 PLAY IT 블로그
마지막 수정 21.01.25