Java 언어의 특징

  • 운영체제에 독립적

  • 객체지향언어

  • 비교적 배우기 쉬움

  • 자동 메모리 관리(Garbage Collection)

  • 네트워크와 분산처리 지원

  • 멀티쓰레드 지원

  • 동적 로딩(Dynamic Loading) 지원



JDK와 JRE

  • JDK (Java Development Kit)

    • 자바 개발 도구

    • JRE + 개발에 필요한 실행파일(javac.exe 등)

  • JRE (Java Runtime Environment)

    • 자바 실행 환경 : 자바로 작성된 응용프로그램이 실행되기 위한 최소 환경

    • JVM + 클래스 라이브러리(Java API)



Java 실행

  • Hello.java(Java 소스파일) 작성
$ vi Hello.java

class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, world."); // 화면에 글자를 출력한다.
    }
}

$ ls
Hello.java
  • javac.exe로 컴파일 - Hello.class 생성
$ javac Hello.java
$ ls
Hello.java    Hello.class
  • java.exe(자바 인터프리터)로 Hello.class 실행 - Hello, world. 출력

    • 프로그램을 실행할 때 main 메서드를 먼저 호출하도록 약속
$ java Hello
Hello, world.



Java Hello 실행 과정

  1. 프로그램 실행에 필요한 클래스(*.class)를 로드한다.

  2. 클래스파일을 검사한다. (파일형식, 악성코드)

  3. 지정된 클래스(Hello)에서 main(String[] args)을 호출한다.

    • main 메서드의 첫 줄부터 코드가 실행되기 시작하여 마지막 코드까지 모두 실행되면 프로그램에서 종료되고, 프로그램에서 사용했던 자원들은 모두 반환된다.



Java Program 실행 조건

  • [자바의 모든 코드] ⊂ [클래스] ⊂ [Java 애플리케이션]

  • Java 어플리케이션은 main 메서드가 반드시 하나는 있어야 실행 가능

    • 실행시 java [main 메서드가 있는 클래스명]
  • 하나의 소스파일에 둘 이상의 클래스를 정의할 수 있음

    • 단 소스파일의 이름은 public class의 이름과 일치해야 함

    • 클래스파일은 클래스마다 한 개씩 만들어짐



자주 나오는 에러

  • cannot find symbol 또는 cannot resolve symbol

    • 저장된 변수나 메서드를 찾을 수 없다는 뜻

    • 선언되지 않은 변수나 메서드를 사용하거나, 변수 또는 메서드의 이름을 잘못 사용한 경우에 발생

    • 자바는 대소문자를 구분함

  • ’;’ expected

    • ; 세미콜론이 필요한 곳에 없음

    • 자바의 모든 문장의 끝에는 ‘;’를 붙여줘야 함

  • Exception in thread “main” java.lang.NoSuchMethodError : main

    • main 메서드를 찾을 수 없음

    • 클래스 내에 main 메서드가 존재하지 않거나, main method에 오타가 발생하는 경우

    • main 메서드가 클래스에 정의되어있는지, 선언부에는 오타가 없는지 확인

  • Exception in thread “main” java.lang.NoClassDetFoundError: Hello

    • Hello라는 클래스를 찾을 수 없음

    • .class 파일이 생성되었는지 확인

    • 반복해서 발생한다면 classpath 설정을 재확인

  • illegal start of exresspion

    • 문장(수식)의 앞부분이 문서에 맞지 않음

    • 문장에 문법적 오류가 발생했다는 의미

    • 괄호 “(“ “{“를 열고서 닫지 않을 때,

    • 수식이나 if문, for문 등에 문법적 오류가 있을 때

    • public이나 static과 같은 키워드를 잘못 사용한 때

  • class, interface, or enum expected

    • ‘키워드 class나 interface 또는 enum이 없다’는 의미

    • 보통 괄호의 열린 괄호와 닫힌 괄호의 개수가 일치하지 않는 경우에 발생