java는 JVM(java virtual machine)을 활용하여 운영체제와 상관없이 java 프로그램을 실행시킬 수 있다.
객체지향
객체의 사전적 정의는 "주체에 대해 작용의 대상이 되는 쪽"이다. 너무 어려운데 예를 들어 백화점이란 큰 객체가 있고 백화점 안에는 여러 점포들이 있는데 이도 객체라 할 수 있다. 백화점 안에 점포들은 모두 똑같은 모양으로 점포의 이름만 변경하여 백화점에서 물건을 팔수 있다고 가정하자. 그럼 점포의 모양은 계속해서 반복해서 사용하면 된다. 이처럼 객체를 한번 생성하여 여러번 재활용하게 되는 상황을 객체지향이라고 한다.
Garbage Collection (가비지 컬렉션)
자바의 큰 특징중 하나이며 C/C++같은 언어는 메모리에 무언가를 생성하면 직접 소멸시켜주어야한다. 개발자가 직접 메모리를 관리할 수 있다는게 좋은거 같지만 이를 까먹고 소멸시켜주지 않고 지나갔다면 컴퓨터 서버의 메모리가 쌓여서 다운되는 현상을 겪게된다. 자바는 가비지 컬렉션을 활용하여 개발자가 메모리에 직접 관여하지 않아도 메모리에서 더 이상 사용될 수 없거나 참조되지 않는 영역을 모아 자동 소멸 시켜준다.
Multi Thread (멀티 스레드)
스레드란 프로그램 수행 단위를 말한다. 즉 멀티 스레드란 프로그램의 수행하는 단위가 여러개가 존재한다는 것이다.
java platform (자바 플랫폼)
자바 플랫폼이란 간단히 정의하면 자바 프로그램이 실행되기 위해 제공되는 하드웨어적 프로그램이다. 이는 java api와 jvm으로 구성되어 있다.
java api란 GUI와 같은 작은 장치들과 유용한 능력을 제공하는 클래스와 인터페이스의 패키지 묶음이다.
jvm은 추상적인 장치이며 집합, 스택, 힙, 메서드 영역 등으로 구성되어 있다.
자바 플랫폼을 좀 더 구체적으로 나누면
Java Platform, Standard Edition(javaSE) : 일반 프로그램
Java Platform, Enterprise Edition(javaEE) : 서버용
Java Platform, Micro Edition(javaME) : 기타 장치들
JVM (java virtual machine)
자바가 운영체제에 상관 없이 개발할 수 있는 이유이다. 컴파일러에 의해 JVM에서 이해할 수 있는 중간코드 형태로 변경되어지는데 이 파일이 class 파일이다. 즉, java 실행 파일이 class이고 class를 실행시키는 것이 JVM이다. 예를 들어 윈도우에서 exe파일은 실행되지만 리눅스나 기타 운영체제에서는 exe가 실행 파일이 아니므로 실행될 수 없다. 따라서 같은 동작을 하는 프로그램도 윈도우 용과 리눅스 용으로 코드를 수정해서 사용해야하는 불편함이 있지만 java는 하나의 소스코드로 운영체제에 상관없이 프로그램을 실행시킬 수 있다.