자바만 왜 os에 독립적인가요
안녕하세요 ..
자바는 왜 OS에 독립적인지 책을 읽어도 모르는부분이 있어 질문드립니다.
자바 외 타언어는 OS에 종속적이지만 자바는 JVM 때문에 OS에 구애받지않는다고합니다.
자바는 JVM이 바이트코드를 OS가 인식할 수 있는 바이너리코드로 변환하여 OS에 종속적이지 않다고 나와있는데요
여기까지는 이해 했으나 핵심을 잘 모르겠습니다.
질문
1. 그렇다면 어떤 언어든간에 바이너리코드로만 변환시키면 OS로 부터 독립적이다라고
이해가 되는데 맞는지 궁금합니다.
2. 여기서부터가 문제입니다..... (이해가 잘 되지 않습니다)
대부분의 타언어의 경우 OS와 직접적인 통신을 하는 것으로 알고있습니다.
(OS와 통신하려면 바이너리코드로 만들어져야된다 생각이 되는데 그렇다면 모두 독립적이여야하는것 아닌가..
라고 짧은 지식이 얘기합니다.)
타언어의 경우는 어떤식으로 작동이 되길래 OS에 종속적이 되는지 궁금합니다..
답변주시면 감사하게 배우겠습니다.
안녕하세요
정확히 짚고 넘어가야하는 점은 소스는 OS와 프로세서에 비종속적이고 바이너리파일이 종속적이라는 점 입니다.
다음과 같은 C코드가 있을 경우 어느 운영체제/프로세서에서 컴파일하여 동작시켜도 같은 결과를 바랄 수 있습니다.
int main(){ printf("hello!\n"); return 0; }다만 이를 다른 운영체제나 프로세서에서 컴파일 할 경우 동작하지 않습니다.
그러면 자바는 어떻게 가능한가는 JVM을 이하기 때문입니다.
JVM은 가상의 컴퓨터 위에서 자바 바이너리 파일이 동작하기 때문에 어느 프로세서/운영체제에서 동작 시키던 같은 환경의 같은 동작을 기대할 수 있습니다.
마치 각각의 OS에서 VMware와 같은 운영체제를 이용해 같은 바이너리를 실행시키는것과 같다고 볼 수 있겠습니다.
그러면 왜 windows에서 만든 코드가 linux에서 에러가 발생하나요?라는 질문이 나올 수 있습니다.
이 경우는 표준을 지키지 않았기 때문이라고 할 수 있습니다.
각 컴파일러는 사용자 편의를 위해 비표준 문법을 적용하기도 합니다.
이때문에 다른 컴파일러를 통해 컴파일을 할 경우 에러가 나올 수 있다는것이지요.
타 언어로 된 프로그램의 경우, 어플리케이션이 OS와 직접 통신하게 됩니다. (App ->> OS)
반면, 자바의 경우 어플리케이션은 JVM과 통신하게 되고, OS와는 JVM이 다시 통신하게 됩니다. 따라서 JVM만 OS별로 맞게 만들어져 있으면, 자바는 JVM이랑만 통신하면 되기 때문에 OS에는 독립적일 수 있는 것입니다.
(App ->> JVM ->> OS)
쉽게 설명하자면
자바 및 다른 언어들 -> 말하는 사람
JVM -> 자바를 만능 통역사
OS -> 듣고 행동하는 사람
라고 생각하시면 편하겠습니다.
말하는 사람이 무슨 언어로 이야기 하더라도 OS가 알아듣고 행동하길 원한다면 욕심이겠지요.
하지만 자바로 명령을 한다면 JVM이 명령을 알아듣고 OS가 알아들을 수 있는 바이너리 코드로 해석해서 명령을 전달합니다.
그러면 OS가 다양하게 바뀐다고 해도 JVM 을 통해 동일한 결과를 출력해 낼 수 있습니다.
JAVA는 JVM 즉 자바 가상머신이라는 프로그램이 어느 os에서든 사용할수있게끔 만들어져있어서 os에서 독립적이라고 하는걸로 알고있습니다
php도 리눅스나 윈도우에서도 쉽게 사용 할 수 있습니다.
https://code.i-harness.com/ko-kr/q/29f1ee 여기에 보시면 다른분들의 JAVA의 독립적인 부분에 대한 의견들이 적혀있습니다.