본문 바로가기
👨‍💻 프로그래밍/Java, Kotlin, Spring

자바 1 - Hello, World!

by 개발자 진개미 2021. 4. 2.
반응형

프로그래밍의 세계에서는 처음 배우는 대상에 우선 Hello World를 출력해 보는 게 이른바 국 룰이다. 그렇다면 자바에서는 Hello World를 어떻게 출력할까?

 

시작하기 전에, 아래에서 다룰 내용이 한 번에 이해 될 리가 없다. 여기서 우리의 목적은 Hello World를 출력하는 프로그램이 어떻게 되어 있는지 구경하고, 앞으로 배울 내용을 대충 훑어보는 것이다. 이해가 되지 않는다고 자책할 필요는 전혀 없다.

 


보통 프로그래밍 언어에서 Hello World를 출력하기 위해선 print라는 함수를 쓴다. 자바도 비슷하다. 자바에서 Hello World를 출력하는 프로그램은 다음과 같다.

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

저번에 봤듯이, 자바에서는 단순히 print("Hello, world!")를 사용할 수 없다. 자바에서는 객체지향적 개념이 문법에 녹아있기 때문이다. 우선, 지금 바로 모두 이해할 수는 없을지라도 이 코드의 의미를 차근차근 알아보자.

 

객체지향(Object-Oriented) 이란, 쉽게 말해 프로그램의 최소 단위를 객체로 표현하는 것이다. 여기서는 객체라는 것을 class라는 예약어(Reserved Keyword)로 나타내고 있다. 예약어는, 특별한 의미를 갖는 단어이다. 예약어는 정해진 용도 외로는 절대 사용할 수 없다. 즉, classs는 객체라는걸 알려주는 예약어이고, 이 객체는 Hello라는 이름을 가지고 있다. 모든 자바 프로그램은 하나 이상의 객체(class)로 이루어져 있다. public은 접근 제어자(Access Modifier)라고 하는데, 쉽게 말해 이 대상을 다른 객체나 프로그램, 혹은 유저가 볼 수 있는지 없는지를 알려주는 예약어이다. 즉, 첫 번째 줄은 누구나 볼 수 있는 객체를 만드는데, 그 이름을 Hello로 한다는 뜻이다. 객체의 이름은 보통 대문자로 나타낸다.

 

두 번째 줄은 객체 안에 매소드를 선언한 것이다. 매소드(Method)란, 클래스 안에 있는 함수를 말한다. 자바는 모든 코드가 클래스 안에 있어야 하므로, 함수는 곧 매소드이다. 혹시 함수가 뭔지 모른다면, 함수는 코드를 다시 사용하기 쉽게 모아놓은 박스라고 생각하면 된다. 수학에서와 마찬가지로, 함수는 데이터를 받고, 결과를 뱉어낸다. 함수에서는 데이터를 전해줄 때(받을 때) 괄호 안에 명시한다. 또한, 모든 함수는 어떤 종류의 데이터를 뱉어내는지를 반드시 명시해야 한다. 여기서 void 란, 이 함수가 어떤 데이터도 뱉어내지 않는다는 것이다. void 또한 예약어이다. 이 함수는 String[] 타입의 이라는 데이터를 받고, 아무것도 뱉어내지 않는다. 특히, 이 함수의 이름은 main인데, main 함수는 특별한 역할을 갖는다. 함수는 보통 호출하지 않는 이상 그 안에 있는 코드가 실행되지 않는데, 그 말을 모든 프로그램이 실행될 때 컴퓨터가 최초에 호출하는 함수가 있어야 한다는 것이다. main함수가 바로 그런 역할은 한다. static이란 키워드는 객체지향을 이해하지 않으면 설명하기 어렵기 때문에, 여기서는 "객체를 실제로 만들 필요 없이 호출할 수 있는 함수" 정도로만 알고 있자. 정리하면, 두 번째 줄은 누구나 볼 수 있는 String [] 타입의 데이터를 받고 아무것도 돌려주지 않는 main static 함수를 선언하는 코드이다.

 

세 번째 줄은 대망의 Hello World이다. System.out 에서 점(.)은 그 객체 안에 들어간다는 뜻이다. 즉, System이라는 객체에 out이라는 매소드(혹은 다른 객체)에 접근에 또 println()이라는 매소드를 호출하고, 그 안에 "Hello World"라는 값을 전해주는 것이다. 그렇다면 실제로 출력하는 작업이 어떻게 이루어지는지 궁금할 수도 있다. 하지만 그것은 나도 알지 못한다. 사실, 이걸 제대로 이해한 프로그래머는 매우 적을 것이다. 하지만 이게 바로 객체지향의 핵심이다. 객체지향은, 객체나 매소드의 구현 방법을 전혀 모르고도, 자유롭게 사용할 수 있다. 기술이 점점 복잡해지는 세상 속에서 모든 분야를 배우는 것은 불가능 함으로, 객체지향의 이러한 점(추상화)은 대단히 유용하다. 마지막으로, 세미콜론(;)은 프로그램의 모든 줄 끝에 붙여서 한 줄이 끝났다는 걸 알려준다. 처음에는 귀찮다고 생각할 수도 있지만, 세미콜론이 요구되지 않는 언어를 사용하면 없어서 왠지 섭섭한, 묘한 존재이다. 정리하자면, 세 번째 줄은 System이라는 객체에서 호출한 println 매소드에 "Hello, world!"라는 문자를 전해줘 컴퓨터가 출력하게 한 코디이다.


코드를 실행한 결과

코드를 실행하면 아래와 같이 Console에 Hello world가 출력된다.

 


혹시 모르는 점이나 더 궁금한 점, 지적할 점이 있으면 언제든지 댓글 남겨주세요. 늦어도 24시간 이내에 답변드립니다.

 

 

반응형