Menu

자바 문법: 클래스, 메서드, 문장, 중괄호

자바 프로그램의 형태 - main 메서드, 문장과 세미콜론, 블록과 중괄호, 그리고 코드가 실행되기도 전에 컴파일러가 강제하는 규칙들.

이 페이지에는 실행 가능한 에디터가 있습니다 - 편집하고 실행하면 결과를 바로 볼 수 있습니다.

자바 프로그램은 어떻게 생겼나

앞 페이지에서는 자바를 실행해 보았습니다. 이제 코드 자체가 실제로 무엇으로 이루어져 있는지 살펴봅시다. 자바는 엄격하고 명시적입니다. 모든 프로그램이 따라야 하는 고정된 형태가 있고, 컴파일러는 단 한 줄이 실행되기도 전에 그 형태를 검사합니다.

다음은 가능한 가장 작은 완전한 자바 프로그램입니다. 실행해 보세요:

한 줄을 출력하기에는 단어가 꽤 많고, 파이썬이나 자바스크립트와 달리 어느 것도 생략할 수 없습니다. 모든 조각이 필수이므로 각각이 무엇을 하는지 이해해 둘 가치가 있습니다. 바깥에서 안쪽으로 하나씩 뜯어보겠습니다.

모든 것은 클래스 안에 있다

자바에는 파일 최상위에 떠다니는 "느슨한" 코드가 없습니다. 모든 코드는 class 키워드와 이름으로 선언되는 클래스 안에 존재합니다:

public class Main {
    // everything goes in here
}

여는 {와 그에 대응하는 닫는 }가 클래스의 본문을 표시합니다. 이름 Main은 여러분이 정할 수 있지만, 한 가지 중요한 규칙이 있습니다: 일반적인 .java 파일에서 public 클래스는 파일 이름과 정확히 일치해야 합니다. public class MainMain.java에 속합니다. 대소문자를 틀리면 컴파일러는 빌드를 거부합니다.

클래스가 실제로 무엇인지는 클래스 장에서 배우게 됩니다. 지금은 public class Main { ... }를 코드를 감싸는 필수 래퍼로 여기세요.

main 메서드가 출발선이다

자바 프로그램을 실행하면 런타임은 실행을 시작할 특정 메서드 하나를 찾습니다:

public static void main(String[] args) {
    // your code starts here
}

이 시그니처는 협상의 여지가 없습니다. 각 단어는 제 역할이 있습니다:

  • public - 런타임이 클래스 밖에서 이 메서드에 접근할 수 있다.
  • static - 클래스의 객체를 먼저 만들지 않고도 실행된다.
  • void - 끝날 때 아무것도 돌려주지 않는다.
  • main - 런타임이 찾는 정확한 이름.
  • String[] args - 프로그램에 전달된 명령줄 인수의 배열.

단어 하나라도 잘못되면 - static 대신 Static, String[] args 대신 String args - 코드는 컴파일될 수도 있지만, 실행 시 Error: Main method not found in class Main로 실패합니다. 이 메시지는 거의 항상 이 줄에 오타가 있다는 뜻입니다.

문장은 세미콜론으로 끝난다

문장은 하나의 완전한 명령입니다. 자바에서는 모든 문장이 세미콜론 ;으로 끝납니다. 컴파일러는 세미콜론을 사용해 한 명령이 어디서 멈추고 다음 명령이 어디서 시작하는지 알아냅니다 - 줄바꿈은 컴파일러에게 의미가 없습니다.

줄바꿈이 무시되기 때문에 세 문장을 모두 한 줄에 두어도 동작합니다 - 물론 자바를 그렇게 쓰는 사람은 없지만요:

int score = 90; score = score + 5; System.out.println(score);

세미콜론을 빠뜨리면 컴파일러는 프로그램이 실행되기 전에 여러분을 멈춰 세웁니다:

int score = 90
System.out.println(score);
error: ';' expected
        int score = 90
                      ^

세미콜론 누락은 초보자로서 마주치게 될 가장 흔한 컴파일 오류입니다. 컴파일러가 어떤 줄을 가리키면 그 줄도 확인하세요 - 진짜 누락은 흔히 거기에 있습니다.

블록과 중괄호

중괄호 { }는 문장들을 블록으로 묶습니다. 클래스 본문도 블록이고, 메서드 본문도 블록이며, if나 반복문의 본문도 블록입니다. 블록은 다른 블록 안에 중첩될 수 있습니다:

문장과의 차이에 주목하세요: 블록을 여는 줄은 세미콜론이 아니라 {로 끝나며, 메서드, 클래스, if, 반복문의 닫는 } 뒤에는 세미콜론을 붙이지 않습니다. 이를 헷갈리는 것은 초기의 전형적인 실수입니다:

public static void main(String[] args) {
    System.out.println("hi");
}; // <- this semicolon is unnecessary (and after a class/method, wrong)

예제의 들여쓰기는 순전히 사람을 위한 것입니다. 자바는 그것을 무시하지만, 일관된 들여쓰기는 여러분과 다른 모두가 어떤 {가 어떤 }와 짝을 이루는지 파악하는 방법입니다. 에디터의 자동 들여쓰기에 맡기면 중괄호가 알아서 정렬됩니다.

자바는 대소문자를 구분한다

자바는 대문자와 소문자를 완전히 다른 것으로 취급합니다. score, Score, SCORE는 세 개의 별개 이름입니다. 키워드와 내장 이름에도 똑같이 적용됩니다:

system.out.println(소문자 s)이라고 쓰거나 String Name이라고 써 놓고 name을 사용하려 하면 컴파일러가 거부합니다. 초보자가 대소문자를 자주 틀리는 이름 몇 가지:

  • System - 대문자 S. system.out.println(...)은 컴파일되지 않습니다.
  • String - 대문자 S. 소문자 원시 타입과 달리 클래스입니다.
  • void, int, public, static - 모두 소문자. 이들은 키워드입니다.

대부분의 "cannot find symbol" 오류는 대소문자 실수로 거슬러 올라갑니다. 오류는 찾지 못한 심볼이 무엇인지까지 알려줍니다 - 그 대소문자를 여러분이 입력한 것과 대조해 보세요.

조각을 한데 모으기

다음은 이 페이지의 모든 것 - 클래스, main 메서드, 여러 문장, 중첩된 블록, 일관된 대소문자 - 을 사용하는 조금 더 큰 프로그램입니다:

위에서 아래로 읽어보세요: 클래스가 모든 것을 감싸고, main은 실행이 시작되는 곳이며, 각 명령은 ;으로 끝나고, if 본문은 자체 블록으로 묶여 있으며, 모든 내장 이름이 올바른 대소문자로 작성되어 있습니다. 이것이 여러분이 작성하게 될 거의 모든 자바 프로그램의 뼈대입니다.

다음: 주석

이제 여러분은 자바 파일의 구조를 읽을 수 있습니다. 다음으로 더할 것은 사람을 위한 메모 - 컴파일러가 완전히 무시하는 텍스트입니다. 다음 페이지에서는 주석을 다룹니다: 한 줄 형식 //, 블록 형식 /* */, 그리고 주석이 코드 안에서 정말로 제 자리를 얻는 때.

자주 묻는 질문

자바 프로그램의 기본 문법은 무엇인가요?

모든 자바 프로그램은 클래스 안에 존재하며, 실행은 정확히 public static void main(String[] args) 시그니처를 가진 메서드에서 시작됩니다. 문장은 세미콜론으로 끝나고, 코드 블록은 중괄호 { }로 묶입니다. 최소한의 프로그램은 public class Main { public static void main(String[] args) { System.out.println("Hi"); } } 입니다.

자바는 왜 public static void main(String[] args)가 필요한가요?

그것이 바로 자바 런타임이 찾는 진입점이기 때문입니다. public은 런타임이 클래스 밖에서 호출할 수 있게 하고, static은 먼저 객체를 만들지 않고도 실행됨을 뜻하며, void는 아무것도 반환하지 않음을 뜻하고, String[] args는 명령줄 인수를 받습니다. 단어 하나라도 - 대소문자까지 - 바꾸면 프로그램은 컴파일은 되지만 시작되지 않고 Error: Main method not found가 나타납니다.

모든 자바 문장에 세미콜론이 필요한가요?

모든 문장은 세미콜론으로 끝납니다 - 변수 선언, 할당, 메서드 호출 등이 그렇습니다. 하지만 블록으로 끝나는 줄(if, for, while, 클래스나 메서드의 헤더)은 대신 {로 끝나며, 그런 블록의 닫는 } 뒤에는 세미콜론을 붙이지 않습니다. 세미콜론을 빠뜨리는 것은 자바 초보자가 가장 흔히 내는 컴파일 오류입니다.

Coddy programming languages illustration

Coddy로 코딩 배우기

시작하기