본문 바로가기

자바의 정석 정리

자바의 정석 - 1.1 자바

1.1 자바

1.1.1 자바란?

  • 객체지향 언어로서 운영체제에 독립적인 언어이다.

1.1.2 자바 애플릿(Java Applet)

  • 정적인 웹페이지에 사운드와 애니메이션 등의 멀티미디어적인 요소를 제공
  • 과거 멀티미디어적인 요소를 제공하는 유일한 방법이었으나, 현재 보안상의 이유로 더이상 지원을 하지 않는 기능이다.
  • 현재 서버 쪽 프로그래밍을 위한 서블릿(Servlet)이나 JSP(Java Server Pages)를 사용한다.

1.1.3 특징

  1. 운영체제에 독립적이다
    • 자바 애플리 케이션과 OS사이에 JVM이 존재한다. JVM이 각종 명령을 운영체제에 맞게 번역을 하여 OS에 전달하기 때문에 운영체제에 독립적이다. 하지만, JVM자체는 운영체제에 종속적이기 때문에 다양한 JVM을 제공하고 있다.
  1. 객체지향 언어다
  • JAVA는 상속, 다형성, 캡슐화 등 객체제향적 특징이 잘 적용된 언어이다.
    1. 배우기 쉽다
    • 기본구문은 C++에서 가져오고 객체지향 구문은 스몰톡(Small Talk)에서 가져와 장점만 취해서 종합한 언어가 JAVA이다. 각 언어에서 불필요한 부분을 제거하여 단순화 했다.
    1. 자동 메모리 관리를 해 준다
  • 가비지 컬렉터(Garbage Collector)가 자동으로 메모리를 관리해 주기 때문에 개발자가 메모리에 대한 관심을 최소화 하게 한다.
    1. 네트워크와 분산처리를 지원한다
    • 다양한 네트워크 라이브러리(JAVA API)를 제공한다.
    1. 멀티쓰레드를 지원한다
  • 일반적은 멀티쓰레드는 OS마다 처리 방법이 다르다. 하지만, 자바는 JVM으로 OS에 관계없이 구현이 가능하며 다양한 라이브러리(JAVA API)가 제공되어 구현하기 쉽다. 쓰레드에 대한 스케줄링은 자바 인터프리터가 담당한다.
    1. 동적 로딩을 지원한다.
  • 필요시점에 클래스를 로딩하여 사용하여 메모리를 최소화 한다. 또한, 일부 클래스가 변경 되더라도 프로그램 전체를 다시 컴파일 하지 않아도 된다는 장점을 지닌다. 즉, 작업을 최소하 하여 동작 시간을 줄일 수 있다.
동적 로딩의 종류

1. 로드타임 로딩
    - .class파일을 JVM에 로딩하여 .class파일을 읽게되면 내부에 다른 클래스를 호출하는 경우가 있다.
이때, 호출하는 클래스를 불러오는 과정이 로드타임 로딩이다. 예를들어, System.out.println('ksb')를
하는 경우 System 클래스를 불러오는 것이 로드타임 로딩이다.

2. 런타임 로딩
    - 런타임 로딩은 로드타임 때 클래스를 호출하지 않고, 다른 클래스를 불러오는 참조하는 실행 과정에서
해당 클래스를 호출하는 것이 런타임 로딩이다. 예를들어, Class c = Class.forName(args[0])은
로드 타임때 Class가 호출되지 않고, 실제 실행 시에 호출이 된다.

1.1.4 자바 프로그램 해석과정

  1. .java 파일 작성
  2. 자바컴파일러로 .class 파일(바이트 코드) 생성
  3. JVM내부에 있는 JIT컴파일러 및 자바 인터프러터로 코드 해석
  4. OS에 전달

1.5 자바 프로그램 실행과정

  1. 프로그램의 실행에 필요한 클래스(.class)를 로드한다
  2. .class파일을 검사한다.(파일형식, 악성코드 체크)
  3. 지정된 클래스에서 main 함수를 호출한다.

참고