[JAVA] 자바 시작하기

This is JAVA :)

이것이 자바다를 보고 공부했습니다 :)

1.1 프로그래밍 언어란?

  • 프로그래밍 언어는 고급 언어와 저급 언어로 구분
  • 고급 언어: 컴퓨터와 대화할 수 있도록 만든 언어 중에서 사람이 쉽게 이해할 수 있는 언어
  • 고급 언어로 작성된 소스는 컴파일을 통해 0과 1로 이루어진 기계어로 변환 후 컴퓨터가 사용
  • 일반적으로 프로그래밍 언어는 고급 언어를 의미함
  • 프로그램: 컴퓨터에서 특정 목적을 수행하기 위해 프로그래밍 언어로 작성된 소스를 기계어로 번역한 것을 말한다

1.2 자바란?

1.2.1 자바 소개

  • 인터넷이 활성화되면서 웹 어플리케이션 구축용 언어로 자바가 급부상
    • 한 번의 작성으로 다양한 서버 운영체제에서 실행가능하기 때문

1.2.2 자바의 특징

  1. 이식성이 높은 언어
    • 이식성: 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것
    • JRE(Java Runtime Environment 자바 실행 환경)가 설치된 모든 운영체제에서 실행 가능
  2. 객체 지향 언어
    • 객체를 만들기 위해 설계도인 클래스를 작성
    • 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어낸다
  3. 함수적 스타일 코딩 지원
    • 최근 함수적 프로그래밍이 다시 부각
      • 대용량 데이터의 병렬 처리, 이벤트 지향 프로그래밍에 적합하기 떄문
    • 자바 8부터 함수적 프로그래밍을 위한 람다식 지원
  4. 메모리를 자동으로 관리
    • 개발자가 메모리에 접근 불가, 자바가 직접 관리
    • 객체 생성 시 자동으로 메모리 영역을 찾아서 할당
    • 사용 완료 시 Garbage Collector가 사용하지 않는 객체 제거
  5. Multi-Thread 구현 용이
    • Thread 생성 및 제어와 관련된 라이브러리 API를 제공
  6. Dynamic Loading을 지원
    • 객체가 필요한 시점에 클래스를 동적 로딩해서 객체를 생성

1.2.3 JVM(Java Virtual Machine)

  • 가상의 운영체제 역할
  • JVM이 운영체제와 자바 프로그램을 연결하며 운영체제와 상관없이 동일한 실행결과가 나오도록 함
  • 대신 JVM은 운영체제에 종속적
  • 자바 프로그램 실행 단계
    1. .java 소스 파일 작성
    2. 컴파일러(javac.exe)로 컴파일하면 확장자가 .class인 바이트 코드 파일이 생성
    3. 바이트 코드 파일은 JVM 명령어(java.exe)에 의해 JVM에서 해석되고 운영체제에 맞게 기계어로 번역

1.3 자바 개발 환경 구축

  • JRE = JVM + 표준 클래스 라이브러리 API
  • JDK = JRE + 컴파일러 등 개발에 필요한 도구

1.6 이클립스 설치

  • 이클립스는 자바 프로그램을 개발하기 위한 IDE(Integrated Development Environments 통합 개발 환경)


추가로 공부한 내용

동적로딩 vs 정적로딩

동적 로딩
실행에 필요한 내용을 메모리에 한번에 로딩하지 않고 실제 요청이 발생할 때 메모리에 로딩되는 방식

  1. 대표적인 예: Java (웹과 같이 유동적, 가변적인 프로그램)
  2. 장점
    • 필요한 기능만 사용하기 떄문에 메모리를 적게 차지한다.
  3. 단점
    • 요청이 생기면 메모리에 로딩하기 때문에 실행 속도가 느려질 수 있다
      (static 키워드로 해결)

정적 로딩
프로그램을 실행할 때, 모든 실행파일이 메모리에 로딩되는 방식

  1. 대표적인 예: C언어 (자주 변하지 않는 소프트웨어)
  2. 장점
    • 모든 기능이 메모리에 존재하므로, CPU가 필요로 하는
  3. 단점
    • 메모리를 많이 차지한다.

Garbage Collectior

  1. 객체가 생성되는 heap에 새로운 객체를 생성할 메모리가 없으면 JVM이 OOM(Out Of Memory error)를 던지고 Garbage Collector가 실행된다.

  2. Garbage Collection의 대상

    • 모든 객체 참조가 null인 경우
    • 객체가 블럭 안에서 생성되고 블럭이 종료된 경우
    • 부모 객체가 null일 때 자식 또는 포함된 객체

Garbage Collection, Garbage Collector 관련 내용이 방대하여 이 정도로 마무리하고 다음에 다시 공부해봐야겠다

참고
JAVA2_day02 | 동적 로딩, 정적 로딩, static 키워드
JAVA:: 가비지 컬렉터(Garbage Collector)란
자바에서 Garbage Collection은 어떻게 동작하나?
Java Garbage Collection

Categories:

Updated:

Leave a comment