4. 자바 실행 환경 : 즐거운 메모장 코딩 1편.
충격적인 소식이 하나 있다.
사실 환경변수까지 등록하지 않아도 자바 프로그램을 만들 수 있다.
하지만 알고 있기 바라는 생각과 메모장 코딩을 하기 위해 넣은 내용이다.
메모장은 윈도우 + r 키를 눌러 나오는 '실행'창에 notepad 라고 입력해도 나오고
"마우스 우클릭 -> 새로 만들기 -> 텍스트 문서" 를 선택해도 나오고
실행시키는 방법은 다양하다.
어쨌든 메모장(notepad)을 하나 실행시켜보자.
본격적으로 자바 프로그래밍 언어를 사용한 컴퓨터 프로그램을 만들어보자.
자, 그럼 다른 많은 교재에서 프로그래밍 공부의 시작을 알리는 프로그램.
티키신을 화나게 해서는 안된다는 그 프로그램.
Hello World 프로그램을 작성해보자.
나같은 경우 처음 자바를 배울때 이 내용을 통째로 외우라고 했다.
지금은 이해하기 어려우니 일단 외우고 넘어가면 나중에 다 이해하게 된다라고.
그 말이 참 싫었지만 당시 나는 아는게 없었으니 외울수밖에 없었지만
이 글을 접하는 분들은 이해를 시도할 기회를 드리고 싶은 마음에 정리해 보았다.
이 Hello World 프로그램 하나만 빠싹하게 이해한다면
적어도 자바 전체의 1/3 정도는 이해한게 아닌가 조심스레 생각해본다.
내용이 너무 길고 지루하게 느껴진다면 그 시절의 나처럼 눈에 익혀두고 그냥 넘어가도 좋다.
분명히 하기위해 이 글을 보고계신 어떤 분들에게 다시 한 번 말씀 드린다.
"백문이 불여일타. 여러번 쓰다보면 익숙해지고 자연스레 알게 되겠지. 이런게 있구나 하고 넘어가자." 한다면
그냥 넘어가셔도 좋습니다.
본격적으로 소스를 분석하기에 앞서 미리 알아두면 이해에 도움이 될 몇 가지를 살펴보자.
1. 참조 연산자 . (쩜, 닷)
참조 연산자는 마침표 . 를 사용한다.
예를들어 국회의사당의 주소지는 '서울특별시 영등포구 여의도동' 에 위치하고 있다.
이것을 참조 연산자를 사용해서 표현하면 다음과 같다.
서울특별시.영등포구.여의도동
참조 연산자라는게 어떤건지 확 감이 올거라 생각한다.
다음과 같은 폴더 구조를 가지고 있을 경우 참조 연산자를 사용해서 표현할 수 있다.
test.xxxelppa.package.subPackage
이 내용에 덧붙여 한가지 더 얘기를 하자면, 위의 예시에서 폴더 이름을 package 라고 했다.
이제부터 흔히 보던 폴더 개념을 package라고 생각해주면 좋겠다.
2. 문장의 마침표 ; (세미콜론)
컴퓨터는 융통성 없는 시키는것만 시키는대로 잘 하는 기계라고 했다.
문장도 어디서 끝나는지 정확하게 명시해줘야 원하는 결과를 받아볼 수 있다.
이 때 사용하는게 세미콜론 ; 이다.
이 세미콜론을 만나면 하나의 문장이 종료 되었음으로 인식한다.
3. 모든것을 뜻하는 *
*는 asterisk (애스터리스크, 아스타리스크, 아스타, 스타) 라고 부르는 것으로 '하위에 포함된 모든것'을 의미한다.
위의 첨부 이미지와 같은 경우를 보자.
만약 subPackage 라는 폴더 안에있는 모든 것을 사용하고 싶다면 다음과 같이 쓸 수 있다.
test.xxxelppa.package.subPackage.*
이제 정말로 예시로 작성한 프로그램을 한줄씩 살펴보자.
import java.lang.*;
사람이 사용하는 언어에도 정해진 규칙이 있고, 단어마다 고유의 정의된 의미와 뜻이 있는 것처럼
프로그래밍 언어에도 미리 약속되어있는 예약어 라는 것이 있다.
사람이 쓰는 말에서, 문장은 주어부와 술어부가 있어야 해.
문장에 주어는 꼭 있어야해.
한국어에 '과일'이라는 단어는 '나무를 가꾸어 얻는, 사람이 먹을 수 있는 열매' 를 뜻해.
프로그래밍 언어도 언어인 이상 똑같거나 비슷한 내용과 구조를 가지고 있다.
'이런 예약어를 만나면 그 다음에 오는 내용은 약속한대로 처리 해줘' 라고 정의 해둔 것이다.
이 import 도 미리 약속된 예약어 중 하나로, "다음에 오는 내용을 자유롭게 사용할 수 있도록 이 파일에 포함시켜줘" 라는 뜻이다.
다음에 오는 내용을 보면 java.lang.*; 라고 되어있다.
여기서 아는게 하나 등장했다. 바로 참조연산자 . 이다. 이제 우리는 저 문장을 다음과 같이 멋있게 이해할 수 있다.
뭔진 모르겠지만 java 폴더 안에 lang이라는 폴더가 있는데, 그 안에 있는 모든 것을 사용하기 위해 추가했구나.
그럼 이 java.lang이 뭘까?
자바를 설치할 때 마지막 과정을 기억하는 사람이 있을지 모르겠다.
설치 프로그램을 실행시켜 설치가 완료된 마지막 화면은 다음과 같았다.
여기서 Next Steps 를 클릭하면 브라우저가 하나 뜨면서 API 문서를 연결 해줬었다.
그 사이트가 바로 이곳이다.
사이트에서 오른쪽에 보이는 Java SE API 링크를 눌러보자.
그 전에 API라 함은 Application Programming Interface 의 줄임말로 프로그래밍 언어에서 제공하는 기능들을 설명한 문서이다.
쉽게 말해 백과사전이라 생각하면 좋다.
링크를 타고 들어가서 보면 Packages 라는 영역이 있고, 이곳을 찾아보면 java.lang 이라는 방금 보고온 단어가 있다.
java에서는 폴더를 다른말로 package 라고 부른다.
이 링크를 클릭해보자.
들어가보면 엄청나게 많은 영어들이 무언가를 열심히 설명하고 있다.
이 내용들이 모두 java.lang의 모든것들에 대한 설명이다.
그리고 이 많은 것들을 우리는 import java.lang.*;
이 한줄을 써줌으로 자유롭게 가져다 사용할 수 있는 환경을 갖추게 된 것이다.
이 줄에 대한 마지막 설명으로 package에 대해 언급해야겠다.
우리가 어린시절 레고 장난감을 정리할 때 그냥 큰 통에 몰아 담아두기도 하지만,
같은 색의 블럭끼리 혹은 같은 크기의 블럭끼리 분류해서 따로 담아 보관하기도 한다.
package도 이와 동일하다.
서로 비슷한, 관련있는 클래스들을 package 라는 단위로 묶어 관리하고 있다.
레고 블럭을 분류해서 보관하면 좋은 장점을 생각해보면 왜 이렇게 묶어 놨는지 금방 이해할 수 있다.
실제로 위에 첨부한 이미지의 Description 영역을 보면 package에 대한 설명으로,
어떠한 클래스들을 묶어놨는지 짐작할 수 있다.
그 예로 java.lang 이라는 package의 설명을 보면
"Provides classes that are fundamental to the design of the Java programming language."
"Java 프로그래밍 언어의 기본이 되는 클래스들을 제공합니다." 라고 되어있다.
API 문서를 보는 기본적인 방법은 다음에 다루겠다.
public class Exam_01 {
앞서 기억할지 모르겠지만, 자바의 프로그램은 클래스 단위로 작성 된다고 언급 했었다.
여기 그 익숙한 class 라는 예약어가 등장했다.
class 는 설계도 라고 했으니, 지금부터 설계도가 시작한다는 것을 의미한다.
아니. 방금 바로 위에서 API문서에 클래스들이 있다고 했는데, 그건 뭐고 이건 뭐지?
API에서 제공하는 것은 언어 자체에서 기본적으로 제공하는 클래스들이고, 지금부터 볼 내용을 사용자가 정의하는 클래스들 이다.
(사용자가 정의한다는 의미가 중요하다.)
그럼 앞에 있는 public 과 뒤에 있는 Exam_01 은 무엇이며 중괄호 { 는 무엇일까?
중괄호는 우리가 알고있는 괄호의 기능과 동일하게 범위를 나타낸다.
어떤 괄호를 사용하더라도 열고 닫는 쌍이 맞아야 프로그램이 오류가 나지 않는다.
그렇기 때문에 혹시 괄호를 열었다면 바로바로 닫아주고 그 안에 내용을 작성하는 습관을 가지자.
위와 같은 방식으로 작성하다보면 언젠가는 괄호 쌍이 맞지 않아 오류가 발생하는 안타까운 실수를 하기 쉽다.
그러니 아래와 같이 괄호를 열었으면 들여쓰기 레벨에 맞춰 바로바로 닫아주는 습관을 가지기를 권유한다.
우선 public에 대해 알아보자.
자바에서 public 이란 예약어는 접근 제한자이다.
이름에서도 느낌이 오듯 외부에서의 접근에 제한을 두겠다는 의미이다.
쉽게 생각해서 집 대문을 잠그는 이유가 무엇일까?
외부인으로부터 무자비한 접근을 막기 위함이다.
이 언어도 외부에서 들어와 이리저리 헤집어놓는것을 방지하기 위해 접근 제한자 라는 장치가 있는 것이다.
자바 언어에는 네가지의 접근 제한 레벨이 있으며 예약어는 세가지가 있다.
1. public
접근을 제한하지 않는다.
2. protected
같은 package에 존재하는 클래스 간 혹은 파생클래스에서만 접근이 가능하다.
3. default
아무 예약어도 쓰지 않는 경우로, 같은 package에 존재하는 경우에만 접근이 가능하다.
4. private
자기 자신의 클래스 내부에서만 접근이 가능하다.
3번의 경우가 있기 때문에, 접근 제한 레벨은 4등급 이지만 예약어는 세가지 이다.
보면 금방 알 수 있지만, 접근 가능 범위는 다음과 같은 순서를 갖는다.
public > protected > default > private
여기서는 public 이라는 예약어를 사용했기 때문에 어느곳에서든 접근이 가능한 클래스라는걸 의미한다.
또한 이 클래스라는 것에 대해 접근 제한자가 붙을때에는 약속된 것이 한가지 있다.
public 으로 선언된 클래스는 하나의 자바 소스 파일 안에서는 단 한번만 존재할 수 있으며,
public 으로 선언된 클래스의 이름은 자바 소스 파일의 이름과 대소문자까지 정확히 일치해야만 한다.
윷놀이에서 윷을 던져서 '걸'이 나오면 말을 세 칸 움직인다. 왜? 그렇게 약속 했으니까.
이것도 그렇게 약속했기 때문이라고 이해해야 한다.
그러면 자연스럽게 Exam_01 이 무엇인지 눈치가 빠르면 알 수 있다.
바로 이 설계도의 이름, 클래스의 이름이다.
클래스의 이름은 사용자가 정하기 나름인데, 클래스 명을 포함하여 자바에는 작명에 규칙이 몇가지 있다.
1. 기본적으로 예약어는 사용할 수 없다.
예약어라는것이 무엇인지 앞서 설명했기 때문에 왜 안되는지 이미 알고 있다.
2. 첫번째 문자는 (지금의 경우 E) 반드시 문자 혹은 언더바 (_) 혹은 달러 ($) 로 시작해야만 하며, 숫자로 시작할 수 없다.
public class 3rdTest { }
이런건 있을 수 없다. 굳이 숫자가 앞에 와야한다면
public class _3rdTest { } 또는 public class $3rdTest { } 이런 식으로 작성해야 한다.
3. 대소문자를 구분한다.
이거 중요하다. 자바는 대소문자를 구분하는 언어이기 때문에
Exam_01 과 exam_01은 서로 다른 것으로 인식한다.
예약어의 대소문자도 주의해서 사용해야 한다.
4. 딱히 길이 제한은 없지만 공백은 없어야 한다.
Exam_01 이라는 이름도 언더바를 사용해서 Exam과 01을 연결했다.
public class Exam 01 { } 이런것은 사용할 수 없다.
** 자바 클래스의 이름은 영문 대문자로 시작하는게 관례이다. 그래서 영문 대문자로 시작하는 사용자가 정의한 명칭을 보면 '아 이건 클래스겠구나' 라고 바로 알아볼 수 있다. 굳이 지키지 않아도 오류는 생기지 않지만, 우리들만의 약속 이다.
public static void main(String[] ar) {
다음 라인을 보니 이게 뭐지 싶다.
이 문장은 이해도 이해지만, 일단 대소문자까지 통째로 암기하고 있기를 추천한다.
퍼블릭 스태틱 보이드 메인 스트링 배열 에이알.
여기서 마음대로 바꿀 수 있는건 ar 저거 단 하나 뿐이다.
public은 앞서 본것 처럼 접근 제한 레벨을 나타낸 것이다.
public 이라고 썼기 때문에 이것이 감싸는 블럭은 모두가 접근해서 사용할 수 있음을 컴퓨터에게 알려주고 있다.
static 이라는 것도 예약어이다.
static에 대해서는 해야할 얘기가 많기 때문에 지금 다루기엔 너무 무겁다.
그래도 초면인데 통성명은 하는게 상도덕이니까(상업 활동은 아니지만) 간단히 소개를 해야겠다.
static을 사전에서 찾아보면 '고정된, 정적인' 이라는 뜻으로 나온다.
반대되는 말로 동적인 (dynamic, 다이나믹) 이라는 말이 있다. (dynamic은 예약어가 아니다.)
정적이라는게 무엇일까?
지금은 항상 그자리 그곳에 혼자 있는 녀석이다. 정도 이해하자.
혹시 기억을 해줄지 모르겠지만, 앞서 클래스와 객체의 관계에 대해서 설명을 했었다.
클래스는 설계도와 같은 것으로 스스로는 아무런 의미를 가질수 없다.
그 설계도를 바탕으로 구현된, 다시 말해 실체화 된 객체로 만들어져야 의미를 갖는다고 했었다.
static은 이렇게 클래스가 객체화 되었을 때 힘을 발휘한다.
바로 위에서 '항상 그자리 그곳에 혼자 있는 녀석' 이라 했는데, 클래스가 객체화 될 때 관여하는 관점에서 바라보면 다음과 같이 정리할 수 있다.
동일한 클래스로 생성된 객체들은 static으로 선언한 부분을 공유해서 사용한다.
즉, 동일한 클래스로 객체를 10개, 100개 만들어도 static 으로 선언된 부분은 한개만 존재한다는 것을 말한다.
그림으로 보면 다음과 같다.
이것으로 알 수 있는 사실은 public static void main(String[] ar) 이라고 한 부분의 블럭 { } 은
어찌 되었던지간에 Exam_01 클래스 내부에서 static 이라는 예약어(키워드)를 사용해서 선언한 (만든) 부분이기 때문에
Exam_01 클래스의 객체를 아무리 많이 생성해도 딱 한개만 존재한다는 것을 알 수 있다.
또한 더 나아가 Exam_01 클래스의 수많은 객체들이 모두 공유해서 사용할 것이라는 것도 알 수 있다.
static에 대해서 더 알고 싶다면 이전에 정리한 내용을 참고하길 바란다.
지금은 무엇인지 간단히 설명 했지만 다음에 더 자세히 설명할 기회가 있을 것이다.
혹시 사전을 폈다면 편김에 void의 뜻도 찾아보자.
'빈 공간, 하나도 없는' 이란 뜻이다.
(생활 속에서도 중요하지만 이름을 짓는것은 굉장히 신중해야 할 일이다.
예를 들어 핫소스를 담는 통에 이름이 마음에 안든다고 '참기름병' 이라고 써놨다고 해보자.
아는 사람은 '아, 이건 핫소스구나' 알 수 있지만 잘 모르는 사람은 '참기름이네?'하고 먹는 순간 재앙은 시작된다.
그렇기 때문에 변수, 메서드 또는 클래스 등의 이름을 지을때는 처음 보는 사람도 그게 무엇을 하는지 어느정도 예상할 수 있도록 이름을 잘 지어야 한다.
예약어도 그냥 아무 단어나 가져다 사용한것은 아니기 때문에 사전을 찾아보는건 이해하는데 도움이 많이 된다.)
무엇이 없다는 것일까?
이것에 대한 설명에 앞서 수학에 함수에 대해 언급해야겠다.
수학 시간에 함수에 대해 배울때 꼭 보는 유명한 그림이 있다.
수학시간엔 이 그림을 다음과 같이 설명한다.
어떠한 입력 x에 대해 y라는 결과를 도출하는 함수 f
그래서 y = f(x) = 2x 라고 정의했다고 하자.
이 때 f(2) 의 값은 4를 갖는다는걸 우리는 알고 있다.
자바에서의 함수(자바에서는 함수를 method 메서드라고 부른다. 이하 메서드) 도 똑같다.
(사실 함수와 메서드라는 명칭을 혼용해서는 안된다. 자바를 배웠다면 반드시 함수라고 하지 말고 메서드라고 하자.)
어떠한 입력을 주고, 그에 대한 결과를 받아보겠다는 것이다.
잘 이해가 안된다면 사람 사는것에 비유해보자.
친구A가 친구 B에게 학교를 마치고 집에 가는 길에 떡볶이를 사줬다고 하자.
(항상 그런건 아니지만) 그렇게 해주는데는 다 이유가 있다.
친해지고 싶어서. 마음에 드는 친구라. 혼자 먹기 싫어서. 혹은 그 친구가 가지고 있는 띠부띠부씰이 가지고 싶어서. 등등
아무리 사소한 것이라도 뭔가 원하고 바라는게 있기 때문에 친구A는 친구B에게 떡볶이라는 것을 입력한 것이다.
바라는게 없다면 뭣하러 떡볶이를 사줬겠는가. 내가 다 먹지.
자바에서도 메서드를 호출할 때 (사용하는 것을 호출한다고 한다) 뭔가 원하는 결과가 있으니까 부르는 것이다.
다시 void 얘기로 돌아와서, 이 void는 호출한 메서드의 실행 결과, 사용자가 원하는 어떠한 것의 형태이다.
즉, public static void main(String[] ar) { } 이 블럭이 다 실행되고 나면 어떠한 결과를 사용자에게 줄 것인가. 에 대한 답이다.
예를들어 편의점에 가서 '츄파츕스 하나 주세요' 라고 하면 우리는 '사탕'을 줄것이라 기대한다.
이것을 자바 메서드 관점에서 보면
'츄파춥스 하나 주세요' 라는 입력에 대해 '사탕'의 형태의 출력 결과를 받을것을 기대한다는 것과 같다.
그래서 public static void main(String[] ar) { } 의 블럭 내부 실행 결과 사용자가 기대하는 출력 결과는 void이다.
void는 '빈 공간, 하나도 없는' 이라고 했으니까
사용자는 이 블럭을 다 하고나서 뭔가 되돌려받길 원하지 않는다는것을 알 수 있다.
이것을 반환형 타입, 리턴값의 형태, 반환형 리턴값 타입. 등등의 말로 표현한다.
다음으로main 이다.
main은 자바 프로그램에서 정말 중요한 의미를 지닌다.
모든 자바 프로그램은 main에서 시작해서 main에서 끝난다고 할 수 있다.
즉, 자바 프로그램의 시작점이자 끝나는 종료지점이다.
외출을 하려면 대문을 열고 나가야 하지 않는가?
이 대문이 외출의 시작점 인것처럼 자바 프로그램은 main이 시작점이다.
이 main이 바로 메서드이고 우리는 이것을 너무나 당연하게도 main 메서드 라고 부른다.
자, 그럼 앞서 메서드는 입력과 출력이 있다고 했다.
출력에 대한 얘기는 void에 대해 얘기하면서 방금까지 신나게 했다.
이 입력에 대한 내용은 소괄호() 안에 명시하는게 규칙이다.
소괄호 안에 String[] ar 이라는 것이 보인다.
static과 마찬가지로 이것에 대해서 설명하기에 지금은 너무 무겁기 때문에, static 처럼 지금은 통성명만 하고 넘어가자.
String[] ar 을 통째로 main 메서드의 입력값. 다시 말해 y=f(x) 와 비교하면 매개변수 x 에 해당하는 내용이다.
그래서 마무리 정리를 하면,
public static void main(String[] ar) { } 은
모두가 접근할 수 있고(public), 항상 그자리에 있는(static), { } 내용을 실행하고 나서 아무것도 돌려주지 않는(void) main이라는 이름의 메서드이며, 입력 내용은 String[] ar 이라는 것이다.
System.out.println("Hello, World!");
자, 드디어 마지막 문장이다.
눈치가 빠르다면 이 문장을 보고 감이 딱 오는게 있을법도 하다.
1. System 이라는게 대문자로 시작했네? 클래스겠구나.
2. 마침표 (.) 로 연결 되어있네? System 이란 클래스 안에 out이라는게 연결 되어있고
이 out에는 println이라는게 연결 되어있구나.
3. main 메서드에 대해 얘기할 때 소괄호 ( ) 가 입력값이라고 했는데, "Hello, Wolrd" 이게 입력값인가?
그러면 println 은 메서드겠구나.
처음 봤는데 여기까지 생각했으면 천재가 아닐까.
그래. 백번 천번 양보해서 그렇다 치자. 그런데 저 System이란건 어디서 나온건데 갑자기?
지금까지 앞에서 본건 예약어이거나, 사람이 임의로 이름을 지어준 것들이었다.
그런데 main 이라는 프로그램의 시작부분안에 시작 하자마자 출처를 알 수 없는 System 이라는게 나타났다.
모를땐 사전을 찾아보자.
API 문서에서 java.lang 패키지를 선택해서 이동한 페이지에 다음과 같은 부분이 있다.
System 클래스는 몇가지 유용한 클래스 필드들과 메서드들을 포함하고 있습니다.
우선 이 System 이라는 클래스가 java.lang 안에 있다라는 사실이 중요하다.
왜냐하면 우리가 작성한 프로그램 제일 처음에 import java.lang.*; 라고 작성을 했기 때문에 System 이라는 클래스를 마음대로 사용할 수 있게 되었기 때문이다.
마저 더 살펴보면 System.out.println 이라고 참조 연산자로 서로 연결되어 있다.
링크가 걸려있는 System 을 선택해서 더욱 깊이 들어가보자.
이미지의 최상단에 보면 java.lang의 System 클래스에 대한 설명임을 알 수 있다.
그리고 Field Summary 영역에 out이라는 익숙한 단어가 설명되어 있다.
The "standard" output stream. 표준 출력 스트림.
이라고 설명하고 있다. 점점 재밌어진다. (나만?)
out을 눌러 보다 자세한 설명을 보러 가자.
"표준"출력 스트림. 이 스트림은 이미 열려있고 출력 데이터를 받아 들일 준비가되어 있다. 일반적으로 이 스트림은 호스트 환경 또는 사용자가 지정한 표시 출력 또는 다른 출력 대상에 해당합니다.
라고 설명 되어 있으며, 그 아래는 친절하게 사용 예시까지 보여주고 있다.
우리는 이 프로그램을 명령 프롬프트(cmd) 에서 실행 시킬 것이기 때문에, 이 문서에서 말하는 호스트 환경이 지금은 명령 프롬프트에 해당한다.
다시 돌아와서
System.out.println("Hello, World!"); 문장은 "Hello, World!" 라는 data를 호스트 환경의 출력 장치에 출력하라는 명령을 뜻한다.
지금까지 각 라인이 무엇을 뜻하는지에 대해 살펴 보았다. 그러면 이제 직접 실행을 해볼 차례이다.
위와 같은 경로에 class 이름과 대소문자까지 모두 정확하게 일치하는 .java 확장자를 가지는 소스파일을 저장하자.
이 .java 파일은 사람이 이해할 수 있는 언어로 작성된 소스 파일이기 때문에
이제부터 컴퓨터가 이해할 수 있도록 '컴파일' 과정을 (번역) 실행할 것이다.
(컴파일에 대해서는 바로 다음 포스팅에서 자세히 다룰 예정이다. 궁금하다면 먼저 다음 글을 보고 와도 좋다.)
그 명령어는 다음과 같다.
javac Exam_01.java
Exam_01.java 라는 파일을 컴파일 해서 컴퓨터가 (프로그램 실행의 주체인 JVM이) 이해할 수 있는 언어로 바꿔주세요.
라는 명령이다.
이 명령을 사용하기에 앞서 주의할 점은
명령을 내리는 경로가 소스파일이 저장된 경로와 동일해야 한다는 것이다.
정상적으로 컴파일(번역)이 완료되면 위와 같이 별다른 메시지 없이 종료된다.
그러면 소스파일을 저장했던 곳에 어떤 변화가 있는지 확인해보자.
.class 라는 내가 만든 .java 와 동일한 이름의 파일이 새로 생성 되었다.
이 .class 파일이 JVM에 의해 실행 될 컴퓨터가 이해하는 언어로 변환된 자바 프로그램 파일이다.
어? class 는 설계도라 객체화 해야 의미가 있는 거라면서. 객체에 대한 얘기는 1도 안했는데 이게 가능해?
가능하다. 왜냐하면 이 클래스 안에는 main 이라는 메서드가 있기 때문이다.
그럼 이제 이 파일을 실행해보자.
실행 할때는 확장자를 제외하고 java 라는 명령어를 사용하면 된다.
명령 프롬프트에 Hello, World! 이 문장을 출력하기 위해 기나긴 시간 고생 많으셨다.
지금 작성한 Hello World! 를 명령 프롬프트에 출력하는 예제를 완벽하게 이해했다면 앞으로의 내용은 그리 어렵지 않게 이해할 수 있다.
그만큼 많은 내용을 담고 있기 때문에 처음 접한다면 부대낄수밖에 없지만 알고있길 바라는 마음에 정리해봤다.
'프로그래밍 언어 > 나 혼자 떠드는 자바' 카테고리의 다른 글
나 혼자 떠드는 자바 : 자바 실행 환경 (조금 더 즐거운 통합 개발 환경) (0) | 2021.05.01 |
---|---|
나 혼자 떠드는 자바 : 자바 실행 환경 (즐거운 메모장 코딩 2편) (0) | 2021.05.01 |
나 혼자 떠드는 자바 : 자바 실행 환경 (자바 설치 방법) (0) | 2021.05.01 |
나 혼자 떠드는 자바 : 자료의 형태(data type) : 상수, 변수, 배열, (구조체), 클래스 그리고 사용자 정의 자료형 (0) | 2021.05.01 |
나 혼자 떠드는 자바 : 자바 언어가 가지는 특징 '배워본 언어가 없는데 어떻게 비교를 해' (0) | 2021.05.01 |