- 자바(Java)는 1990년대 초반에 제임스 고슬링(James Gosling)과 그의 팀이 개발한 프로그래밍 언어
- 자바는 초기에는 "Oak"라는 이름으로 시작
- 초기 개발 목표는 소형 가전 기기에서의 사용을 위해 C++보다 간단하고 효율적인 언어를 만드는 것
- 선마이크로시스템즈에서는 Oak를 인터넷과 웹을 위한 프로그래밍 언어로 재조정하기로 결정
- Oak는 자바로 이름이 변경되었고, 1995년에 공식적으로 발표
- 자바는 웹 개발을 위한 기술인 애플릿(Applet)을 도입
- 보안상의 이유로 애플릿(Applet)은 최신브라우저에서 지원되지 않고 대신 서블릿과 JSP가 사용됨
- 운영체제 독립적
- 각 OS에 맞는 JVM을 통해서 한번 개발하면 여러 OS에서 작동하는 프로그램을 만들 수 있다.
- 객체지향적
- 상속, 캡슐화, 다형성이 잘 적용되어 있다.
- 자동 메모리 관리
- 가비지 컬렉터를 통해 메모리를 체크하고 반환하는 작업을 자동으로 처리한다. 수동 처리보다는 비효율적이지만 개발자가 프로그래밍에 집중하도록 도와줘서 생산성이 증대된다.
- 멀티쓰레드 지원
- 동적 로딩 지원
C언어의 특징
- C는 컴파일언어(데니스 리치 아저씨가 만듦) - 메모리 관리를 직접 해줘야 한다. - 메모리 누수 - 필요없는 데이터를 없애주지 않은 것 - 효율적인 메모리 관리가 가능하지만 반면에 모든 메모리 관리를 개발자가 해야한다. - 메모리 주소를 직접 컨트롤 한다.
JDK는 Java 개발 도구이다. JDK에는 Java 프로그램을 개발하는 데 필요한 모든 도구와 라이브러리가 포함되어 있습니다.
주요 구성 요소로는 Java 컴파일러 (javac), 디버거 (jdb), 런처 도구 (java) 등이 있습니다. 또한 JDK는 개발자가 Java 애플리케이션을 빌드, 테스트, 디버깅하고 실행할 수 있는 환경을 제공합니다.
JDK는 JRE(Java Runtime Environment)를 포함하고 있으므로 JDK를 설치하면 JRE도 함께 설치됩니다.
JRE는 Java 실행 환경입니다. JRE는 Java 애플리케이션을 실행하는 데 필요한 모든 구성 요소를 제공합니다.
JRE에는 JVM(Java Virtual Machine)과 Java 클래스 라이브러리들이 포함되어 있습니다. JRE는 Java 애플리케이션을 실행할 수 있는 환경을 제공하며, JDK와는 달리 개발 도구를 포함하지 않습니다.
즉, JRE는 Java 프로그램을 실행하는 데 필요한 최소한의 구성 요소만 포함하고 있습니다.
JVM은 Java 가상 머신입니다. JVM은 Java 바이트 코드를 실행하는 데 사용되며, Java 프로그램을 운영체제와 독립적으로 실행할 수 있도록 합니다.
JVM은 Java 애플리케이션을 실행하기 위해 필요한 메모리 관리, 스레드 관리, 예외 처리 등의 작업을 수행합니다. JVM은 Java 바이트 코드를 기계어로 변환하고 실행하는 역할을 담당합니다.
JVM은 JRE의 핵심 구성 요소이며, JRE는 JVM을 포함하고 있습니다.
JDK-자바 개발 키트 -> 개발용
JRE-자바 런타임 환경(JDK에 포함) -> 실행용
JVM-자바 가상 머신(JRE에 포함)
사람이 작성한 코드를 컴퓨터가 이해할 수 있는 기계어로 바꾸는 것
코드 작성을 완료한 시점에서 컴퓨터가 이해할 수 있는 기계어로 바꾸는 방식이다.
사람이 작성한 코드
x = 10 + 2
y = x + 4
컴퓨터가 이해하는 기계어
위 코드를 컴파일하면 아래와 같아진다.
001001 11101 11101 1111111111111000
001000 00001 00000 0000000000001010
001000 00001 00001 0000000000000010
101011 11101 00001 0000000000000000
001000 00010 00001 0000000000000100
101011 11101 00010 0000000000000100
001001 11101 11101 0000000000001000
컴파일을 실행하는 도구
대표적 언어
C
C++
Go
Rust
인터프리터로 실행되는 언어
코드를 한줄씩 읽어내려가며 실행하는 프로그램
코드를 사용하는 시점에서 한줄씩 컴퓨터가 이해할 수 있는 기계어로 변환한다.
대표적 언어
JavaScript
SQL
Python (스크립트 언어 겸 하이브리드 언어)
컴파일 + 인터프리트
코드 -> 바이트코드 -> 기계어
코드를 작성 완료한 시점에 중간 언어(바이트코드)로 변경하고,
코드를 사용하는 시점에서 중간 언어를 한줄씩 기계어로 변역한다.
대표적 언어
C#
Java
하이브리드 언어는 스크립트 언어의 멀티플랫폼 장점과, 컴파일 언어의 속도를 동시에 가져가려는 언어이다.
컴파일 언어
단점 - os마다 새로 개발해야 한다.
인터프리터 언어
단점 - 느리다
https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%8C%8C%EC%9D%BC_%EC%96%B8%EC%96%B4
https://medium.com/swlh/a-performance-comparison-between-c-java-and-python-df3890545f6d