섹션5 - 자바 플랫폼 소개

Shy·2023년 1월 31일

Java정복

목록 보기
3/5

자바 플랫폼 개요

  • 이 단원에서는 JShell을 넘어 다른 자바 플랫폼을 살펴본다.
  • 이번 단원의 메인 주제는 클래스를 이해하는 것이다.



소개 - java, javac, bytecode an

  • 자바 코드를 컴파일하고 실행하는데 필요한 작업과 플랫폼 독립성이라는 개념을 본다.
  • 플랫폼 독립성은 자바 코드를 짜게 되면, 다양한 운영체제에서 작동되는 것이다. (Windows, Unix, Linux, etc.... 에 상관없이 전부 작동된다.)
  • 각 운영체제마다 명령어가 다르지만, 자바는 중간 표현이 존재한다.
  • 모든 운영체제에서 잘 쓰는 바이트코드를 사용하는데, 이것은 운영체제와 관계없이 공통적인 포맷을 취하는데, 운영체제들은 바이트코드를 해석하지 못하고 기초적인 명령만 알아듣는다.
  • 바이트코드를 운영체제가 해석하기 위해 JVM(JavaVirtualMachine)이 존재한다.
  • JVM은 바이트코드를 운영체제의 특정한 명령으로 바꿔주는 소프트 웨어이다.
  • 운영체제마다 JVM은 다르다.
  • JVM은 바이트코드를 가져와 특정한 운영체제 명령으로 바꾼다.
  • 컴파일은 Java Code를 바이트코드로 바꾸고 실행은 JVM을 사용해 바이트코드를 명령으로 바꾸고, 특정 운영체제에 프로그램을 실행한다.



자바 클래스와 오브젝트

  • 자바코드를 컴파일 하려면 클래스를 만들어야 한다.
  • 클래스는 객체(Object)를 만들기 위한 견본이다.
  • 클래스를 이용하여 india, usa같은 객체(Object)를 생성했다.
  • 클래스가 자동차라면, 전진, 후진, 좌회전, 우회전 같은 기능을 하는 것이 클래스의 메서드이다. 여기서는 revolve에 해당한다.
  • 클래스의 메서드는 단독으로 사용되지 못한다. 반드시 오브젝트랑 사용되어야 한다.
  • Planet.revolve()로 클래스.메서드는 사용되지 못하지만, 오브젝트.메서드로는 잘 작동하는 것을 확인할 수 있다.



Planet.java 클래스를 생성하고 컴파일하기

  • 자바 코드에서 컴파일하고 바이트코드로 만드는 것이 첫 번째 단계이다.
/list Planet
  • 위의 코드를 입력하면 Planet 클래스에 적어둔 코드가 보인다. 이 코드를 복사해서 아무 텍스트 에디터 (메모장도 된다)에 코드를 붙여 넣는다.

  • 여기서 중요한 점은, 새 텍스트 문서라 되있는 메모장 이름을 클래스 이름과 일치하게 Planet.java로 변경해야 한다는 점이다. (.txt 확장자 지워야 함)
  • jshell은 /exit을 입력해서 종료해야한다.
  • jshell을 종료하고, 프롬프트상의 경로와 일치하게끔 Planet.java 파일을 넣어준다.
  • 이 코드를 입력시켜 컴파일을 완료한다.



컴파일 한 코드를 실행하기

  • 위에서 저장한 {Planet.java}의 코드를 실행한다.
  • java ClassName 을 입력하면 실행된다.
  • 위와 같은 오류가 나오는데, JShell 밖에서 자바 프로그램을 돌리려면 public static void main(String[] args)를 정해야 한다.
  • 코드를 이렇게 고쳐주고, 다시 컴파일을 한다.
  • 오류창이 나오지 않고 잘 되는 것을 볼 수 있다.
  • 아무것도 출력되지 않는 것을 볼 수 있는데, 메인 메서드 안에 아무것도 입력하지 않아서 그런것이다.
  • 이제 메인 메서드에서 JShell에 입력하던 코드를 적어보면....
  • 클래스를 쓸 땐 public static void main, 인수 배열을 입력하고 코드를 실행시키고 싶으면, 실행시키는 클래스가 이 메서드를 갖고 있어야 하고, 그 안에는 실행하고 싶은 코드를 쓰면 된다.
  • Revolve가 출력된 것을 볼 수 있다.



중간 정리

  • javac을 이용해서 컴파일 했고 {java}, 클래스의 이름을 입력하면 실행되었다. JVM으로 명령을 실행하는 것이다.



Planet 클래스를 이용해보고 학습

이전에는 별도의 자바 파일을 작성하고 컴파일하고 실행해보았다.
이번에는 뭐가 잘못 될 수 있는지 살펴본다.

  • 메인 메서드의 구문은 아주 중요하다. 밑에와 완벽히 일치해야 한다.
  • 자바 파일에 있는 서로 다른 문에서 각 문의 뒤에 꼭 세미콜론을 붙여야 한다. 아니면 컴파일 오류가 발생한다.
  • 존재하지 않는 메서드를 불러오면 오류가 발생하는 것을 볼 수 있다. (revolve1)

  • 디렉토리가 다르면 실행이 안된다. 반드시 주의하자

JDK vs JRE vs JVM

  • JDK vs JRE vs JVM
    JVM (Java Virtual Machine) runs Java bytecode.
    JRE = JVM + Livraries + Other Components
    JDK = JRE + Compilers + Debuggers


JVM

  • 무슨 코드를 컴파일했든, JVM은 운영체제가 이해할 수 있는 명령으로 바꿔준다.
    윈도우 JVM은 바이트코드를 윈도우 운영체제가 이해하는 명령으로 바꿔준다.

    단순하게 보자면, 자바를 운용할 대 클래스 이름을 주면 JVM이 바이트코드를 기반으로 코드를 실행하는데, 그걸 위해서 JVM이 바이트코드를 기계 명령으로 바꾸는 거다.
  • 모든 자바 프로그램은 JVM을 이용해서 실행된다.![]

JRE

  • JRE는 JavaRuntimeEnviroment, 자바 실행 환경을 뜻한다.
  • JVM하고 자바 관련 라이브러리를 모두 합친것이다.
  • JRE는 모든 자바 프로그램을 실행할 때 필요하다.

JDK

  • JRE(JVM하고 자바 라이브러리가 더해진 것)에 모든 컴파일러와 디버거가 합쳐진 것이다.
  • 전체가 자바 프로그램을 개발하고, 컴파일하고 실행시킬 때 까지 필요한 것들 이다.


연습예제

  • 클래스 {Planet.class}, {Planet.java}두 개가 존재할 때, {Planet.class}를 Mac에서 Window로 전송할 경우, 윈도우를 위한 JRE를 갖고 있으므로, 클래스 파일을 실행할 수 있다.
  • 클래스 파일을 준 게 아니라 자바 파일을 줬을 경우, JRE로 실행이 가능할까?
    JRE를 가지고는 {Planet.java}를 실행할 수 없다. 그 이유는 컴파일도 해야 하고 javac도 해야 하는데 컴파일러는 JDK, 자바 개발 키트에만 있다.
    그러므로 윈도우에서 실행하기 위해선 JDK가 필요하다.
    만약 다른 환경에서 실행할 경우 컴파일된 클래스 파일을 줘야 한다. 그럼 JRE를 통해서 사용 할 수 있다.

정리

  • 애플리케이션의 개발자라면 JDK가 필요하다
  • 애플리케이션의 사용자라면 JRE가 필요하다.
  • JVM은 JRE, JDK에 모두 속해있다. JVM은 자바 프로그램을 굴라가게 하는 근본이다.
profile
신입사원...

0개의 댓글