자바에 대한 얘기를 하기에 앞서, 이펙티브 자바를 완수하기 위해 열심히 읽었지만,, 아무래도 지금 내 수준에서 감당하기 어려운 책이라는 생각이 들어,, 중고서점에서 급히 구해온 자바의 정석
으로 개념을 숙지하고 이펙티브 자바로 다시 돌아갈까 한다.
1996년 1월에 썬 마이크로시스템즈에 의해 탄생한 객체지향 프로그래밍 언어이다. 처음 목표는 썬의 엔지니어들이 가전제품에 탑재할 소프트웨어를 만들기 위해 개발에 시작했다. 그러나 운영체제를 사용하는 컴퓨터들이 통신하는 인터넷의 등장으로, 개발 방향을 바꾸어 운영체제에 독립적이었던 오크(이전에 개발한 언어)를 발전시키기로 결심했다! 여기서 오크가 자바
로 이름이 탈바꿈 된다.
JVM 포스팅때도 언급하였던, [1] 운영체제에 독립적 이라는 큰 장점을 갖기 때문에, 다양한 종류의 컴퓨터, 운영체제가 공존하는 인터넷에 적합한 언어로 사용자를 단숨에 얻을 수 있었다.
(그대신 JVM이 운영체제에 종속적이다. 자바 응용 프로그램은 JVM과 통신하기 때문에 JVM이 특정 운영체제가 이해할 수 있는 바이트 코드로 변경해야 하기 때문)
또한 [2] C++(연산자+기본구문)과 스몰톡(객체지향) 의 장점만을 채택하여 비교적 이해하기 쉬운 표현을 사용하여 접근이 쉬웠다.
(처음 들어본 small talk
는 동적형, 반영(런타임 시점에 사용되는 자신의 구조와 행위 관리하고 수정)을 지원하는 객체 지향 언어이다.
또한 클래스가 객체이기 때문에 가상 기계 속의 "이미지"라는 구조로 표현 및 저장된다)
마지막으로, [3] 클래스 라이브러리를 통해 필요한 요소를 모두 제공하므로 간단히 라이브러리를 가져오기만 해도 프로그램을 작성할 수 있는 간편함도 가진다.
더 많은 특징이 적혀있지만 내가 잘 모르는 것 위주로 적어본다.
- 객체 지향 언어 => 상속, 캡슐화, 다형성, 추상화
(말이 길어질 거 같으니 다음 포스팅에서 정리하도록 하겠다)- 자동 메모리 관리
(JVM의 Garbage Collector와 스택과 힙 영역의 데이터를 참조되지 않을 때 알아서 제거해줌)- 네트워크 & 분산처리 지원
- 멀티 쓰레드(한 프로세스 내에서 여러 개의 스레드 동시 실행) 지원
(시스템에 관계 없이 구현 가능 + 라이브러리가 제공)- 동적 로딩 지원
(동적 로딩 지원을 통해 실행 시 필요한 클래스만 로딩하여 사용 가능)
클래스
안에 존재해야 한다. public static void main(String[] args)
(즉 메인 메서드)는 무조건 존재해야 한다!!class Ex1 {
public static void main(String[] args) {
System.out.println("안뇽안뇽");
}
}
이름.java파일
을 생성하면 public class 이름(대표 클래스)
으로 생성해줘야함! (찾아보니 이것에 대한 이유는 명확하게 없는듯함 / 인터넷에서는 코드의 가독성을 위함이라고 하는듯..)http://www.tcpschool.com/java/java_thread_multi
자바의 정석, 2nd Edition
https://wikidocs.net/262