개인적으로 블록체인, 특히 R3의 Corda를 공부하다 보니 Java에 대한 지식이 필요하여 오라클에서 발매된 "Java a beginner's guide" 라는 책을 보고 있습니다.
프로그래밍 언어에 대한 책들을 그렇게 많이 본 건 아니지만, 이 책은 제가 지금까지 본 책들 중에서는 가장 잘 씌여진 게 아닌가 생각이 들 정도로 좋은 책이라는 생각이 듭니다.
프로그래밍에 대한 아무런 사전 지식이 없는 사람부터, 다른 언어(C나 파이썬 등) 에 대한 지식이 어느 정도 있는 사람까지 모두 이 책을 통해 자바에 대한 지식을 많이 얻을 수 있도록 잘 쓴 책 이라고 생각 합니다.
그래서, 블로그에 이 책의 내용을 기반으로 자바의 기초 내용을 정리해 보려 합니다.
이미 온라인에 수많은 자바 관련 글들이 있으므로 본 블로그에 올리는 자바 관련 포스팅들은 제가 공부한 것을 정리하려는 목적이 가장 큽니다. 하지만 자바를 처음 접하는 다른 분들에게 조금이라도 도움이 될 수 있다면 더 좋겠네요.
책의 한 챕터마다 포스팅 하나씩 핵심 내용위주로 정리해 보려 하며, 본 블로그에 올리는 소스 코드들의 저작권은 책의 저자 herbert schildt에게 있음을 알려 드립니다.
환경 설정
- PC : 윈도우 (맥이나 리눅스도 가능)
- Java SE : 최신 버전 설치. JDK 설치 필수.
http://www.oracle.com/technetwork/java/javase/downloads/index.html - IDE : IntelliJ IDEA 무료 버전 사용 (Community version)
https://www.jetbrains.com/idea/download/
Java Fundamentals
Bytecode 바이트코드
자바는 인터프리터 언어로 설계 되었지만, C 등의 컴파일러 언어와 Python 등 인터프리터 언어의 중간적인 성격을 가지고 있습니다. 소스 코드를 컴파일하면 자바 가상머신 (Java Virtual Machine, JVM) 상에서 실행되는 바이트코드가 생성됩니다. 생성된 바이트코드를 자바 가상머신에서 실행하면 실제로 프로그램이 실행되는 구조입니다.
가상머신에서 바이트코드를 실행시키는 방식이 바이너리 코드를 바로 실행하는 것에 비해 아주 느리지 않을까 싶지만, 실제로는 바이트코드는 매우 효율적으로 최적화 되어 있기 때문에 가상 머신의 사용으로 인한 성능 저하는 그렇게 크지 않다고 합니다.
Object-Oriented Programming 객체지향 프로그래밍의 특징
- Encapsulating
보통 "캡슐화" 라고 번역합니다. 간략히 설명하자면 코드와 데이터를 하나로 묶어서, 외부로부터의 간섭이나 잘못된 사용으로부터 보호하는 메카니즘이라고 합니다.
객체 내의 코드 (메서드) 나 데이터 (변수) 는 private 혹은 public으로 정의됩니다. private 코드나 데이터는 같은 객체 내의 다른 부분에서만 억세스 가능합니다.
자바의 가장 중요한 개념인 "class"가 encapsulation의 기본 단위입니다. 클래스는 객체의 형태를 정의하며, 클래스에서 정의된 형태로 실체화된 모습이 객체, object 입니다. - Polymorphism
프로그래밍 언어의 다형성은, 하나의 인터페이스 (자바의 "Interface" 뿐 아니라, 프로그램이 데이터와 상호 작용하는 넓은 범위의) 가 일반성을 가지고 다양한 상황에서 일관된 액션을 할 수 있도록 하는 성질입니다. - Inheritance
상속은 상위 객체의 속성을 하위 객체가 가지는 것입니다.
첫 번째 프로그램
가장 단순한 형태의 자바 프로그램입니다.
이 파일을 Example.java 라는 이름으로 저장합니다. 자바에서 모든 코드는 클래스 내부에 있어야 하며 (예외가 있지만), 메인 클래스의 이름과 소스코드 파일의 이름은 같게 하는 것이 관례 입니다.
IntelliJ IDEA에서는 컴파일과 실행을 클릭 한번으로 편하게 할 수 있습니다.
아래 그림처럼 메인 클래스나 메인 함수 옆의 초록색 삼각형을 클릭하면 실행 메뉴가 나옵니다.
커맨드라인에서 작업하는 경우, javac 컴파일러를 이용해 바이트코드를 생성하고
javac Example.java
생성된 바이트코드 (이 경우에는 Example.class)를 자바 가상머신 위에서 실행합니다.
java Example
main 메서드와 관련된 키워드들을 간단하게 정리해 보면, 아래와 같습니다.
- public : access modifier. public 멤버는 클래스 밖의 코드에 의해서 억세스가 가능합니다. (위에서 설명한 내용)
- static : main 메서드가 속하는 Example 클래스의 객체의 생성 전에 호출이 가능합니다.
- void : main 메서드의 return형식이 void 즉 리턴 하지 않는 함수임을 표시합니다.
- String args[] : command line parameter 가 args 라는 이름의 문자열 배열로 main 함수에 제공됩니다.