> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/base-language/java/beginner/hello-world.md).

# Hello world

## Hello World

자바로 프로그래밍을 할 수 있는 준비를 마쳤으므로 첫 번째 프로그램을 만들어 본다. 일반적으로 프로그래밍 언어에서 첫 번째 프로그램은 `Hello World`라는 글자를 화면에 출력하는 내용으로 만든다(이유는 알 수 없다).

### 프로젝트 생성

`File`의 `New` → `Java Project`를 선택하여 프로젝트를 만든다. 자바 프로젝트는 일반 폴더와는 달리 자바 개발에 필요한 기본 파일들이 생성 시 첨부되어 있다.

![](/files/-MgnQVJyn8-vtny3oONF)

### 패키지 생성

패키지는 소스코드 파일을 분류하는 인덱스 역할을 수행한다. 일반 폴더와 달리 자바에서는 다른 패키지를 불러올 수 있다. 따라서 일반적으로 파일은 반드시 패키지를 만들고 생성하도록 되어 있다.

프로젝트 내부의 `src`에 우클릭하여 `New` → `Package`를 선택한다.

![](/files/-MgnQXQpsujZKLODBbO4)

이름은 `test`라고 짓는다.

### 소스코드 파일 생성

생성한 패키지를 우클릭하고 `New` → `Class`를 선택하여 소스코드를 작성할 수 있는 파일을 생성한다. 이름은 `Hello`로 설정한다.

![](/files/-MgnQZAYm4afWJC1czsm)

### 생성된 파일 확인

파일이 생성되면 다음과 같은 코드가 작성되어 있다.

```java
package test;

public class Hello {

}
```

### 샘플 코드

작성된 코드를 제외한 나머지 영역에 코드를 추가하여 다음과 같은 프로그램을 구현한다.

```java
package test;

import java.lang.*;

public class Hello {
    public static void main(String[] args){
        //Sample Java Program
        System.out.println("Hello World!");
    }
}
```

### 샘플 코드 작성

```java
package test;

import java.lang.*;

public class Hello {
    public static void main(String[] args){
        //Sample Java Program
        System.out.println("Hello World!");
    }
}
```

### 실행

`Run` 메뉴의 `Run`을 누르거나 단축키 `Ctrl+F11`을 눌러 실행한다.\
다음 글자가 출력되면 성공이다.

```
Hello World!
```

```java
System.out.println("Hello World!");
```

### 코드 설명

프로그래밍이란 앞서 설명한 것처럼 **컴퓨터에게 시킬 작업을 만드는 과정**이다. 따라서 작업을 시키기 위한 작업 지시서를 만들어야 하는데, 이를 소스파일이라고 볼 수 있다.

![](/files/-MgnQfTgS6CDZUGIt0by)

우리가 만든 프로그램은 위 작업 지시서와 유사하다. 다른 점은 문서가 아닌 자바 언어로 작성되었다는 점이다.

### package

```java
package test;
```

현재 소스파일의 소속을 나타내는 코드이다. 없을 경우 경로를 인지하지 못하기 때문에 오류가 발생하며, 기본적으로 작성되는 코드이니 수정할 필요가 없다.

### import

`import`는 프로그램에서 사용할 외부 도구를 불러오는 명령이다. 위의 작업지시서에서 필요도구에 해당한다. `import`를 사용하여 다음의 작업을 수행할 수 있다.

* 도구 하나만 불러오기
* 도구가 속한 패키지 전체를 불러오기

프로그램을 아주 기초적인 것부터 다 만들 경우 시간이 오래 걸리기 때문에, 최근의 프로그램들은 프로그래밍을 하기 위해서 필요하다고 판단되는 도구들을 미리 만들어 묶음 형태로 제공하는데 이를 `API`라고 부른다. 자바에서도 기본적으로 제공되는 도구(이하 라이브러리)가 있으며, `rt.jar`라는 파일의 형태로 제공된다. 이 안에 들어있는 라이브러리 또는 내가 만든 프로그램 내의 다른 소스파일의 내용을 `import`를 통하여 불러올 수 있다.

```java
import java.lang.*;
```

위의 코드는 java.lang이라는 이름의 패키지에 있는 모든 도구를 불러오라는 명령이며, 이 안에는 현재 프로그래밍 코드에서 사용중인 도구인 `System`과 `String`이 존재한다.

따라서 다음과 같이 작성할 수도 있다.

```java
import java.lang.String;
import java.lang.System;
```

java.lang 패키지에는 프로그램 구동에 필수적인 것들이 포함되어 있기 때문에 `import java.lang.*;`은 반드시 작성되어야 하는 코드이다. 하지만 Eclipse와 같은 IDE에서는 이러한 반드시 필요하지만 번거로운 작업들을 자동으로 처리해주기 때문에 작성하지 않아도 실행하는데 문제가 없다.

java.lang 패키지를 제외한 다른 도구들은 반드시 `import`를 작성해야 하기 때문에 형태를 살펴보기 위해 작성하였다.

### class

```java
public class Hello {

}
```

파일을 만들면 기본적으로 생성되어 있는 구문이다. 파일과 동일한 이름을 가져야 하며, 이름을 바꿀 경우 오류가 발생한다. 이것은 자바에서 정한 규칙이기 때문에 어길 수 없다.

Hello 클래스라고 부르며, Hello.java라는 파일을 대표하는 공간 정도로 이해할 수 있다. 자세한 활용이나 응용 등은 추후 클래스 파트에서 배우므로 지금은 **파일마다 한 개씩 제공되는 공간** 정도로 이해하는 것이 편하다.

### main method

```java
public static void main(String[] args){

}
```

위와 같이 생긴 영역을 `main method(메인 메소드)`라 부른다. 형태는 고정이며, 반드시 클래스 내부에 위치해야 하고 하나만 만들 수 있다. 이를 지키지 않을 경우 규칙 위반이기 때문에 프로그램은 절대로 실행되지 않는다. 메인 메소드에는 작업 지시 내용을 자바 언어로 작성한다.

### 주석

```java
//Sample Java Program
```

위의 글자는 프로그래밍 코드가 아니다. 코드를 작성하다 보면 설명을 쓰거나, 필요없는 코드를 잠시 숨겨둬야 하는 경우가 발생하는데 이 때 사용할 수 있는 도구가 바로 **주석**이다.

주석은 설명으로 간주되어 컴파일에서 제외되며, 프로그램에 영향을 미치지 않는다. 따라서 프로그램을 작성할 때 코드에 대한 설명을 주석으로 작성해두면 프로그램에는 영향을 미치지 않으면서 이해도를 높일 수 있다. 최근 프로그래밍에서는 주석 작성 능력을 매우 중요하게 생각하므로 작성 형태를 주의깊게 볼 필요가 있다.

#### 한 줄 주석

```java
//슬래시가 2개 있으면 뒷부분은 모두 주석입니다.
```

`//`를 이용하여 특정 지점의 뒷부분을 모두 주석으로 처리할 수 있다.

#### 영역 주석

```java
/* 시작 기호와 종료 기호를 사용하여 영역을 주석 처리할 수 있다*/

/*
    여러줄도
    주석 처리가
    가능하다.
*/
```

시작 기호인 `/*`와 종료 기호인 `*/`를 사용하여 원하는 영역을 지정하여 주석으로 만들 수 있다.

#### API 주석

```java
/**
    이 형태의 주석은 API 설명 문서를 제작하기 위한 주석이다.
*/
```

`/**`로 시작하는 주석은 API주석이라고 부르며, 프로그램 배포 시 첨부할 설명 문서를 작성할 때 사용한다. 지금은 사용할 일이 없지만 추후 따로 라이브러리 배포 과정에서 살펴보도록 한다.

### 실행 코드

```java
System.out.println("Hello World!");
```

`System` 이라는 도구 안에 있는 `out`이라는 통로를 이용하여 `println`이라는 작업을 수행하는 명령이다. 이를 이해하기 위해서는 프로그래밍 내에 기본적으로 내장되어 있는 입출력의 개념을 알아야 하는데, 자세한 내용은 추후 살펴보는 것으로 하고 간단하게 정리하면 **시스템 정보를 다룰 수 있는 도구 안에 있는 글자 전달 통로**에 글자를 내보내는 명령이다.

`"` 로 감싸진 것들은 **글자**로 인식되며, 사이에 어떤 값을 작성해도 화면에 나오게 된다. 글자를 바꿔가며 다시 실행해보면 이해가 갈 것이다.

### 결론

간단한 프로그램을 만들고 싶어도 반드시 정해진 규칙을 따라야 한다. 따라서 자바에 입문하는 사람이라면 반드시 다음의 의미와 형태를 알아야 한다.

* project
* src
* package
* import
* class
* main method
* System.out.println()
* 주석
