Back-end Skill/JAVA

Java #4 자바에서의 그 놈!!의 HelloWorld !! 구조 파해치기

Sophie소피 2021. 11. 18. 22:04

public class helloworld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}
public class helloworld {   //helloworld라는 클래스정의 첫번째-마지막 중괄호 사이에 hello world 클래스 내용이 들어감
    public static void main(String[] args) {  //접근제어자 public or private, 클래스 안에 정의된 내용, 메소드란 클래스안에 정의된 함수, main= 정의할 메소드(함수)이름, 이 main메소드는 args라는 문자열배열을 파라미터로 받음. 
       //main메소드 앞에 지금 void라고 적혀 있는 것은 메소드의 리턴값을 선언하는 자리 void는 리턴값이 없다는 뜻 
       //메소드의 리턴값의 자료형을 써준다 . 만약에 메소드가 값을 정수나, 문자열을 리턴한다면 (string, int) 이거 쓰면됨
        
       System.out.println("Hello World"); //system이라는 클래스의 out이라는 변수의 println이라는 메소드를 호출 
    }
} //그리고 이 메소드의 파라미터로 문자열 helloworld 를 넣어주면 콘솔에 잘 출력되는걸 확인할 수 있다.

HelloWorld

우선 HelloWorld 라는 단어는 우리가 정한 이름입니다. 이 프로그램이 Hello, World!를 출력하는 프로그램이기 때문에 HelloWorld라고 지어준거죠. 다른 이름을 사용해도 됩니다.

class

클래스(class)는 객체 지향 프로그래밍의 기본 단위라고 할 수 있습니다. 이후 '객체 만들기' 챕터에서 자세하게 배울텐데, 우선 지금은 기본 단위라고 생각하시면 됩니다. class HelloWorld라고 썼으니, HelloWorld라는 이름의 클래스를 만든다는 말이겠군요. 객체 만들기 챕터 - 클래스에서 자세히 배우게 됩니다.

public

public은 '공적인' 이라는 뜻이죠? HelloWorld라는 클래스는 누구나 사용할 수 있는 공적인 클래스라는 의미입니다. 이를 접근제어자 라고 부르는데, public 외에도 private, protected 등이 있습니다. 객체 설계하기 챕터 - 접근 제어자에서 자세히 배우게 됩니다.

 

두 번째 줄은 HelloWorld {} 괄호 안에, 즉 HelloWorld 클래스 안에 위치하고 있습니다.
클래스 안에는 클래스가 어떤 동작을 할 지 정의해 주는데, 이 부분을 메소드라고 부릅니다. (클래스 안에 정의된 함수입니다.)
메소드에 대해서는 객체 만들기 챕터 - 메소드에서 배울 수 있습니다.

첫 번째 줄이 클래스를 만드는 코드였다면, 두 번째 줄은 메소드를 만드는 코드입니다.
총 6개의 단어가 보이네요. 짧게 살펴봅시다.

main

먼저 살펴볼 단어는 가운데에 있는 main 입니다. 메소드의 이름으로 사용되고 있습니다.
main이라는 이름은 좀 특별한데, 자바 프로그램을 실행하면 가장 먼저 main을 찾아서 실행시키게 됩니다.
그렇기 때문에 main이라는 단어는 모든 자바 프로그램에 항상 포함되어 있습니다. (이름을 바꾸면 안 되겠죠?)
우리가 실행시키고 싶은 자바 코드가 있다면, main 안에 넣어주면 됩니다.

이제 main 앞에 나오는 3개의 단어를 살펴봅시다. 이 3개의 단어는 main 메소드의 특징을 설명해주는 말로, 항상 main과 함께 나오게 됩니다.

public

앞서도 살펴본 public 입니다. main 메소드는 누구에게나 공개되어 있다는 의미입니다.

static

static도 이후에 더 자세히 살펴볼텐데, static을 써주면 그 부분을 바로 실행 가능하게 만들어줍니다. main은 가장 첫 번째로 실행되어야 하기 때문에, main 앞에는 항상 static을 붙이게 됩니다. static을 붙이는 이유는 자바, 더 정확하게! 챕터 - 인스턴스 메소드 vs. 클래스 메소드에서 배울 수 있습니다.

void

메소드는 필요에 따라 실행이 끝나고 어떤 값을 되돌려주기도 합니다.
그리고 그 되돌려줄 값이 무엇인지 미리 메소드 이름 앞에 써줍니다.
void는 되돌려주는 값이 없다는 의미입니다. 만약 실행이 끝나고 숫자형을 돌려줄 예정이면, void 대신 숫자를 의미하는 int를 쓰면 됩니다.
메인 메소드는 보통 아무 것도 되돌려주지 않기 때문에 void를 붙여주게 됩니다.

이제 main 뒤에 나오는, 괄호 안의 단어 2개를 살펴봅시다.

String[] args

이 두 단어는 같이 보는 게 좋습니다.

String[] args는 괄호 ( ) 안에 위치하고 있죠? 괄호 안에 있다는 것은 메소드에 전달되는 값이라는 의미입니다. 파라미터라고도 하죠.
앞에 있는 String[]은 문자열을 의미하고, 뒤에 있는 args는 변수 이름입니다. 즉, args라는 이름의 문자열 변수가 메소드에 전달된다는 뜻입니다.

지금 괄호 ( ) 의 주인은 main 메소드니까,
누군가 main 메소드에게 파라미터를 전달해주면, main 메소드 안에서 args라는 이름으로 받아서 사용할 수 있습니다.

문자열 등 자료형에 대해서는 변수와 연산 챕터 - 자료형에서 더 자세히 배울 예정입니다.

합쳐서 살펴봅시다.

 

  1. main 메소드가 있습니다.
  2. 이 main 메소드는 누구나 접근할 수 있고 (public), 바로 실행할 수 있고 (static), 아무 것도 되돌려주지 않습니다. (void)
  3. 나중에 main 메소드에 전달해주고 싶은 값이 있다면, 문자열 형태로 전달해야 하며, main 메소드 안에서 'args' 라는 이름으로 사용할 수 있습니다.

main 메소드 안에는 가장 먼저 실행하고 싶은 코드를 넣는다고 했죠? 우리는 Hello, World!라고 출력하고 싶기 때문에, 출력을 해주는 코드가 안에 들어 있습니다.

하나씩 살펴봅시다.

System

객체 지향의 기본 단위가 클래스라고 했죠? System도 클래스입니다. 다만, 자바에서 미리 직접 만들어둔 클래스입니다. 우리는 이렇게 미리 만들어진 클래스를 활용해서 어려운 동작을 코드 한 줄로 만들 수 있습니다. System 클래스는 말 그대로 입력, 출력 등 시스템에 관련된 기능들을 모아둔 클래스입니다.

out

System 클래스 안에는 여러 기능이 모여 있기 때문에, 이해하기 쉽게 System.in, System.out, System.err 등으로 분리되어 있습니다. out이라는 이름을 보니, 출력과 관련된 기능이 들어 있겠죠?

println()

print는 '출력하다' 라는 뜻이고, ln은 line의 줄임말입니다. 괄호 안에 원하는 텍스트를 넣으면 출력해주고, 마지막에는 엔터를 치듯이 다음 줄(line)로 넘겨주는 역할을 합니다.
println 역시 기능을 구현한 부분이기 때문에 메소드라고 부릅니다.

"Hello, World!"

두 개의 따옴표 (" ")는 문자열을 의미합니다. 괄호 안에 넣으면 메소드에 전달해준다고 했었죠? Hello, World!라는 문자열을 출력하기 위해 println 메소드에 전달해주고 있습니다.

정리해 봅시다.

System.out.println("Hello, World!");

이 줄은 'System'이라는 자바에 내장되어 있는 클래스의 'out' 안에 있는 'println' 메소드를 사용해서,
Hello, World!를 출력하라는 뜻입니다.