해석 방법에 따른 언어 분류
Compiler vs Interpreter
-
Compiler
소스코드 작성 -> 번역 -> 미리 번역된 기계어 -> 실행
언어 : C, C++,
장점 : 번역 과정 오류 체크, 실행속도 상향
단점 : 수정 시 컴파일 필수
-
Interpreter
소스코드 작성 -> 실행 -> 해석 -> 즉시 번역
언어 : Python, JavaScript
장점 : 즉시 결과 확인 가능
단점 : 오류 가능성 높음, 실행속도 느림
절차적 방식 vs 비절차적 방식 / OOP
Java Language
Version
JDK 11
JDK 8
Concept
Write Once, Run Everywhere
- 어느 환경에서도 작동 하도록
Keywords
- PL
- For Client-Server
- Runs on all Platforms (w/ JVM)
- Syntax : derived from c/c++
- Object-Oriented
- Statically Typed (형 변환이 자유롭지 않음)
Features
-
높은 이식성
- JRE > JVM
- compiler가 소스코드를 .class 형태의 바이트코드 생성
- JVM이 바이트 코드를 해석
-
객체지향
- 객체지향 개발 : 서로 협력하는 다수의 객체들을 조합하는 개발 방식
- 부품-완제품의 관계 / 객체는 언제든 교체 가능
- 캡슐화, 상속, 다형성 지원
-
단순한 문법과 개발 편의성
- C/C++ Syntax와 C++의 객체지향에서 영향
이해하기 어려운 포인터, 다중상속 등은 제외 (장점만 받아들이고 어려운 부분 제거)
- 메모리 관리를 자바가 직접관리
개발자가 직접 메모리에 접근 x / Garbage Collector가 사용하지 않는 메모리 제거
-
그 외 특징들
- 동적 로딩 (필요한 시점에 객체 로딩 / 변경 필요 부분만 수정)
- 풍부한 오픈소스 라이브러리, 생태계
- 범용 개발 언어
※ Java의 위기
- 다양한 플랫폼과 언어의 등장
- JVM 언어의 약진 (Scala, Groovy, Kotlin 등 JVM에서 구동 가능한 언어들)