Java의 특징
Simple
: C++보다 간단 but 느림Object Oriented Programming
: 객체지향 프로그래밍 언어Garbage Collection
: GC가 메모리를 자동관리Platform Independent
: JVM(Java Virtual Machine)에서 동작하기 때문에 운영체제에 상관없이 작동 가능Multi Thread
: 자바는 thread 생성 및 제어와 관련된 library API를 제공하기 때문에 구현이 쉬움
여러 thread에 대한 scheduling을 Java Interpreter가 담당Dynamic Loading
: 실행 시 모든 객체가 생성되지 않고 필요한 시점에 class를 동적로딩해서 객체생성
일부 class 변경되어도 전체 application을 다시 compile 하지 않아도됨 - 유지보수가 빠르고 간편Open Source Library
: 오픈소스 언어이기 때문에 다양한 라이브러리 활용가능
Java Code 실행과정
.java
: Java로 작성된 소스파일 생성.class
: Compiler를 통해 byte code로 compileJava program
: Interpreter를 통해 JVM에서 실행
JVM (Java Virtual Machine) 자바 가상 머신
-
- Java에서 각각의 OS (Application=JVM’s platform)에 맞는 JVM(Java’s platform) 제공
- 운영체제에 독립적, JDK만 있으면 실행가능
JDK(Java Development Kit) : 자바개발도구, JVM 포함
(platform이란 상대적, OS’s platform은 hardware pc)
- 일반 application code는 os만 거치고 하드웨어로 전달
but Java Application은 JVM을 한번 더 거침, 실행 시 해석(interpret)되기 때문에 속도가 느리다는 단점
그러나 요즘엔 바이트코드 (compile 된 자바 코드)를 하드웨어의 기계어로 바로 변환해 주는 JIT 컴파일러와 향상된 최적환 기술이 적용되어서 속도 격차를 많이 줄였다
Java’s platform
- J2SE : 일반 데스크탑pc
- J2EE : 서버용pc
- J2ME : 소형제품
API (Application Programming Interface)
: 응용프로그램에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스
Java에 기본으로 내장되어 있는 API + 개발자가 추가적으로 만든 API
Java 실행환경 / 개발환경
- 실행환경 : JDK (JRE + tool)
- 개발환경 : JAVA_HOME, path, classpath
JAVA_HOME
: JDK(JRE)있는 폴더를 자바홈으로 환경변수 잡아주기 - JDK 없는 폴더에서도 사용가능
(ex) cmd창에서 javac 명령어가 제대로 실행되려면 잡아줘야함)path
: 실행파일을 찾아오는 경로 - 실행프로그램의 위치만을 나타냄classpath
: 클래스를 찾아오는 경로 - 실행프로그램에서 사용하는 라이브러리의 위치를 나타냄 (default :.;
현재폴더)
Source code & Class code
Java는 따로 관리함 but Eclipse는 자동으로 컴파일해서 bin에 컴파일된 byte code 저장해줌, src에 source code
Access Modifier
- public : 모든 접근허용
- protected : 동일패키지, 하위패키지 접근허용
- default : 동일패키지 접근허용
- private : 현재 객체내에서만 접근허용