1. 자바를 시작하기 전에

1. 자바(Java Programming Language)

1.1 자바란?

  • 1996년 1월에 썬 마이크로시스템즈에서 개발했고, 2010년에 오라클이 썬 인수
  • 객체지향개념 + C++의 장점 채택
  • 풍부한 라이브러리와 다양한 최신기술 지원(J2ME, J2EE, XML, ...)

1.2 자바의 역사

자바의 시작

  • 1991년에 썬 개발자들이 Oak 언어를 개발한 것에서 시작
  • C++로 가전제품에 탑재할 소프트웨어를 개발하다 한계를 느끼고 새로운 언어인 Oak를 개발
    • 인터넷이 등장하면서 OS에 독립적인 Oak가 주목받기 시작했고, Oak를 인터넷에 적합하도록 개발
  • 1996년 1월, Java 정식버젼 발표

자바 버전업 역사

  • JDK Beta (1995)
  • JDK 1.0 (1996)
  • JDK 1.1 (1997)
  • J2SE 1.2 (1998)
  • J2SE 1.3 (2000)
  • J2SE 1.4 (2002)
  • J2SE 5.0 (2004)
  • Java SE 6 (2006)
  • Java SE 7 (2011)
  • Java SE 8 (2014)

참조 : https://en.wikipedia.org/wiki/Java_version_history

1.3 자바언어의 특징

  1. 운영체제에 독립적이다.
    • JVM을 사용하기 때문이다.
    • Write once, run anywhere.
  2. 객체지향언어이다.
  3. 비교적 배우기 쉽다.
    • C++을 안다면 쉬울 것이다......?
  4. 자동 메모리 관리(Garbage Collection)
  5. 네트워크와 분산처리를 지원한다.
  6. 멀티쓰레드를 지원한다.
    • 라이브러리를 지원한다는 이야기.
  7. 동적 로딩(Dynamic Loading)을 지원한다.
    • 클래스를 사용할 때 동적으로 불러온다.

THE Java® programming language is a general-purpose, concurrent, classbased, object-oriented language.

The Java programming language is strongly and statically typed.

The Java programming language is a relatively high-level language, in that details of the machine representation are not available through the language.

It includes automatic storage management, typically using a garbage collector, to avoid the safety problems of explicit deallocation (as in C's free or C++'s delete)

The Java programming language is normally compiled to the bytecode instruction set and binary format.


출처 : The Java® Language Specification Java SE 8 Edition (https://docs.oracle.com/javase/specs/jls/se8/jls8.pdf)

1.4 JVM(Java Virtual Machine)

  • 자바 애플리케이션은 JVM 위에서만 동작한다.
    • 기계어로 변환되어 바로 동작하는 다른 언어들에 비해 속도가 느린 한계가 있다.
    • 최적화 기술과 JIT 컴파일러로 극복하는 중이다.

2. 자바개발환경 구축하기

2.1 자바 개발도구(JDK) 설치하기

JRE, JDK...?

  • JRE - 자바 실행 환경 (Java Runtime Environment)
    • JVM + Java API
  • JDK - 자바 개발 도구 (Java Development Kit)
    • JRE + 개발에 필요한 프로그램들

JDK 다운로드 경로: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

맥에서 jdk 위치

~ $ ls -l `whereis javac`
lrwxr-xr-x  1 root  wheel  75 12 18 19:24 /usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac

jdk에 포함된 executable들

  • javac : 자바 컴파일러. 자바 소스코드 -> 바이트코드 컴파일
  • java : 자바 인터프리터. 컴파일러가 생성한
  • javap : 역어셈블러. 컴파일된 클래스 파일 -> 원래 소스코드로 변환
  • javadoc : 소스파일에 있는 주석 -> java api 형식의 문서를 자동으로 생성
  • jar : 클래스파일 + 프로그램 실행관련 파일 -> 압축/해제

2.2 자바 API문서 설치하기

JDK 8 문서 다운로드

Java 8 API 문서 살펴보기

3. 자바로 프로그램 작성하기

3.1 Hello.java

Hello.java

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

컴파일하고 실행하기

 ~/workspace/javastudy/ch1 $ javac Hello.java
 ~/workspace/javastudy/ch1 $ ls
Hello.class Hello.java
 ~/workspace/javastudy/ch1 $ java Hello
Hello, world.

클래스

Java의 모든 코드는 반드시 클래스 안에 존재해야 한다.

class 클래스이름 {
    /*
        주석을 제외한 모든 코드는 클래스의 블럭{} 내에 작성해야한다.
    */
}

Java의 main

  • 하나의 Java application은 반드시 main을 포함한 class를 하나 가져야한다.

The method main must be declared public, static, and void. It must specify a formal parameter (§8.4.1) whose declared type is array of String. Therefore, either of the following declarations is acceptable:

public static void main(String[] args)

public static void main(String... args)

source file 이름 규칙

  • 하나의 source file에 하나 이상의 class를 정의할 수 있다.
  • source file의 이름은 반드시 source file에 정의한 public class의 이름이어야 한다.
    • source file에 public class가 정의되지 않은 경우 아무 이름이나 상관없다.
file 이름과 public class 이름이 다를 때.

Hello.java

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

컴파일 결과

 ~/workspace/javastudy/ch1 $ javac Hello.java
Hello.java:1: error: class HelloJava is public, should be declared in a file named HelloJava.java
public class HelloJava {
       ^
1 error
public class가 없는 source file의 이름

Test.java

class FirstClass {
}

class SecondClass {
}
 ~/workspace/javastudy/ch1 $ ls
Hello.java Test.java
 ~/workspace/javastudy/ch1 $ javac Test.java
 ~/workspace/javastudy/ch1 $ ls
FirstClass.class  Hello.java        SecondClass.class Test.java

3.2 자주 발생하는 에러와 해결방법

  • 세미콜론, 괄호({}, [], ())를 빼먹는 실수를 하지 말자.
  • source file 이름을 public class 이름으로 정하자.

3.3 자바프로그램의 실행과정

  1. 클래스( .class)파일 로드
  2. 클래스파일 검사(파일형식, 악성코드 체크)
  3. 지정된 클래스에서 main호출
  4. main 처음~끝 순서대로 실행하고
  5. 종료하면 자원 반환

3.4 주석(comment)

여러 줄의

/*
    여러
    줄의
    주석이죠
*/

와 한 줄의

// 주석이야

모두 사용 가능

3.5 이 책으로 공부하는 방법

  • 2장 ~ 9장 : 자바의 기본적인 내용
    • 6장, 7장은 객체지향 개념을 설명하므로 잘 숙지해야 한다.
  • 10장 ~ 16장 : 자바의 응용부분
    • 11, 12, 15장을 제외하고는 나중에 필요할 때 공부하면 된다.

저자의 한마디

  • 길을 잃지 말자.
  • 비교하지 말자.