프로젝트(코드들의 저장 공간) -> 자바 코드 작성 -> 문법상 오류가 없다면 컴파일러는 byte code 생성 (.class 파일 생성)-> 인터프리터를 사용해 해당 바이트 코드 실행
.class
로 만들어 준다.[자바 코드와 바이트 코드]
자바를 이용해서 서버를 구현해 서비스를 제공하고 있는 회사가 있다고 가정해보자. 이때 해당 서비스를 제공하기 위해서 java코드까지 필요할까?
해당 문제는 java 코드까지는 필요하지 않다는 것이 정답이다. 왜냐하면 해당 java 코드는 프로그램 실행에 아무런 영향을 미치지 않기 때문이다. byte code만 프로그램 실행에 사용되기 때문에 우리가 서비스를 한다고 하면 byte code만 필요하다.
[bin VS src]
우리는 자바 프로젝트를 생성하게 되면 src 파일과 bin 파일을 볼수 있다.
- src 폴더의 경우엔 개발자가 작성한 java 코드를 저장하는 경로라고 생각하면 된다.
- bin 폴더의 경우엔 개발자가 작성한 자바 코드를 이용해 컴파일 후 byte code를 인터프리터를 사용해서 .class 파일을 만들어 저장하는 경로라고 생각하면 된다.
자바 코드를 실행하는 것(=프로그램 실행)을 목적
으로 한다. 자바 바이트 코드를 실행시키는 주체
이다.JVM의 역할
.java
코드 자체를 컴퓨터는 이해할 수 없다. 이를 기계가 이해할 수 있게 하기 위해서 컴파일러를 이용해서 기계어로 자바 코드를 컴파일 해주어야 한다.
컴파일러가 자바 코드를 .class 바이트 코드로 변환해줬다면 OS에서 해당 바이트 코드를 이용해서 프로그램을 실행시켜야 한다. 이때 JVM은 OS 종류에 상관 없이 해당 바이트 코드를 이해할 수 있도록 해석해주는 역할을 한다.
정리를 하자면 바이트 코드를 JVM 위에서 OS 상관 없이 실행시킬 수 있게 하는 것이 JVM의 역할이다.
[C#과 닷넷을 이용해서 서버를 구현하고 있는 상황을 예시들어보자]
- 위의 경우엔 windows 플랫폼에 최적화되어 있습니다. 다른 플랫폼에서의 배포를 해야 하는 상황이라면 추가적인 작업이 필요하게됩니다.
- 이런 상황에 JVM을 이용해 해당 문제를 해결한 Java를 이용한 서버 구현이 등장하고 이는 한 플랫폼에 종속적이지 않은 장점이 있다.
- 또한 자바를 이용한 서버 구현의 경우엔 리눅스 기반의 서버 안정성을 보장하고 있어서 JAVA를 이용한 구현이 선호되고 있는 추세이다.
자바에서 문자열 비교를 진행할 때 equals()를 사용하는데 해당 메서드는 어디에 존재하고 있을까?
- String 내에서 존재하는 메서드로 String은 객체 생성 없이 사용이 가능하다. 특수한 경우로 기본 타입처럼 사용이 된다.