자바와 운영체제 사이에 JVM이 있고,
JVM을 운영체제에 맞춰 설치를 해주면
자바로 작성한 소스코드를 JVM이 실행시켜주기때문에
운영체제에 따라 자바의 코드를 수정한다거나 할 필요 없고 이런 저런 운영체제에서도 실행이 가능하여 이식성이 높다.
는건 이해하고 있습니다.
그런데 이건 사실 C++도 마찬가지 아닌가용?
C++이 자바처럼 운영체제 사이에 중간역할 해주는애가 없어서 그렇지,
운영체제에 따른 C++ 컴파일러를 설치하면,
해당 컴파일러는 운영체제에 맞게 알아서 잘 C++로 작성한 코드를 컴파일 해주기 떄문에,
운영체제에 따라 C++의 코드를 수정한다거나 할 필요 없이 잘 구동되잖아용?
그러니까 윈도우 컴에서 작성한 C++ 소스코드를 수정 없이 그대로 복붙해서 실행해도 맥에서 잘 수행이 되는데,
어째서 운영체제에 독립적이다라는게 자바의 이점이 될 수 있는것인지 이해가 안가네요.
제가 뭐 잘못 이해하고 있나요..?
자바가 운영체제에 독립적인게 아니라, 자바로 만든 어플리케이션이 운영체제에 독립적이라고 보는게 맞아. 컴파일된 바이트코드는 어떤 운영체제라도 JVM이 구현되어있으면 돌아가니까. 반면 C++은 운영체제별로 따로 컴파일을 해야하잖아
컴파일하면 목적코드가 나오잖아? .exe 같은거. 이거 자체는 운영체제랑 아키텍처에 종속적인 코드야. 자바에서 컴파일하는건 목적코드가 아니라 바이트코드로 컴파일 되고, 실행될때 jvm에서 실제 명령어로 인터프리팅돼
그리고 컴파일하는 환경이랑 실행되는 환경이 다를때 컴파일하는건 크로스 컴파일이야 . '윈도우 컴에서 작성한 C++ 소스코드를 수정 없이 그대로 복붙해서 실행해도 맥에서 잘 수행이 되는데,' 이게 아니라 윈도우에서 크로스 컴파일한게 맥에서도 실행 될 수 있다.의 개념이야
와 미쳤다... 존나 고민했는데 댓글들 덕분에 이해갔습니다. 감사합니다!
Jvm이라는 vm이 돌아가는 모든 운영체제에서 java를 돌릴 수 있다는 뜻임.