Java/학습정리

[Java] 첫 번째 Java 프로그램 작성 : Hello, World!

쿳스 2021. 9. 7. 16:56

이전 글에서 기본적인 개발환경 구축을 완료했으니 이번에는 첫번째 java파일을 작성해볼 것이다. IDE인 Eclipse를 설치했으니, 이것으로 코드 작성 및 실행이 가능하기야 하겠으나, 기본적으로 IDE 없이 java프로그램을 작성하고 컴파일러를 통해 컴파일 한뒤 java.exe를 통해 실행하는 경험을 먼저 해볼 것이다.


첫번째 Java 프로그램 작성하기 : Hello, World!

기본적인 자바 개발환경이 구축됐다는 전제하에 이번 글부터 진행하도록 할 것이다.
여러 편의 기능이 제공된 통합 개발환경(IDE)을 통해 시작해보는게 편할 수도 있지만, 실제로 IDE 없이 개발을 하려면 어떤 식으로 진행해야하는 지도 학습해둘 필요가 있다. 우선 첫번째 코딩은 메모장으로 해볼 것.

메모장을 실행해서

대충 다음과 같이 타이핑.
java 파일의 구조를 대충 설명하면

class Hello {

}

1. Hello라는 class를 선언

class Hello {
    public static void main(String[] args) {

    }
}

2. class 안에 실행 기능을 하는 main 메서드를 선언한다.

후술할 java.exe는 일반적으로 main 메서드가 있는 class 파일만을 실행할 수 있다.

main 메서드는 구현부 {} 안의 구문을 ";" 단위로 문장으로 인식하여 처음부터 순서대로 수행한다.

public, static void, 이런 것들은 뭔지 괄호 안의 String[] args는 뭔지 앞으로 5장에서 배울 배열, 6-7장에서 배울 객체지향 프로그래밍 개념을 학습하다보면 알게 될 지식이니 일단 이런게 있다는 것만 알아두고 따라 쳐보자.

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

3. 문자열 "Hello, World!"을 출력하기

이 class 파일은 실행 시 "Hello, World!"를 실행하는 파일이다. 이걸 대충 어디 메모장에다 저장을 해본다.

Hello.java (대소문자 구분 주의)로 저장.

하지만 이렇게 작성한 .java파일은 바로 실행할 수 없는데

기계가 사람이 작성한 코드를 알아들을 수 있는 형태의 코드인 '자바 바이트 코드'로 번역해야하기 때문이다.

이 과정을 컴파일링이라고 하고, 이 컴파일링을 수행하는 프로그램을 컴파일러라고 한다.

java에서는 이 역할을 jdk를 통해 제공된 javac.exe가 맡고 있다.

컴파일러 javac.exe는 .java 파일을 받고, 해당 .java파일의 구문을 체크하고, 소스의 최적화를 해주고, 생략된 코드를 추가해주는 부가적인 역할을 해준뒤 .java파일의 class들을 전부 분리해서 각각 .class 파일로 새로 생성해준다.

경로로 이동해서 컴파일링 하는 방법
경로채로 가져와서 컴파일링 하는 방법

일단, java 명령어를 사용하려면 CMD를 켜서, cd(Change Directory) 명령어를 토해 명령을 진행할 디렉토리로 이동해야한다. 경로를 지정해준 뒤 동일한 경로에 속한 Hello.java 파일을 호출해 javac 명령어로 컴파일을 수행한다.

* 해당 java파일이 속한 경로로 이동 안 하고, 해당 java파일이 속한 경로채로 javac 명령어를 통해 컴파일링을 할 수도 있다.

* 여기서 잠깐, javac이 작동되지 않는다면 이전 글에서 환경변수 path에 jdk폴더의 bin 폴더 등록이 제대로 안 된 것이다. 환경변수 등록을 하고 오자!) 환경변수가 등록이 안 되어있다면 매번 컴파일을 할 때마다 javac.exe가 존재하는 jdk의 bin 폴더로 이동하여 javac을 호출하고, 여기서 외부 경로명채로 갖고와서 해당 파일을 컴파일 해야한다...

환경변수가 제대로 등록되어 있다면,

javac 파일명이 명령어를 통해 Hello.java 파일을 컴파일링 하여 안의 Class 들(여기서는 Hello 클래스 하나만)을 class 파일들로 컴파일링한다. Hello.java 파일이 생성됐다면 정상적으로 컴파일링 된 것이다.

이렇게 컴파일링 된 class 파일이 있는 경로에서 클래스 파일명을 입력하면 해당 파일이 실행된다.

(단, 해당 클래스에 main 메서드가 존재해야함)

이걸로 첫번째 java 프로그램 작성 및 실행이 무사히 끝났다! 짝짝짝!!!


Eclipse를 통하여 Hello, World! 를 출력하는 java 파일 작성하기

메모장을 통해 java파일을 작성하고 javac.exe를 경유하여

직접 java 파일을 컴파일하고, java.exe를 경유하여 class파일을 실행하는 경험을 해보았다.

하지만 매번 이 과정을 하기 너무 귀찮다.

메모장으로 날코딩을 하는 것보다 여러 편의 기능이 제공되는 IDE를 통하여 프로그래밍을 하는 것이 더 시간적인 면에서 생산적이다. IDE의 각종 편의 기능을 통하여, 오류를 빨리 잡아내고 30분이면 작성할 수 있는 그런 것을 1시간동안 쩔쩔매야하는 상황이 있을 수도 있는데 그런걸 고려하면 IDE를 사용해서 편하게 코딩하는게 몇 배는 낫다. 위대하신 선대 프로그래머분들이 만들어주신 IDE로 우리는 편하게 만들고 되지 굳이 과거의 기술인 날코딩으로 개고생을 할 이유가 없다.

고로 이제부터는 웬만한 코드 작성 및 컴파일, 실행은 전부 IDE를 통해 진행할 것이다.

부가적인 개념 학습이 필요하다면 그 때 날코딩(by 메모장), 수동 컴파일(by javac.exe), 수동 실행(by java.exe)을 하기야 하겠지만.

지난 글에서 eclipse를 설치했고 초기 설정까지 다 마쳤으니 그 다음부터 진행하겠다.

경로 지정

상단의 File > New > Other 을 경유하거나

Ctrl + n 을 통해 들어가서 Java Project를 선택하고 Next를 누른다.

앞으로 패키지 생성, 클래스 생성은 웬만해선 싹 Ctrl+ n을 통해 자주 진행할 것이므로 Ctrl + n은 기억해두는게 좋다.

적당한 이름으로 프로젝트 파일을 하나 지어준다.

Hello,World! 를 출력하는 프로그램을 만드는 프로젝트 Hello를 만들었다.

이 프로젝트에는 JRE System Library라는 폴더가 보이는데 이것은 앞서 jdk를 통해 받은 클래스 라이브러리들이다.

이전 글에서 설정을 했다면 jre 폴더가 아닌 jdk폴더를 기반으로 하여 클래스 라이브러리의 경로를 참조할 것이다.

그리고 src 폴더는 앞으로 작업할 .java파일들이 저장될 곳이라고 보면 된다.

java파일 생성

여기서부터가 문제인데, 단순히 Hello, World! 만을 출력하는 단순한 프로그램을 작성할 것이므로 package 를 만들어주지 않고 바로 src 폴더 아래에 Hello.java 파일을 만들어 줄 것이다.

패키지는 비슷한 역할을 하는 java(컴파일하면 class) 파일들을 모아두는 꾸러미인데, 여기서는 그정도의 규모로 작업을 하지 않을 것이므로 바로 java 파일을 만들 것이다.

 

Class를 생성한다. src에 우클릭을 하여 class를 생성하는 명령으로 이동하거나Ctrl+ n을 입력하여 class를 입력하여 class를 생성하는 명령으로 이동하면 된다.

파일명은 Hello로 지음.

클래스명의 첫 글자는 대문자로 지을 것.

꼭 그래야하는건 아닌데 package, method 명의 시작은 소문자를 사용하고, 클래스명의 시작은 대문자로 시작하는게 개발자들 사이의 암묵의 룰이다. 하다보면 알겠지만 이 룰을 어기면 나중에 객체들간 호출을 할 때 구분이 매우 힘들어지므로 학습 초기부터 각 요소들의 대소문자 규칙은 최대한 지키도록 노력해야한다.

아래에 보면 public static void main(String[] args)에 체크박스가 있는데 이것을 체크하면

클래스를 만들 때 main 메서드가 안에 들어간 채로 생성된다.

 

 

날코딩에서는 실행하는 java 파일을 만들 때마다 이것을 일일이 입력해줄 필요가 있었으나, IDE를 통해 이 작업을 IDE에게 맡길 수 있는 것이다. 물론 지금은 java를 익히는 초반단계이므로 이 main 메서드 호출부는 직접 수동으로 여러번 따라쳐 보는 것을 추천.

 

 

* 처음 Eclipse를 통해 이 창을 보면 글자가 작게 보일텐데 Ctrl과 +를 같이 눌러주면 글자를 크게 보이게 할 수 있다.

* 메인 메서드 호출부 아래의 //은 시작되는 곳부터 해당 줄 끝까지를 코드에 영향을 끼치지 않는 주석을 작성할 수 있는 기능이다. 이후 다시 설명할 것이고 그냥 해당 줄은 지워도 무방하다.

        sysout

여기서, sysout을 친 상태에서 Ctrl+space를 누르면

        System.out.println();

prinln 메서드가 바로 호출된다. 이것이 날코딩과 IDE의 주요 차별점.

이런 편의 기능 등을 적극적으로 습득하고 활용하면 개발의 생산성을 향상시킬 수 있다.

public class Hello {

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

}

이리하여 소스코드 완성. 이걸 Ctrl+S로 저장하면 작성 끝.

 

우리 손으로 작성한 Hello.java 파일
Eclipse가 알아서 java.exe를 통하여 컴파일해온 Hello.class

이전의 날코딩 과정을 거쳤다면 이렇게 작성된 java파일을 저장하여, javac.exe로 컴파일하고 java.exe를 거쳐서 실행해야했겠지만 eclpise에서는 이 java파일을 src 폴더에 저장시키자마자, 그걸 그대로 컴파일 해서 bin 폴더에 그대로 저장시킨다.

상단의 재생버튼처럼 보이는걸 클릭하면 Run as > Java Application 이 보이는데 이걸 누르거나

main 메서드가 있는 java파일을 저장시키고 켜져있는 상태에서 Ctrl+F11을 누르면 자동으로 실행된다.

그냥 java파일을 저장하고 그 자리에서 바로 컴파일 시키고 바로 실행이 가능한 것이다.

 

여기서 Ctrl+F11은 앞으로 Eclipse를 통해 java코드로 된 프로그램을 개발하다보면 매우매우매우매우매우 자주 쓸 단축키이므로 외워야한다. 아니, 외울 수밖에 없을 것이다.

 

 

만약 저장하지 않은 상황이면 이런 메시지가 뜨는데 Always save resources before launching을 체크시, 앞으로 실행 전(정확히는 컴파일 및 실행 전) 자동으로 저장해주고 실행해준다. 하지만 기왕이면 수동으로 Ctrl + S를 자주 누르는 것이 좋다.