이 영역을 누르면 첫 페이지로 이동
나눔코딩 블로그의 첫 페이지로 이동

나눔코딩

페이지 맨 위로 올라가기

나눔코딩

01. 기술면접 - 자바 - JAVA 와 C/C++ 차이점

  • 2021.10.20 08:52
  • ∞. 기술 면접/7. 자바
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다

차이점

- 자바와 c/c++ 의 가장 큰 차이점은 실행 환경이다


- java 에서의 개발 혹은 컴파일 + jar 압축
  - 자바는 링크 과정이 없이 컴파일러가 바로 바이트 코드를 생성


- c/c++ 에서의 개발: 컴파일 + 링크

 

다른 블로그 글

- c++ 과 java 는 문법적으로 상당히 유사하다 

- java 를 설계 할 때 c++ 개발자들이 쉽게 배울 수 있도록 만들었기 때문이다

- 하지만 여러 차이점이 있는 데, 이는 설계 목표 차이에서 발생했다

- java 는 보안, 이식성, 빠른 개발에 비중을 두었고, C++ 은 속도와 C 언어의 하위호환성에 중점을 두었다

- 또 한 java 는 가상 머신 바이트 코드로 컴파일하여, 실행시키려면 가상 머신이 필요하지만,
  C++은 각 OS의 머신에 맞는 기계어로 컴파일(java보다 빠른 이유) 한다

- 그래서 일반적으로 c++ 이 빠르긴 하지만, java 가 이식성, 보안성면에서 나은 편이다

- C++ 은 C를 그대로 포함하며 하위 호환성을 유지하기 위해 프로그래머에게 메모리관리 제어, 포인터, 전처리기 같은
  기능을 컨트롤하게 한다

- 하지만 JAVA 에서는 그 외에도 여러 버그를 일으키기 쉬운 기능들을 없애버렸다

- 특히, 프로그래머가 손수 메모리를 비우는 방법 대신 가비지 컬렉션을 사용한다

- 또한, C++의 연산자 오버로드나 다중 상속같은 기능은 쓸 수 없다. 
  (다중 상속 대신 인터페이스로 다중 상속과 유사한 기능을 제공한다)

- 이 때문에 빠른 개발이 필요하고, 성능보다 이식성과 보안이 더 우선시 되는 경우 JAVA를 더 선호하곤 한다

- JAVA 에서는 모든 객체가 reference 로 전달 되지만, c++ 에서는 기본적으로 객체를 값으로 전달한다
  (객체는 Array[] 또는 Class 들을 말하며, int, long, double 과 같은 primitve type 은 값으로 전달한다
   자바에서는 call by value 와 call by reference 가 존재하는 것이다.)

- JAVA 에서는 C++ 에서처럼 자동 casting(=cascading) 을 하지 않지만,  최근 버전에서는 제너릭(Generic)이나
  오토박싱(primity(long) -> wrapper class (Long)) 같은 기능이 추가되어 여러 상황에서 자동 cating 이 가능하다

- JAVA 에서는 모든 메소드가 가상 메소드이다. 즉, 레퍼런스 유형이 아니라 객체 유형에 따라 메소드 구현이 결정된다
  C++ 에서는 가상 메소드를 별도로 선언해줘야 한다

- JAVA 에서는 원시 데이터형의 크기가 정의 되어있지만, C++ 에서는 구현에 따라 데이터형의 크기가 달라진다

- 기본에 만든 c코드가 있고, 성능이 매우 중요할 때는 C++ 쓰는 쪽이 유리하지만, 이식성, 보안, 개발 속도등이
  중요한 상황에서는 JAVA 와 C#을 선택하는 것이 낫다

 

또 다른 블로그 글

1. 설계 목표
  - JAVA 설계할 때, 보안과 빠른 이식성에 집중했다
  - C++ 속도와 C와의 하위 호환성에 집중했다
    - C++ 은 절차지향언어인 C의 효율성 측면을 개선하기 위해 OOP(Object Programing Programing)을 결합한 것이기
      때문
    - 완벽한 OOP 가 아닌 절차지향도 섞여 있어 약점이 많다

2. 클래스 차이
  - JAVA : 기본 단위가 Class 로, 거의 완전한 OOP 라고 보면 된다
  - C++ : C언어의 상위 호환이기 때문에 절차지향이 섞여있다

3. 컴파일과 런타임의 차이
  - JAVA : 가상머신 바이트 코드로 컴파일 하며, 이를 실행 시키기 위해서는 가상 머신(JVM) 이 필요함
  - C++ : 각 운영체제(Window, Linux, Mac)에 맞는 기계어로 컴파일함
    - 이게 C++ 이 JAVA 보다 실행속도가 빠른이유가 된다

4. 보안성 
  - JAVA 보안성이 더 높음(JVM 이 메모리를 관리하기 떄문에 해커가 메모리를 조작하기 어려움 - 반면 C++ 은 쉬움)
  - Why? JAVA 는 몇 가지 보안 매커니즘을 구현하여 잘못된 프로그램으로 인해 생기는 피해를 막아주도록 설계 되어 있음

5. 바인딩의 차이
  - JAVA : 동적 바인딩
    - 런타임에 기반하여 Method를 호출
    - 별도의 데이터 관리가 필요하고, 불필요한 오버헤드가 붙을 수 있다

  - C++ : 정적 바인딩
    - 컴파일 타임에 함수 호출을 결정, 프로그램 실행 중 불필요한 오버헤드가 없음
    - 부모 클래스의 함수를 오버라이딩 하는 과정에서 정적 바인딩으로 인한 문제가 발생하기 때문에 virtual 키워드를
      제공한다 (가상 메소드)

바인딩
- 일반 함수를 정적 바인딩, 가상 함수를 동적 바인딩이라고 생각하면 된다
  정적바인딩: 컴파일 시, 어떤 함수를 호출할 지 결정
    -> (장점) 다형성(polymorphism) 으로 인해 융통성을 갖게 됨. (단점) 실행속도가 미세하지만 느려짐
  동적바인딩: 런타임 중, 실행코드가 결정이 됨
    -> (장점) 실행속도는 동적바인딩보다 빠름 (단점) 융통성이 적음


6. 문법의 차이
  C++ : C의 상위호환으로서의 역할을 다하기 위해, 프로그래머에 의한 메모리 관리제어, Pointer, Pre-Processor 등의
  기능을 전부 유지

  JAVA : 위의 기능 + 버그를 야기할 수 있는 쉬운 기능을 전부 제거
   -  C++에서는 동적으로 할당된 메모리는 직접 해체해야 하지만, JAVA 는 가비지 컬렉터(Garbage Collector)가 알아서
      해제해줌
   - C++ 의 기능인 연산자 오버로딩, 다중 상속을 사용할 수 없음
   - 대신에 interface 를 사용해 다중 상속의 흉내를 낼 수 있다

참고

https://do-rang.tistory.com/79

 

[7] C++, JAVA의 차이를 한 눈에 정리.

C와 C++은 [1]편에서 정의했으니까 패스하고, 그렇다면 C++과 JAVA의 차이점이 뭔지 정확히 알고가보자. 모든 내용은 [곰150님 블로그]를 참고하여 제가 보기 쉽게 정리해논 것임을 밝힙니다. C++과 JAV

do-rang.tistory.com

 

https://showmiso.tistory.com/252

 

C++과 JAVA의 차이점

C++과 JAVA의 차이점 C++과 java는 문법적으로 상당히 유사하다. java를 설계할 때 C++ 개발자들이 쉽게 배울 수 있도록 만들었기 때문이다. 하지만 여러 차이점이 있는데, 이는 설계 목표의 차이에서

showmiso.tistory.com

 

https://drunkenamoeba.tistory.com/entry/122-%EC%9E%90%EB%B0%94%EC%9D%98-%ED%8A%B9%EC%A7%95

 

1.2.2 자바의 특징

[1] 코드의 단순성(Simple) 자바의 주된 특징은 기존의 C/C++ 언어의 문법을 기본적으로 따르고, C/C++ 언어가 갖는 전 처리기, 포인터, 포인터 연산, 다중 상속, 연산자 중첩(overloading) 등 복잡하고 이

drunkenamoeba.tistory.com

 

https://bitsoul.tistory.com/8

 

자바 에서 Call by Value, Call by Reference.

자바 에서 Call by Value, Call by Reference. 원래 모국어(?)는 C, C++ 이었던 제가 처음으로 자바(Java)를 접하고 가장 신기 했던게, '포인터가 없네?' 였습니다.   그러나 또 한편 떠오른 궁금증은 '그럼 자

bitsoul.tistory.com

 

저작자표시 (새창열림)

'∞. 기술 면접 > 7. 자바' 카테고리의 다른 글

06. 기술면접 - 자바 - Non Static 과 Static  (0) 2021.10.21
05. 기술면접 - 자바 - OOP 의 4가지 특징과 OOP 5가지 설계 원칙  (1) 2021.10.20
04. 기술면접 - 자바 - 래퍼 클래스 (Wrapper Class)  (0) 2021.10.20
03. 기술면접 - 자바 - 접근 제어자(Access Modifier)와 데이터 타입 (Data Type) = 자료형  (0) 2021.10.20
02. 기술 면접 - 자바 - 자바 언어의 장점  (0) 2021.10.20

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 05. 기술면접 - 자바 - OOP 의 4가지 특징과 OOP 5가지 설계 원칙

    05. 기술면접 - 자바 - OOP 의 4가지 특징과 OOP 5가지 설계 원칙

    2021.10.20
  • 04. 기술면접 - 자바 - 래퍼 클래스 (Wrapper Class)

    04. 기술면접 - 자바 - 래퍼 클래스 (Wrapper Class)

    2021.10.20
  • 03. 기술면접 - 자바 - 접근 제어자(Access Modifier)와 데이터 타입 (Data Type) = 자료형

    03. 기술면접 - 자바 - 접근 제어자(Access Modifier)와 데이터 타입 (Data Type) = 자료형

    2021.10.20
  • 02. 기술 면접 - 자바 - 자바 언어의 장점

    02. 기술 면접 - 자바 - 자바 언어의 장점

    2021.10.20
다른 글 더 둘러보기

정보

나눔코딩 블로그의 첫 페이지로 이동

나눔코딩

  • 나눔코딩의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (314)
    • ∞. 읽은 거리 (3)
    • ∞. 기술 면접 (61)
      • 1. 자료구조 (0)
      • 2. 네트워크 (9)
      • 3. 운영체제 (11)
      • 4. 데이터베이스 (13)
      • 5. 디자인 패턴 (0)
      • 6. 알고리즘 (0)
      • 7. 자바 (15)
      • 8. 자바스크립트 (7)
      • 9. 스프링 (5)
      • 10. 시큐리티 (1)
      • 11. 기타 (0)
      • 12. Vue (0)
    • ∞. 웹개발 유용한 사이트 (14)
    • ∞. 트러블 슈팅 + TIL (7)
    • 00. 출발 (9)
    • 01. 엑셀 (9)
      • 기초 (4)
      • 컴활 1급 (4)
      • VBA (0)
    • 02. 엑세스 (9)
      • 기초 (5)
      • 컴활 1급 (4)
    • 04. Oracle (1)
      • 기초 (1)
    • 03. JAVA (8)
      • 기초 (7)
      • 객체지향 프로그래밍 (0)
    • 05. HTML (13)
      • 기초 (1)
      • css (10)
      • sass (0)
      • less (0)
    • 06. Javascript (16)
      • 기초 (13)
      • ES6 모듈 (2)
      • Canvas (0)
    • 07. JSP (0)
      • 기초 (0)
    • 08. jQuery (0)
      • 기초 (0)
    • 09. BootStrap (1)
      • 기초 (0)
      • v4 - Layout (1)
    • 10. Spring (29)
      • 기초 (3)
      • 실험 (4)
      • MVC (1)
      • BOOT (6)
      • Security (9)
      • Lib (Library) (2)
      • 벤치마킹 (0)
      • JUnit5 (2)
      • DevTools (0)
      • Socket (1)
      • Batch (0)
      • Mobile (0)
      • WebFlux (0)
      • Cloud (0)
      • Thymleaf (0)
      • Actuator (0)
      • 성능 테스트 (1)
    • 11. JetBrains (34)
      • 기초 (1)
      • IntelliJ IDEA (33)
      • WebStorm (0)
      • Pycham (0)
    • 12. API (0)
      • 기초 (0)
      • 네이버 API (0)
      • 카카오 API (0)
      • 구글 API (0)
      • 인스타그램 API (0)
    • 13. AutoHotkey (1)
    • 14. Python (7)
      • 기초 (3)
      • Selenium (1)
      • Beautiful Soup (0)
      • openpyxl (1)
      • Pyqt5 (0)
      • Deep learning (open CV) (0)
      • Geocoder (0)
      • Anaconda (0)
      • DeepLearning (0)
      • Jupyter Nootbook (0)
    • 14.5. R (0)
    • 15. JMeter (0)
      • 다운로드 (0)
    • 16. Vue JS (23)
      • 기초 (3)
      • Vue 2 (15)
      • Vue 3 (5)
      • Vuetify 2.5.8 (0)
    • 17. Git (12)
      • 기초 (8)
      • ItelliJ IDEA (4)
      • SourceTree (0)
    • 18. AWS (5)
      • 기초 (2)
      • Jira (3)
    • 19. Naver Cloud Platform (0)
    • 20. Google Cloud Platform (0)
      • 기초 (0)
      • stt & tts (0)
    • 21. Kotlin (0)
    • 22. Android (0)
      • 기초 (0)
      • Java (0)
      • Kotlin (0)
      • Flutter FrameWork (0)
    • 23. Clean Code [JAVA] (1)
    • 24. BuildTool (1)
      • Maven (1)
      • Gradle (0)
    • 25. 자료 구조와 알고리즘 (18)
      • JAVA (1)
      • Java Script (1)
      • 프로그래머스 (0)
      • 백준 알고리즘 (0)
      • 나의 알고리즘 (14)
      • Brilliant 공부 (0)
    • 26. React (1)
      • 기초 (0)
      • 강의 정리 (1)
    • 27. PostMan (0)
      • 기초 (0)
    • 28. 프로그래머스 (9)
    • 29. Leet Code (0)
    • 30. MySQL (3)
      • 기초 (2)
      • 문제 (1)
    • 73. GraphQL (0)
    • 74. Nuxt JS (0)
    • 75. Electron (0)
    • 76. UX & UI Design Tool (0)
      • 기초 (0)
      • Axure (0)
      • Sketch (0)
      • Figma (0)
    • 77. MarkDown (1)
      • 기초 (1)
    • 78. Tomcat (1)
      • 메모 (1)
    • 79. Element JS (0)
    • 80. Parallax JS (0)
      • 기초 (0)
    • 81. Player JS (0)
      • 기초 (0)
    • 82. Smart Maker (0)
    • 83. Vim (0)
      • 기초 (0)
    • 84. Linux (0)
      • 기초 (0)
      • Centos 7 (0)
      • Ubuntu (0)
    • 85. Node JS (2)
      • 기초 (1)
      • WebRTC (0)
      • NVM (1)
    • 86. Propeller JS (0)
    • 87. FullPage JS (0)
      • 기초 (0)
    • 88. 아두이노 (0)
    • 89. Tensorflow (0)
    • 90. 웹 패킷 분석 (0)
    • 91. 크롬 개발자도구 (0)
    • 92. 디자인 패턴 (7)
      • 생성(Creational) (3)
      • 구조(Structral) (1)
      • 행위(Behavioral) (2)
      • SOLID 패턴 (0)
    • 95. Linux Shell Script (0)
    • 96. 구글 애널리스틱 (0)
    • 97. ffmpeg (0)
    • 98. ShareX (1)
    • 자료실 (0)
    • 기타 (2)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 깁
  • 엑셀 표시형식
  • 엑셀 기타작업
  • 엑셀 가운데맞춤
  • 엑셀 분석작업
  • 엑셀 기본작업
  • 졵
  • 엑셀 글씨

나의 외부 링크

  • 비전공자 개발자
  • 자바 디자인 패턴
  • 자바 디자인 패턴
  • 스프링 블로그
  • 해킹보안 & 웹 관련
  • ERD 생성
  • 전문 기술 블로그
  • Servlet에 대한 개념없이 스프링을 했네요?
  • 스프링 FitlerChainList
  • 알고리즘 파워 블로그

정보

THE HEYDAZE의 나눔코딩

나눔코딩

THE HEYDAZE

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / AXZ. © THE HEYDAZE. Designed by Fraccino.

티스토리툴바