3 분 소요

Chapter 01 자바를 시작하기 전에

1. 자바

1.1 자바란?

자바는 썬에서 개발하여 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다.
가장 중요한 특징은 자바로 작성된 프로그램은 운영체제의 종류에 관계없이 실행이 가능한 것이다.
지금도 자바는 꾸준히 자바의 성능을 개선하여 새로운 버전을 발표하고 있으며 다양한 최신 기술을 지원함으로써 활동영역을 계속해서 넓혀 가고 있다.

1.2 자바의 역사

자바는 1991년에 썬 엔지니어들이 고안한 오크(Oak)라는 언어에서부터 시작되었다.
그들의 원래 목표는 가전제품에 탐재될 소프트웨어를 만드는 것이였지만 C++로는 목적을 이루기에 부족하여 새로운 언어를 개발에 이르렀다. 원래는 소형기기에 사용될 목적이였으나 여러 종류의 운영체제를 사용하는 컴퓨터들이 통신하는 인터넷이 등장하자 인터넷에 적합하도록 개발 방향을 바꾸면서 이름은 자바(Java)로 변경하였다. 그리고 1996년 1월에 정식 버전을 발표했다.
앞으로도 자바의 원래 목표였던 소규모 가전제품과 대규모 기업환경을 위한 소프트웨어 개발 분야에 활발히 사용될 것으로 기대된다.

1.3 자바 언어의 특징

아래는 자바 언어의 대표적인 특징이다.

  1. 운영체제에 독립적이다.
  2. 객체지향언어이다.
  3. 비교적 배우기 쉽다. 자바1.8이후에 나온 스트림으로 인해 쉬운지는 모르겠다… C언어에 비해 쉽지 파이썬이 더 낫지않을까….
  4. 자동 메모리 관리(가비지컬렉터) 좋은 기능이나 너무 믿지 말자. 언제 작동되는지는 알고써야한다
  5. 네트워크와 분산처리를 지원한다.
  6. 멀티쓰레드를 지원한다.
  7. 동적 로딩(Dynamic Loading)을 지원한다.

1.4 JVM(Java Virtual Machine)

JVM은 자바를 실행하기 위한 가상 머신이다. 가상 머신은 소프트웨어로 구현된 하드웨어를 뜻하는 넓은 의미로 사용이 되며 컴퓨터 성능이 향상됨에 따라 더 많은 하드웨어들이 소프트웨어화되어 컴퓨터 속으로 들어오고 있다. 예로 핸드폰에는 마우스나 키보드가 따로 있는 것이 아니라 안에 센서와 소프트웨어로 이루어져있다. 제가 생각한 예시여서 좋은 예시인지는 모르겠네요

이것이 중요한 이유는 자바로 작성된 프로그램은 모두 JVM에서만 실행이 된다. 그렇기에 자바 애플리케이션을 실행시키기 위해서는 JVM 필수이다.

애플리케이션 컴파일 방식

  • 자바 : 컴퓨터(하드웨어) <-> OS(Windows) <-> JVM <-> Java 애플리케이션
  • 일반 : 컴퓨터(하드웨어) <-> OS(Windows) <-> 일반 애플리케이션

컴파일 방식을 보면 일반은 OS에서 바로 일반 애플리케이션으로 가는 것에 비해 자바는 JVM이 추가외었습니다. 그래서 속도가 느리다는 단점을 같고 있었으나 JIT컴파일러와 향상된 최적화 기술로 인해 속도의 격차를 많이 줄였다.

자바가 운영체제에 독립적이라는 것은 일반적으로 OS와 애플리케이션이 바로 연결되어있기에 해당 OS 종속적이다. 하지만 자바는 JVM을 통해서 상호작용하기 때문에 OS와 하드웨어에 독립적이다. 하지만 JVM은 OS에 종속적이다. 해당 OS에 JVM이 실행이 되야한다. 그냥 흠…. 모르겠다…

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

이 부분은 다른 블로그들이 상세히 설명을 해두었기에 알아두면 좋을 것들만 적어두겠다.

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

  • javac.exe : 자바 소스코드를 바이트코드로 컴파일한다
  • java.exe : 자바 인터프리터로 컴파일러가 생성한 바이트코드를 해석하고 실행한다.
  • javap.exe : 역어셈블러로 컴파일된 클래스파일을 원래의 소스로 변환한다. 이건 나도 몰랐네;;;
  • javadoc.exe : 자동문서생성기로 소스파일에 있는 주석(/** */)을 이용하여 Java API 문서와 같은 형식의 문서를 자동으로 생성한다.
  • jar.exe : 압축프로그램이다.

JDK 안에 JRE이 있고 그 안에 JVM이 있다. 그러니까 개발할땐 JDK가 필요하고 애플리케이션을 돌릴려면 JRE만 있어도 된다

2.2 Java API 문서 설치하기

http://java.sun.com/에서 Java API문서를 볼 수 있으며 좀 양이 많지만 일단 자주 사용하는 것부터 보자. 그리고 영어지만 구글 번역기 돌리면 읽을만 하다. 아니면 영어 공부도 할겸 원문으로 읽어보자

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

3.1 Hello.java

자바 프로그램을 개발할려면 JDK 설치 외에 편집기가 필요하다. 다양하고 좋은 편집기가 많지만 해당 저자는 메모장 또는 editplus를 추천을 한다. EclipseIntelliJ는 자바에 익숙해진 후에 사용하는 것을 추천한다(개인적인 생각으로는 자동완성이 없는 상태에서 하면서 익숙해지길 바라는 듯하다).

예제 1-1 /ch1/Hello.java

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

위의 예제를 편집기를 통해 작성한 다음에 Hello.java로 저장을 하자.
그 후에 javac.exe를 사용하여 Hello.java를 컴파일하여 Hello.class를 생성해야한다.

Hello.java 작성 -&gt; (javac.exe 컴파일) -&gt; Hello.class 생성 -&gt; (java.exe 실행) -&gt; "Hello, world." 출력 command 창을 열어서 해당 파일 위치로 가서 `javac Hello.java`를 치면 `Hello.class`가 생성이 된다. 이후에 `java Hello`를 치면 command 창에 `Hello, world.`가 적히는 것을 확인할 수 있다.

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

여기에 안적혀져있다면 인터넷에서 찾아보자

  1. cannot find symbol 또는 cannot resolve symbol
    선언되지 않은 변수나 메소드를 사용하거나 이름을 잘못 입력한 경우.
  2. ';' expectd
    세미콜론이 없다는 뜻. 자바의 모든 문장의 끝에는 ';'가 붙어야한다.
  3. Exception in thread "main" java.lang.NoSuchMethodError: main
    main메서드를 찾을 수 없다는 뜻이다. public static void main(String[] args)의 존재여부와 오타가 있는지 확인해봐야한다.
  4. Exception in thread "main" java.lang.NoClassDefFountError: Hello
    Hello라는 클래스를 찾을 수 없다는 뜻이다. 제대로 Hello.java를 컴파일했는지와 컴파일된 파일이 제대로 존재하는지 확인하자. 만약 클래스파일이 있는데 동일한 오류가 나타난다면 classpath의 설정을 확인해보자
  5. illegal start of expression
    해당 에러는 괄호나 수식이나 if문, for문 등에서 문법적 오류가 있을 때 발생한다. 또는 public이나 static과 같은 키워드를 잘못 사용한 경우에도 발생한다.
  6. class, interface, or enum expected
    class나 interface 또는 enum이 없다 라는 뜻이지만 보통은 괄호가 제대로 안열리거나 안닫혔을 경우 나타난다.

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

해당 부분은 인터넷을 통해 사진으로 이해하는 것이 더 빠르다고 판단하여 적지 않는다.

3.4 주석(comment)

프로그램을 작성할때는 혼자만 작성하는 것이 아니라 협업이다. 그렇기에 코드를 작성하고 나만 알아볼 수 있어서는 안된다. 혼자만 볼 코드더라도 몇주 뒤에 다시 보면 헤멜 경우가 많다. 그런 경우를 대비하기 위해 개발자들은 주석을 사용한다.

자바에서 주석은 2가지 방법이 있다.

  • 한 줄 주석 : //부터 해당 라인 끝까지의 내용은 주석으로 간주된다.
  • 범위주석 : /**/사이의 내용은 주석으로 간주된다.

    추가적인 것은 javadoc을 참고하길 바란다.