[JAVA] Java와 C/C++ 차이, JDK와 JRE 차이

mingsso·2023년 10월 8일
0

Java-Kotlin

목록 보기
8/17

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

profile
🐥👩‍💻💰

0개의 댓글