1장_자바 시작

IkSun·2023년 4월 6일
post-thumbnail

WORA(Write Once Run Anywhere)

자바는 한 번 작성하면 하드웨어나 운영체제에 상관없이 어디에서나 실행 가능하다

자바의 실행

.java(소스코드 작성) -> (자바 컴파일러) -> .class(바이트 코드 <- 바이너리 파일) 
-> JVM 에서 실행 (java virtual machine 에서 바이트 코드를 해석 및 실행)
  • 자바 프로그램의 개발
    • 소스코드(.java)
      • 프로그래밍 언어로 작성된 텍스트 파일
      • 여러 소스코드(.java)로 나누어서 개발한다.
    • 컴파일 : JVM 에서 실행 가능하도록 자바소스(.java)를 컴파일하여 바이너리 코드(.class) 생성
    • 바이트 코드(.class)
      • 바이트 코드는 컴퓨터 CPU 에 의해 직접 실행되지 않는다 (CPU 에 종속적이지 않음)
      • JVM 이 작동 중인 플랫폼에서만 실행하며, JVM 이 인터프리터 방식으로 바이트 코드 해석
      • 바이트코드(.class) 를 하나의 실행 파일로 만드는 링크 과정이 없다
      • 실행 파일이 만드는 것이 아닌 실행을 위한 내용이 담긴 클래스 파일 즉 바이트 코드를 만든다
        -> os 의 역할이 아니다.
    • JVM 이 클래스 파일(.class) 의 바이트 코드를 실행한다.
      • 자바 바이트 코드를 실행하는 자바 가상 기계(소프트웨어)
      • 각기 다른 플랫폼에 설치, JVM 자체는 플랫폼에 종속적
      • JVM 은 필요한 클래스 파일들을 동적으로 로딩하여 적은 메모리로 실행 가능하다.
      • 동적 로딩은 JVM 에 포함된 클래스 로더에 의해 이루어지고 ClassLoader 클래스를 이용하여 개발자가 직접 클래스 로딩 가능.

JDK 와 JRE

JDK는 개발자를 위한 툴이고 JRE는 자바 프로그램을 실행시키기 위한 환경을 구성하는데 JDK에는 JRE가 포함되어 있으므로 자바 응용프로그램을 개발하는 개발자는 JDK만 설치하면 된다.

자바 API

자바 API(클래스 라이브러리)는 JDK 에 패키지 형태로 제공된다.

  • 필요한 클래스가 속한 패키지만 import 하여 사용

자바 플랫폼의 모듈화

실행 시간에 사용되는 자바 API의 모든 클래스들을 모듈들로 분할

자바의 특징

객체 지향

  • 상속성, 다형성, 캡슐화

클래스로 캡슐화

  • 클래스 내에 모든 변수(필드), 함수(메소드) 구현해야 한다.
  • 클래스 안에서 새로운 클래스(내부 클래스) 작성 가능

플랫폼 독립성

  • 자바 가상 기계가 바이트 코드 실행
  • 플랫폼에 종속성을 갖지 않음

소스(.java)와 클래스(.class) 파일

  • 하나의 소스 파일에 여러 클래스 작성 가능
    • public 클래스는 하나만 가능
    • 소스 파일의 이름과 public으로 선언된 클래스 이름은 같아야 한다.
  • 컴파일된 클래스 파일(.class) 에는 클래스는 하나만 존재
    • 다수의 클래스를 가진 자바 소스(.java) 를 컴파일 하면 클래스마다 별도 클래스 파일(.class) 생성.

실행 모듈

  • 한 개의 class 파일 또는 다수의 class 파일로 구성
  • 여러 폴더에 걸쳐 다수의 클래스 파일로 구성된 경우
    • jar 파일 형태로 배포 가능

main() 메소드

  • 자바 응용프로그램 실행은 main() 메소드에서
  • 하나의 클래스 파일에 하나 이상의 main() 메소드가 있을 수 없음
    • 각 클래스 파일이 main() 메소드를 포함하는 것은 상관없음

멀티 스레드

  • 자바는 OS 도움 없이 자체적으로 멀티스레드 지원
    • C/C++ 등에서는 멀티스레드 운영체제 API 를 호출

패키지

  • 관련된 여러 클래스를 패키지로 묶어 관리
  • 패키지는 폴더 개념

가비지 컬렉션

  • 자바는 응용 프로그램에서 메모리 반환 기능 없음, 메모리 할당 기능(new)만 있음
  • 가비지 : 할당 후 사용되지 않는 메모리
  • 자바 가상 기계가 자동으로 가비지 회수

실시간 응용 시스템에 부적합

  • 자바 응용프로그램은 실행도중 예측할 수 없는 시점에 가비지 컬렉션을 실행하기 떄문에 일정시간 내에 반드시 실행 결과를 내야하는 실시간 시스템에 부적합
  • 포인터의 개념 없음
profile
공부한 것 기록용

0개의 댓글