1️⃣ Java와 C/C++ 차이
실행 환경 차이
- JAVA
- 컴파일하면 JVM에서만 실행가능한 바이트코드 형태의 클래스 파일이 생성되고, JVM을 통해 클래스 파일을 실행할 수 있음
- 런타임에 필요한 클래스들이 JVM에 링크되며 클래스 로더가 동적으로 필요한 클래스를 로딩함
- 자바의 클래스 파일이 JVM에 실행되기 때문에 플랫폼이 달라져도 다시 컴파일하지 않아도 됨 (플랫폼 독립적이다)
- ❓동적 바인딩
💡 플랫폼 독립적이란? (= WORA 가능, Write Once Run Anywhere)
- 한번 작성된 코드는 모든 플랫폼에서 실행 가능
- C/C++등 기존 언어가 가진 플랫폼 종속성 극복
- OS, H/W에 상관없이 자바 프로그램이 동일하게 실행됨
- 네트워크로 연결된 어느 클라이언트에서나 실행 가능함 (웹 브라우저, 분산 환경 지원)
- C/C++
- 컴파일러가 중간 단계인 오브젝트 코드를 생성한 후, 링커가 필요한 라이브러리를 링크하여 최종 실행 가능한 실행파일을 생성함 (자바보다 빠르다)
- 오브젝트 코드 및 실행파일은 플랫폼에 따라 다르므로 플랫폼이 달라지면 컴파일 및 링크를 새로 해야함
- ❓정적 바인딩
메모리 관리
- JAVA
- 객체를 항상 Heap영역에만 할당할 수 있음
- GC를 지원하여 메모리 누수를 예방함
- 자바의 클래스 파일이 JVM에 실행되기 때문에 플랫폼이 달라져도 다시 컴파일하지 않아도 됨 (플랫폼 독립적이다)
- ❓객체가 기본값으로 초기화됨
- C/C++
- 객체를 Heap과 Stack 영역에 모두 할당할 수 있음
- 개발자가 직접 메모리를 관리해야 함(GC가 없음) -> 유효하지 않은 메모리(메모리에 할당하였지만, 접근 가능한 참조가 없는 객체)가 존재할 수 있음
- 객체를 초기화하지 않고 생성할 수 있어서 쓰레기 값을 가질 수 있음
상속
- JAVA
- 클래스 다중 상속을 지원하지 않음
- 대신, 다중 상속이 가능한 인터페이스를 지원함
- C/C++
- 클래스 다중 상속을 지원함
- 인터페이스를 지원하지 않음
- 다중 상속 장점: 객체지향의 상속성을 좀 더 유연하게 해줌
- 다중 상속 단점: 다이아몬드 상속 구조가 나타날 수 있으며, 이는 메모리 낭비, 성능 저하로 이어질 수 있음
💡 다이아몬드 상속 구조
하나의 클래스가 여러 상위 클래스의 상속을 받고, 상위 클래스들에 동일한 메소드가 있다면, 어느 상위 클래스의 메소드를 상속받아야 하는지 모호해짐
라이브러리
- JAVA
- C++에 비해 표준 라이브러리가 거대함
- Java SE 표준라이브러리는 컴퓨터 네트워크, 그래픽 사용자 인터페이스, XML처리, 로깅, 데이터베이스 접근, 암호학, 기타 요소들을 모두 제공함
- C/C++
- C++의 표준라이브러리는 문자열, 컨테이너, 입출력 스트림 등의 비교적 범용적인 요소들만 제공함
기타
- JAVA
- 자동으로 배열의 인덱스 검사를 진행함 (범위 초과 시 ArrayIndexOutOfBounds 에러 발생)
- JVM에서 동작되므로 원시 데이터형의 크기가 정해져 있음
- 연산자 오버로딩을 지원하지 않음
- C/C++
- 인덱스 검사를 선택적으로 진행하기 때문에, 인덱스를 잘못 입력해도 에러를 일으키지 않고 쓰레기값을 내놓음
- 시스템에 따라 데이터형의 크기가 달라짐
- 연산자 오버로딩을 지원함
2️⃣ JDK와 JRE 차이
JRE (Java Runtime Environment)
자바 실행 환경
- JRE는 JVM 뿐만 아니라, Java binaries, Java 클래스 라이브러리 등을 포함하고 있어 자바 프로그램의 실행을 지원함
- 컴파일러나 디버거 등의 도구는 포함하지 않음
JDK (Java Development Kit)
자바 개발 키트
- 자바 애플리케이션을 개발하기 위한 환경을 지원함
- JDK는 JRE를 포함할 뿐 아니라, 컴파일러(javac), javadoc, jar 등 개발에 유용한 도구들을 포함하고 있음
참고자료
https://sujinhope.github.io/2019/12/09/CS-Java-면접-질문(기술면접-대비).html
https://theheydaze.tistory.com/598
https://velog.io/@chiyongs/Java-VS-C
https://aomee0880.tistory.com/145
https://code-lab1.tistory.com/253
https://jhnyang.tistory.com/203
https://yeolco.tistory.com/119
https://myblog.opendocs.co.kr/archives/1230
https://elevate-yourself.tistory.com/6