본문 바로가기
국비학원 전 강의 필사/점프 투 자바

#01-03 안녕 세상! - <점프 투 자바>

by kkooHan 2022. 8. 17.

 

출처 : https://wikidocs.net/book/31

 

 

점프 투 자바

**초보 프로그래머를 위한 자바 입문서** 이 책은 문법위주의 지식보다는 이해중심의 지식을 전달하는 것을 주 목적으로 한다. 예를 들어 자바에서 잘 파악하기 힘든 개념 ...

wikidocs.net

 

 

 

 

 

 

필사 :

 

Hello World!

 

1. 딜레마

2. JDK 설치

3. 자바소스와 컴파일

4. 따라 해 보기

5. 인텔리제이 설치

6. main 메소드

 

 

 

딜레마

모든 언어에서 첫 번째 예제로 다루는 "Hello World"를 출력하는 프로그램을 만들어 보자.

자바는 다른 언어와 달리 "Hello World" 프로그램만 제대로 공부하면

자바 언어의 절반 이상을 익히는 것과 다름 없다고 한다.

왜냐하면 "Hello World"를 출력하는 프로그램을 작성하려면

JDK 설치, IDE 설치, 클래스, 함수, public에 대한 개념, static에 대한 개념,

그리고 마지막 실행까지... 이 모든 것들을 알아야 하기 때문이다.

 

자바가 처음에 어렵게 느껴지는 이유는

이렇게 가장 간단한 예제를 실행하려고 해도 알아야 할 것이,

또는 모르고 일단 지나쳐야 할 것이 너무나도 많기 때문일 것이다.

자바를 알려주어야 하는 입장에서는

"Hello World" 프로그램에서부터 딜레마에 빠지게 된다.

쉬운 것부터 알려주어야 하는데 가장 쉬운 것조차 클래스부터 시작해야 하니 말이다.

 

정말 진심으로 필자는 여러분이 처음 배우는 언어로 자바를 선택했다면

자바가 아닌 다른 언어를 먼저 공부하기를 추천한다.

예를 들면 파이썬 같은 쉬운 언어 말이다.

배우기 쉬운 언어로 먼저 시작하여 프로그래밍이란 어떤 것인지,

클래스란 무엇인지 등에 대하여 알고 난 후에 자바를 공부하면

무척 쉽게 느껴질 것이다.

 

자바는 처음 프로그래밍을 배우는 사람이 쉽게 적응하기 어려운 언어라고 할 수 있다.

이것은 언어가 추구하는 방향성 때문이기도 한데

모든 것이 클래스 기반에서 동작해야 한다는 이러한 자바의 특징이 나중에는 무척 편리하지만

처음 시작하기에는 넘기 힘든 장벽이 되기도 한다.

이 책을 읽는 여러분도 자바에 대해서 쉬운 것부터 차례로 설명하기 쉽지 않은 이유를

어느정도 이해해 주기를 바라며 이제 자바 학습에 들어가 보도록 하자.

 

우리는 "Hello World"를 출력하는 프로그램을 만들 것이다.

 

 

JDK 설치

우선 자바코딩을 시작하기 전에 개발환경을 먼저 세팅해 보자.

자바환경이란 자바로 프로그램을 만들 수 있는 컴퓨터 환경을 말한다.

즉, 프로그램 소스를 작성하는 툴, 작성한 소스를 컴파일 하는 프로그램 등을 설치해야 하는 것이다.

 

자바 프로그래밍을 하기 위해 필수적으로 필요한 JDK를 먼저 설치해 보자.

JDK는 Java Development Kit의 약자이다.

자바 프로그램을 만들기 위해서는 누구나 이것을 설치해야 한다.

자바는 원래 썬 마이크로시스템즈에서 만들고 배포했지만

오라클이 썬을 인수하면서부터 라이센스가 좀 복잡하게 변경되었다.

하지만 공부를 위해 필요한 JDK는 온라인에서 무료로 다운로드하여 설치할 수 있다.

 

이 책에서는 여러분이 윈도우즈 운영체제를 사용한다고 가정하고 진행한다.

 

 

(중략)

 

 

 

이제 JDK 설치가 완료되었다면

자바 프로그램 작성을 도와주는 도구인 인텔리제이(intellij)를 설치해야 한다.

 

문서파일 작성을 도와주는 도구로 워드나 HWP가 있는 것처럼

프로그램 작성을 도와주는 툴들이 있다.

 

이러한 툴들을 IDE(Intergrated Development Environment), 통합개발환경이라고 부른다.

자바 프로그래밍을 도와주는 IDE 중 가장 많이 추천되는 툴은 "인텔리제이"이다.

 

이클립스도 많이 사용한다.

 

 

(중략)

 

 

자바소스와 컴파일

 

 

JRE는 JDK보다는 작은 개념으로 Java Runtime Environment의 약자이다.

자바가 실행될 수 있는 최소한의 파일들이 설치되어있는 환경이라고 생각하면 된다.

JRE에는 javac.exe와 같은 자바소스를 컴파일하기 위한 도구는 설치되지 않는다.

 

javac는 java compiler의 약어이다.

즉, 자바파일을 컴파일할 때 사용하는 것이 바로 javac.exe 파일이다.

컴파일이란 프로그래머가 작성한 소스코드를 컴퓨터가 이해할 수 있는 말(기계어)로 바꾸는 행위이다.

모든 프로그래밍 언어에는 컴파일러 또는 그와 비슷한 기능을 하는 것들이 있다.

 

그럼 자바파일은 무엇일까?

 

바로 우리가 작성해야할 자바 프로그램을 말한다.

이 자바 프로그램은 .java라는 확장자를 가진 파일로 저장하게 되는데

이렇게 저장되는 .java 파일을 자바파일 또는 자바소스라고 한다.

 

만약에 우리가 Myprogram.java라는 자바 파일을 작성했다면

프로그램이 정상적으로 동작하는지 확인하기 위해

프로그램을 실행시키고 싶을 것이다.

 

자바로 작성한 파일을 실행하기 위해서는

두 번의 단계를 거쳐야만 한다.

하나는 .java 파일을 .class 파일로 바꾸어 주는 컴파일 단계이고

두 번째는 .class 파일을 실행하는 단계이다.

이렇게 두 단계를 거치면 우리는 작성한 프로그램을 실행할 수 있다.

 

위 그림에서 Compiler는 javac.exe에 해당하고

java VM은 java.exe에 해당된다.

 

 

위 그림을 순서대로 서술하면 다음과 같다.

1. 소스코드(Myprogram.java)를 작성한다.

2. 컴파일러(Compiler)는 자바 소스코드를 이용하여 클래스 파일(Myprogram.class)을 생성한다.

   컴파일 된 클래스 파일은 Java VM(Java Virtual Machine)이 인식할 수 있는 바이너리 파일이다.

3. Java VM(JVM)은 클래스 파일의 바이너리 코드를 해석하여 프로그램을 수행한다.

4. Myprogram 수행 결과가 컴퓨터에 반영된다.

 

 

왜 자바는 컴파일을 하고나면 exe 파일이 아닌 class 파일이 생성될까?

c 또는 c++ 등으로 작성된 프로그램은 최종 결과물로 exe 파일을 만들어 낸다.

이 exe 파일은 계산기와 같은 프로그램이거나 게임일 수도 있다.

사용자는 그냥 단순히 exe 프로그램을 실행하기만 하면 프로그램을 실행시켜 볼 수 있다.

 

그런데 왜 자바는 실행하기도 어려운 class라는 걸 만들어서 귀찮게 하는걸까?

 

(물론 java도 exe 프로그램으로 만들어 낼 수 있기는 하나

JVM이 exe에 포함되는 형식으로 가능하기 때문에

exe 파일이 무척이나 커진다는 단점이 있다.)

 

c, c++과 같은 언어는 컴파일 된 실행 파일을

모든 운영체제에서 동일하게 사용하는 것이 불가능하다.

윈도우에서 컴파일한 프로그램을 리눅스에서는 사용할 수 없다는 얘기다.

이것은 자바의 JVM과 같은 중간 단계의 역할을 수행하는 것이 없기 때문인데

이 부분에서 서로의 장단점이 명확하게 나누어 진다.

 

c, c++등의 언어에서 만들어진 실행파일은 JVM같은 중간단계를 거치지 않기 때문에

빠른 속도로 수행된다. 하지만 운영체제마다 별도의 실행파일을 작성해야 한다는 단점이 있다.

반대로 자바는 JVM이라는 중간단계가 있으므로 C등의 언어보다 속도가 느리다. 하지만

한 번 작성한 클래스 파일은 어떤 OS에서라도 사용할 수 있다는 장점이 있다.

한 번 작성한 것을 널리 재활용하는 것이 자바의 가장 큰 특징이자 가장 큰 장점이라 할 수 있다.

 

(자바 또한 발전에 발전(JIT의 도입 등)을 거듭하여 실행 속도도

 하드웨어를 직접 제어하는 케이스만 아니라면 c/c++에 거의 근접하게 따라 잡았다.)

 

 

 

 

(중략)

 

인텔리제이 설치

 

public class HelloWorld {

}

-> class 앞에 사용된 'public' 키워드는

    자바 프로그래밍 시 매우 중요하게 사용되는 접근제어자이지만

    class명 앞에 사용될 경우에는 조금 다른 의미로 사용된다.

 

    HelloWorld.java라는 이름으로 자바 파일을 작성하게 되면

    파일은 하나이지만 그 파일 내에 여러개의 클래스를 작성할 수 있다.

    다만 클래스명과 파일명이 동일할 경우 해당 클래스에 public을 붙여주어야 한다.

    (HelloWorld.java의 파일명과 HelloWorld 클래스의 이름이 동일하다.)

 

 

main 메소드

 

이제 작성한 HelloWorld.class를 실행 해 보자.

HelloWorld 클래스를 실행하려면 main 메소드를 작성해야한다.

어떤 프로그램이던지 시작과 그 끝이 있다.

이 시작과 끝을 관리하는 것이 바로 main 메소드이다.

 

메소드(method)는 함수(function)와 동일한 개념이다.

다만 클래스 내의 함수는 보통 함수라고 말하지 않고 메소드라고 한다.

자바는 모든 것이 클래스 기반이므로 자바에서 사용되는 함수는 모두 메소드이다.

 

 

HelloWorld.java 파일에 다음과 같이 main 메소드를 추가 해 보자.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

main 메소드에는

알 수 없는 public, static, void, String[], args, System.out.println 등이 등장했다.

각각에 대해 일단 가볍게 알아보자.

 

public : 메소드의 접근제어자, public은 누구나 이 메소드에 접근할 수 있다는 의미이다.

static : 메소드에 static이 지정되어 있는 경우 이 메소드는 인스턴스 생성없이 실행할 수 있음을 의미한다.

void : 메소드의 리턴값이 없음(void : 텅 빈)을 의미한다.

String[] : 문자열을 나타내는 자바의 자료형이다.

     ([]가 있으므로 한 개가 아닌 여러 개의 값으로 이루어진 배열임을 의미한다.)

args : String[] 자료형에 대한 변수명이다.

System.out.println : 표준 출력으로 데이터를 보내는 자바의 내장 메소드로 문자열을 화면에 출력한다.

 

이제 자바의 HelloWorld 프로그램이 얼마나 설명하기 힘든지 이해가 갈 것이다.

public, static, void 등은 모두 많은 설명을 필요로 하는 것들이다.

하지만 이것들을 또 먼저 설명할 수는 없다.

public, static 등에 대해서 설명하려면 인스턴스, 객체에 대한 설명을 먼저 해야 하니 말이다.

 

다시 한 번 딜레마에 빠진다..

 

이번 장에서는 진행을 더디게 만드는 이것들에 대해서 일단 무시하고 넘어가자.

다만, main 메소드는 프로그램 실행을 위해서 반드시 필요하며

꼭 위와 같은 형태의 main 메소드만 가능하다는 점을 기억하도록 하자.

이것은 일종의 자바의 규칙이라고 생각하면 될 것이다.

 

이제 main 메소드가 있기 때문에 프로그램을 실행할 수 있다.

메뉴에서 다음과 같이 선택하여 프로그램을 실행하자

Run - Run - HelloWorld

 

실행 결과는 인텔리제이 하단의 콘솔창에 다음과 같이 표시될 것이다.

Hello World

Process finished with exit code 0

인텔리제이에서 작성한 자바 파일을 Run 명령으로 실행하면

.class 파일을 만드는 컴파일 과정(javac.exe)과

실행 과정(java.exe)이 자동으로 실행된다.

 

 

 

 

 

느낀점 : 

 

초보자의 실행력을 돕기 위해

설치를 대신 해준다면 어떻게 될까?

아무래도 더 의존적여 지려나?

 

 

 

가르치는 분들의 딜레마에 대해서 이해했다.

 

 

 

자바에 대한 보다 깊은 정보들을 알게 되었다.

자바의 작동 원리.

자바 플레이 그라운드를 좀 보고 오니 재밌다.

 

자바에 대해서 더 정확히 이해하려면

공부를 더 해야겠다.

 

점프 투 파이썬이 자바스크립트 딥 다이브 같은 느낌이다.

 

 

 

다른 IDE인 인텔리제이도 깔게 되었다.

 

인텔리제이에서 해보니

훨씬 편리한 느낌이 있다. 그리고 깔끔하다.

하지만 일단 기본 개념을 이해하고 외우는데 있어서는

이클립스가 좋아 보인다.

 

결과가 나오는 데 이클립스보다 오래 걸린다.

댓글