Skip to main content

첫 프로그램과 기본 문법 익히기

처음 자바 코드를 보면 괄호도 많고, 세미콜론도 보이고, 알 수 없는 영어 단어도 줄줄이 등장합니다. 하지만 겁먹을 필요는 없습니다. 자바 프로그램은 처음 몇 가지 규칙만 이해하면 금세 익숙해집니다. 이 장에서는 자바 코드의 가장 작은 출발점부터 차근차근 살펴봅니다.

핵심은 단순합니다. Hello World 하나를 제대로 이해하면, 이후의 자바 코드도 훨씬 덜 낯설어진다는 점입니다. 화면에 문장을 한 줄 출력하는 짧은 프로그램 안에도 자바의 기본 구조가 거의 다 들어 있기 때문입니다.

가장 먼저 만나는 자바 프로그램

자바 입문에서 가장 유명한 코드는 역시 Hello World입니다.

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

코드 길이는 짧지만, 처음 보는 사람에게는 여러 질문이 생깁니다. 왜 class가 필요할까, main은 왜 이렇게 길까, 문자열은 왜 큰따옴표로 감쌀까, 마지막에는 왜 세미콜론이 붙을까. 하나씩 뜯어보면 생각보다 어렵지 않습니다.

먼저 public class Hello는 Hello라는 이름의 클래스를 선언하는 부분입니다. 자바는 대부분의 코드를 클래스 안에 작성합니다. 아직 클래스의 개념이 완전히 이해되지 않아도 괜찮습니다. 지금은 자바 코드는 보통 클래스라는 상자 안에 들어간다 정도로 받아들이면 충분합니다.

그다음 줄의 public static void main(String[] args)는 프로그램이 시작되는 특별한 메서드입니다. 쉽게 말해, 자바 실행기가 가장 먼저 찾아서 실행하는 입구입니다. 집에 비유하면 현관문 같은 존재입니다. 자바 프로그램은 이 main 메서드에서 출발합니다.

마지막으로 System.out.println("Hello, World!");는 화면에 Hello, World!를 출력하라는 뜻입니다. 큰따옴표 안의 내용은 문자열이고, println은 출력 후 줄바꿈까지 해 주는 메서드입니다.

자바 프로그램은 어디서부터 실행될까

자바는 main 메서드를 시작점으로 사용합니다. 그래서 자바 프로그램을 만들 때 가장 많이 보게 되는 형태가 바로 아래 구조입니다.

public class 파일이름과같은클래스이름 {
    public static void main(String[] args) {
        // 실행할 코드
    }
}

여기서 중요한 점은 파일 이름과 클래스 이름의 관계입니다. 예를 들어 Hello.java라는 파일을 만들었다면, 그 안의 공개 클래스 이름도 Hello여야 합니다.

public class Hello {
    public static void main(String[] args) {
        System.out.println("안녕하세요, 자바!");
    }
}

이 규칙을 처음에는 조금 답답하게 느낄 수도 있습니다. 하지만 덕분에 자바는 코드 구조를 비교적 명확하게 유지합니다. 파일을 보면 어떤 클래스가 들어 있는지 짐작하기 쉽고, 규모가 커질수록 이런 규칙이 꽤 도움이 됩니다.

코드의 뼈대 이해하기

이제 Hello World 코드를 줄 단위로 조금 더 쉽게 해석해 봅시다.

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

public은 "바깥에서 접근 가능하다"는 의미를 가진 키워드입니다. 지금 단계에서는 깊이 파고들 필요는 없습니다. main 앞에 자주 붙는구나 정도로 익혀도 충분합니다.

class는 클래스를 정의할 때 사용하는 키워드입니다. 클래스는 관련 있는 코드와 데이터를 담는 설계도나 상자처럼 생각하면 이해하기 쉽습니다.

static은 객체를 만들지 않아도 사용할 수 있게 하는 키워드이고, void는 이 메서드가 값을 돌려주지 않는다는 뜻입니다. 초반에는 "main 메서드는 원래 이렇게 쓴다"라고 익히는 편이 좋습니다. 나중에 메서드와 객체지향을 배우면 자연스럽게 더 명확해집니다.

String[] args는 명령행 인자를 받는 부분입니다. 지금 당장 사용하지 않아도 괜찮습니다. 프로그램 실행 시 전달되는 문자열 묶음을 받는 자리라고 가볍게 이해하면 됩니다.

중괄호 { }는 코드의 영역을 나타냅니다. 바깥 중괄호는 클래스의 범위, 안쪽 중괄호는 main 메서드의 범위를 나타냅니다. 자바는 이런 블록 구조가 매우 중요합니다. 괄호 하나만 빠져도 컴파일 오류가 날 수 있으니, 중괄호 짝을 잘 맞추는 습관을 들이는 것이 좋습니다.

화면에 출력해 보기

프로그래밍을 시작하면 가장 먼저 확인하고 싶은 것은 "내 코드가 제대로 실행되는가"입니다. 그럴 때 가장 유용한 도구가 출력입니다.

자바에서 가장 자주 사용하는 출력문은 System.out.println()입니다.

System.out.println("자바는 생각보다 재밌다!");

이 코드는 문장을 출력한 뒤 다음 줄로 이동합니다. 그래서 여러 줄을 순서대로 보기 좋게 출력할 수 있습니다.

public class OutputExample {
    public static void main(String[] args) {
        System.out.println("첫 번째 줄");
        System.out.println("두 번째 줄");
        System.out.println("세 번째 줄");
    }
}

실행 결과는 다음과 같습니다.

첫 번째 줄
두 번째 줄
세 번째 줄

비슷한 출력 방식으로 print()도 있습니다.

public class PrintExample {
    public static void main(String[] args) {
        System.out.print("안녕");
        System.out.print("하세요");
    }
}

실행 결과는 줄바꿈 없이 이어집니다.

안녕하세요

즉, println()은 출력 후 줄바꿈, print()는 줄바꿈 없이 출력입니다. 둘의 차이는 사소해 보여도 실제로는 꽤 자주 사용합니다.

세미콜론은 왜 붙을까

자바 문장 끝에는 보통 세미콜론 ;을 붙입니다.

System.out.println("Hello");

세미콜론은 "이 문장은 여기서 끝났습니다"라고 알려 주는 표식입니다. 자연어의 마침표와 비슷한 역할이라고 생각하면 됩니다. 자바에서는 세미콜론을 빠뜨리면 오류가 나는 경우가 많습니다.

다만 if, for, class, method처럼 블록을 여는 구조에서는 중괄호를 사용하므로 항상 세미콜론이 붙는 것은 아닙니다. 입문 단계에서는 일반 실행 문장 끝에는 세미콜론이 붙는다고 기억하면 큰 무리는 없습니다.

주석: 컴퓨터에게는 무시되고, 사람에게는 친절한 메모

주석은 프로그램 실행에는 영향을 주지 않지만, 코드를 읽는 사람에게 설명을 남기는 도구입니다. 미래의 나를 위한 메모라고 생각해도 좋습니다. 며칠 뒤 다시 코드를 보면, 과거의 내가 남긴 주석이 꽤 고맙게 느껴질 때가 많습니다.

자바의 주석은 크게 세 가지를 자주 사용합니다.

  • 한 줄 주석: //

  • 여러 줄 주석: /* ... */

  • 문서 주석: /** ... */

먼저 한 줄 주석입니다.

// 화면에 인사말을 출력한다
System.out.println("안녕하세요");

여러 줄 주석은 긴 설명을 남길 때 사용합니다.

/*
이 코드는 자바의 기본 출력문을
연습하기 위한 예제입니다.
*/
System.out.println("연습 중입니다");

문서 주석은 나중에 클래스나 메서드를 설명하는 공식 문서 형태를 만들 때 사용합니다.

/**
 * 프로그램의 시작점
 */
public static void main(String[] args) {
    System.out.println("시작!");
}

주석은 많다고 무조건 좋은 것은 아닙니다. 코드만 봐도 분명한 내용을 장황하게 설명하면 오히려 읽기 불편해집니다. 좋은 주석은 "왜 이렇게 작성했는지"를 알려 줄 때 특히 가치가 있습니다.

식별자: 이름을 짓는 규칙

프로그래밍에서는 이름 짓기가 아주 중요합니다. 변수 이름, 클래스 이름, 메서드 이름처럼 코드 안의 대상을 구분하기 위해 붙이는 이름을 식별자라고 합니다.

예를 들어 아래의 age, userName, score는 모두 식별자입니다.

int age = 20;
String userName = "Kim";
double score = 95.5;

자바에서 식별자를 지을 때는 몇 가지 기본 규칙이 있습니다.

  • 영문자, 숫자, 밑줄 _, 달러 기호 $를 사용할 수 있다.

  • 숫자로 시작할 수 없다.

  • 공백을 포함할 수 없다.

  • 자바의 키워드는 사용할 수 없다.

예를 들어 name1은 가능하지만 1name은 불가능합니다. user name처럼 중간에 공백이 들어가도 안 됩니다. 또 class, int, public처럼 자바가 이미 특별한 의미로 사용하는 단어는 이름으로 사용할 수 없습니다.

이름을 "될 수만 있으면" 짓는 것과 "잘" 짓는 것은 다릅니다. 좋은 식별자는 읽는 순간 역할이 떠오릅니다. x, a, temp2 같은 이름은 짧아서 편해 보여도 뜻이 분명하지 않습니다. 반면 studentCount, totalPrice, isLogin 같은 이름은 의도가 훨씬 잘 드러납니다.

자바에서는 보통 다음과 같은 이름 관례를 많이 사용합니다.

  • 클래스 이름은 Student, HelloWorld처럼 단어마다 첫 글자를 대문자로 쓴다.

  • 변수와 메서드 이름은 studentName, printResult처럼 첫 단어는 소문자, 그다음 단어부터 첫 글자를 대문자로 쓴다.

  • 상수 이름은 MAX_SIZE, PI처럼 모두 대문자와 밑줄을 사용한다.

이 관례를 지키면 내 코드가 더 자바답게 보이고, 다른 개발자도 읽기 편해집니다.

변수: 값을 담는 상자

변수는 데이터를 저장하는 공간입니다. 조금 더 친숙하게 말하면, 값을 담아 두는 이름표가 붙은 상자입니다.

예를 들어 나이를 저장하고 싶다면 이렇게 쓸 수 있습니다.

int age = 20;

이 문장은 세 부분으로 볼 수 있습니다. int는 정수를 저장하겠다는 자료형, age는 변수 이름, 20은 실제로 저장할 값입니다.

변수를 사용하는 이유는 값을 재사용하고 바꿀 수 있기 때문입니다.

public class VariableExample {
    public static void main(String[] args) {
        int age = 20;
        System.out.println(age);

        age = 21;
        System.out.println(age);
    }
}

처음에는 20이 들어 있지만, 나중에 21로 바꿀 수도 있습니다. 프로그램은 살아 있는 계산기처럼 값을 계속 다루기 때문에 변수가 꼭 필요합니다.

변수는 먼저 선언하고 나중에 값을 넣을 수도 있습니다.

int score;
score = 100;
System.out.println(score);

다만 지역 변수는 값을 넣기 전에 사용하면 오류가 납니다. 즉, "상자는 만들었지만 아직 아무것도 넣지 않은 상태"에서는 꺼내 쓸 수 없습니다.

자료형: 어떤 종류의 값을 담을까

변수에는 아무 값이나 넣을 수 있는 것이 아니라, 어떤 종류의 값을 저장할지 미리 정해야 합니다. 이때 사용하는 것이 자료형입니다.

자바의 자료형은 크게 기본형과 참조형으로 나뉘지만, 지금은 가장 자주 쓰는 기본형과 문자열부터 익히는 것이 좋습니다.

먼저 대표적인 자료형을 간단히 살펴봅시다.

  • int: 정수

  • long: 더 큰 정수

  • double: 실수

  • boolean: 참 또는 거짓

  • char: 문자 하나

  • String: 문자열

예제를 보면 감이 빨리 옵니다.

public class DataTypeExample {
    public static void main(String[] args) {
        int age = 20;
        long population = 50000000L;
        double height = 175.8;
        boolean isStudent = true;
        char grade = 'A';
        String name = "민수";

        System.out.println(age);
        System.out.println(population);
        System.out.println(height);
        System.out.println(isStudent);
        System.out.println(grade);
        System.out.println(name);
    }
}

여기서 눈여겨볼 점이 몇 가지 있습니다. String은 첫 글자가 대문자입니다. 그리고 문자열은 큰따옴표 " "를 사용하지만, 문자 하나를 나타내는 char는 작은따옴표 ' '를 사용합니다. 처음에는 이 차이를 자주 헷갈리니 주의해야 합니다.

또 long 값 뒤에 붙은 L도 보일 것입니다.

long population = 50000000L;

이 표시는 이 숫자가 long 타입이라는 뜻을 더 분명하게 알려 줍니다. 작은 정수는 int로도 충분하지만, 더 큰 값을 다룰 때는 long을 사용합니다.

문자열은 숫자와 다르다

입문자에게 아주 중요한 포인트 하나가 있습니다. 숫자처럼 보이더라도 큰따옴표로 감싸면 문자열입니다.

int number = 123;
String text = "123";

number는 계산 가능한 숫자이고, text는 글자 1, 2, 3이 이어진 문자열입니다. 겉모습은 비슷해 보여도 완전히 다른 값입니다.

예를 들어 아래 코드를 보면 차이가 뚜렷합니다.

public class StringNumberExample {
    public static void main(String[] args) {
        System.out.println(10 + 20);
        System.out.println("10" + "20");
    }
}

실행 결과는 다음과 같습니다.

30
1020

첫 번째는 숫자 덧셈이고, 두 번째는 문자열 이어 붙이기입니다. 자바는 +를 숫자 계산에도 사용하고 문자열 연결에도 사용합니다. 이 특징은 매우 자주 등장하므로 빨리 익숙해지는 것이 좋습니다.

변수 선언과 초기화

변수를 만들 때는 선언과 초기화라는 표현을 자주 씁니다.

선언은 변수를 만드는 것이고, 초기화는 처음 값을 넣는 것입니다.

int count;      // 선언
count = 1;      // 값 대입

int level = 5;  // 선언과 초기화를 동시에 수행

실무든 학습이든, 변수는 가능한 한 의미가 분명한 시점에 선언하고 바로 초기화하는 습관이 좋습니다. 그래야 "이 변수에는 지금 어떤 값이 들어 있지?"라는 혼란이 줄어듭니다.

값 바꾸기와 대입

자바에서 =는 수학의 "같다"라기보다 오른쪽 값을 왼쪽 변수에 넣는다는 의미에 가깝습니다. 이것을 대입이라고 합니다.

int x = 10;
x = 20;

첫 줄에서는 x에 10을 넣고, 둘째 줄에서는 다시 20으로 바꿉니다. 즉, 변수는 상황에 따라 값이 달라질 수 있습니다.

이 개념이 익숙해지면 다음처럼 더 재미있는 코드도 이해할 수 있습니다.

int x = 10;
x = x + 5;
System.out.println(x);

처음엔 조금 이상하게 느껴질 수 있습니다. 수학에서는 x = x + 5가 말이 안 되지만, 프로그래밍에서는 "기존 x의 값에 5를 더한 결과를 다시 x에 저장하라"는 뜻입니다. 결과는 15가 됩니다.

자주 쓰는 기본 자료형 감각 익히기

처음부터 모든 자료형의 크기와 범위를 외울 필요는 없습니다. 대신 언제 어떤 자료형을 쓰는지 감을 잡는 것이 더 중요합니다.

사람의 나이, 점수, 개수처럼 정수 값은 대체로 int로 시작하면 됩니다. 소수점이 필요한 평균, 키, 온도 같은 값은 double이 자연스럽습니다. 참과 거짓만 필요하면 boolean을 사용합니다. 이름, 문장, 주소처럼 글자는 String으로 다룹니다.

즉, 자료형 선택은 "이 값이 어떤 성격을 가지는가"를 표현하는 일입니다. 프로그램은 자료형을 통해 데이터의 모습을 더 분명하게 이해합니다.

간단한 실습: 자기소개 프로그램

이제 배운 내용을 합쳐서 아주 작은 자기소개 프로그램을 만들어 봅시다.

public class Intro {
    public static void main(String[] args) {
        String name = "지우";
        int age = 17;
        double height = 164.2;
        boolean likesJava = true;

        System.out.println("이름: " + name);
        System.out.println("나이: " + age);
        System.out.println("키: " + height);
        System.out.println("자바가 재미있는가: " + likesJava);
    }
}

이 코드에는 지금까지 배운 핵심이 모두 들어 있습니다. 클래스가 있고, main 메서드가 있고, 여러 자료형의 변수가 있으며, println()으로 내용을 출력합니다. 문자열과 변수 값을 +로 이어 붙이는 모습도 확인할 수 있습니다.

이런 작은 프로그램을 직접 여러 번 바꿔 보는 것이 중요합니다. 이름을 바꿔 보고, 나이를 바꿔 보고, 문장 순서를 바꿔 보고, 주석도 넣어 보세요. 코드는 읽는 것보다 손으로 만져 볼 때 더 빨리 익숙해집니다.

자바 키워드는 특별한 단어다

자바에는 이미 특별한 의미가 정해진 단어들이 있습니다. 이런 단어를 키워드라고 합니다.

예를 들어 public, class, static, void, int, double, boolean은 자바 문법에서 특별한 역할을 합니다. 그래서 이런 단어를 변수 이름이나 클래스 이름으로 사용할 수 없습니다.

int class = 10; // 오류 발생

이 코드는 class가 이미 자바의 키워드이므로 사용할 수 없습니다. 초반에는 오류 메시지를 보면 당황하기 쉽지만, 원인을 알고 나면 대부분 간단합니다. "내가 특별한 예약어를 이름으로 쓴 건 아닐까?"를 먼저 점검해 보면 좋습니다.

대소문자를 구분한다는 점을 잊지 말기

자바는 대소문자를 구분합니다. 이 규칙은 생각보다 중요합니다.

int age = 20;
int Age = 30;

이 둘은 자바에게 서로 다른 이름입니다. 사람 눈에는 비슷해 보여도 컴퓨터는 완전히 다른 변수로 받아들입니다.

마찬가지로 String과 string도 다릅니다. 자바에서 문자열 타입은 String이지 string이 아닙니다. 입문자의 오타 중 매우 흔한 실수이니 초반부터 습관을 잘 들이는 것이 좋습니다.

들여쓰기와 코드 모양도 실력이다

컴퓨터는 들여쓰기가 없어도 이해할 수 있는 경우가 많지만, 사람은 다릅니다. 코드가 읽기 쉬워야 실수도 줄어듭니다.

자바에서는 보통 중괄호 안쪽 코드를 한 단계 들여쓰기합니다.

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

이 모양을 지키면 클래스의 범위와 메서드의 범위가 눈에 훨씬 잘 들어옵니다. 처음부터 예쁘게 작성하는 습관을 들이면, 나중에 코드가 길어졌을 때 큰 도움이 됩니다.

초보자가 자주 하는 실수

처음 자바를 배울 때는 비슷한 실수를 반복하기 쉽습니다. 하지만 이런 실수는 오히려 좋은 학습 기회가 됩니다. 오류를 많이 보고, 왜 틀렸는지 이해하는 과정에서 문법 감각이 생기기 때문입니다.

대표적인 실수는 다음과 같습니다.

  • 문자열에 작은따옴표를 쓰거나 문자에 큰따옴표를 쓰는 경우

  • 문장 끝의 세미콜론을 빼먹는 경우

  • 클래스 이름과 파일 이름을 다르게 쓰는 경우

  • main 메서드 형태를 잘못 적는 경우

  • 변수 이름의 대소문자를 다르게 입력하는 경우

예를 들어 아래 코드는 문자열 표기가 잘못된 예입니다.

String name = '민수'; // 오류

문자열은 큰따옴표를 사용해야 하므로 이렇게 고쳐야 합니다.

String name = "민수";

반대로 문자 하나를 저장하는 char는 작은따옴표를 사용합니다.

char grade = 'A';

이런 작은 차이가 문법 오류를 만들기 때문에, 코드를 읽을 때 기호 하나하나를 꼼꼼히 보는 습관이 중요합니다.

Hello World를 이해했다는 것은 무엇을 뜻할까

단순히 문장을 출력했다고 해서 학습이 끝난 것은 아닙니다. 정말 이해했다는 것은, Hello World 코드의 각 요소가 어떤 역할을 하는지 설명할 수 있다는 뜻입니다.

예를 들면 이런 질문에 답할 수 있어야 합니다.

  • 왜 코드는 클래스 안에 들어가는가?

  • 프로그램은 왜 main 메서드에서 시작하는가?

  • 문자열은 왜 큰따옴표를 쓰는가?

  • 문장 끝에는 왜 세미콜론이 필요한가?

  • 변수는 왜 필요하고, 자료형은 왜 정해야 하는가?

이 질문에 막힘 없이 답할 수 있다면, 이제 자바 코드는 더 이상 낯선 기호 덩어리가 아닙니다. 구조가 보이기 시작했다는 뜻입니다.

정리

이 장에서는 자바 프로그램의 최소 구조를 배웠습니다. 클래스는 코드를 담는 기본 단위이고, main 메서드는 프로그램의 시작점입니다. System.out.println()으로 화면에 내용을 출력할 수 있고, 주석으로 설명을 남길 수 있습니다. 식별자는 이름을 짓는 규칙이며, 변수는 값을 저장하는 상자입니다. 그리고 자료형은 그 상자에 어떤 종류의 값을 넣을지 결정합니다.

아직은 코드가 짧고 단순하지만, 이 기초는 앞으로 배우는 모든 문법의 바탕이 됩니다. 조건문도, 반복문도, 메서드도, 객체지향도 결국은 이런 기본 구조 위에서 움직입니다.

Hello World는 작지만 결코 가벼운 예제가 아닙니다. 자바 세계의 현관문이기 때문입니다. 이제 문을 열었으니, 다음 장에서는 연산자와 조건문, 반복문을 통해 프로그램의 흐름을 직접 움직여 보게 됩니다.

책 목록

처음부터 실무까지 단계별로 배우는 JAVA 학습

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기