dohun.log

[Java]01.자바 시작하기 본문

Study/Java

[Java]01.자바 시작하기

dohun31 2022. 1. 11. 16:36

1.1 프로그래밍 언어란?

❓ 컴퓨터가 이해할 수 있는 언어 → 기계어

기계어0과 1로 이루어진 이진 코드

고급언어(c++, java …) 컴파일러 기계어

1.2 자바란?

자바의 특징

  • 이식성이 높은 언어이다.
    • 이식성 → 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것
    • 자바 언어로 개발된 프로그램은 소스 파일을 다시 수정하지 않아도
    • 자바 실행 환경이 설치되어 있는 모든 운영체제에서 실행 가능하다.
  • 객체 지향 언어이다.
    • ❓ OOP(객체 지향 프로그래밍) → 객체들을 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법
    • 자바는 100% 객체 지향 언어 캡슐화, 상속, 다형성 기능 완벽하게 지원
  • 함수적 스타일 코딩을 지원한다.
    • ❓ 함수적 프로그래밍 → 대용량 데이터의 병렬 처리, 이벤트 지향 프로그래밍에 적합
    • 자바는 Lambda식 지원
  • 메모리를 자동으로 관리한다.
    • 객체 생성자동적으로 메모리 영역을 찾아서 할당
    • 사용 완료Garbage Collector를 실행히켜 자동적으로 사용하지 않는 객체 제거
    • 개발자는 메모리 관리의 수고스러움을 덜고, 핵심 기능 코드 작성에 집중할 수 있다.
  • 다양한 애플리케이션을 개발할 수 있다.
    • 자바는 다양한 운영체제에서 실행되는 프로그램을 개발할 수 있다.
    • 단순 콘솔 프로그램
    • 클라이언트용 윈도우 애플리케이션
    • 서버용 웹 애플리케이션
    • 모바일용 안드로이드 앱
    • 다양한 운영체제에서 사용할 수 있는 개발 도구와 API를 묶어 에디션 형태로 정의
      • Java SE(Standard Edition) - 기본 에디션
        • Java SE는 자바 프로그램들이 공통적으로 사용하는 자바 가상 기계를 비롯해서 자바 프로그램 개발에 필수적인 도구와 라이브러리 API를 정의
        • 자바 프로그램을 개발하고 실행하기 위해서는 반드시 Java SE 구현체자바 개발 키트(JDK)를 설치해야 한다.
  • 멀티 스레드를 쉽게 구현할 수 있다.
    • ❓ 멀티 스레드 프로그래밍 → 하나의 프로그램이 동시에 여러 가지 작업을 처리해야 할 경우와 대용량 작업을 빨리 처리하기 위해 서브 작업으로 분리해서 병렬 처리하는 것
    • 스레드 생성 및 제어와 관련된 라이브러리 API를 제공 → 운영체제 상관없이 멀티 스레드를 쉽게 구현할 수 있다.
  • 동적 로딩을 지원한다.
    1. 자바 애플리케이션은 여러 개의 객체가 서로 연결되어 실행
    2. 이 객체들은 클래스로부터 생성
    3. 애플리케이션이 실행될 때 모든 객체가 생성 ❌
    4. 객체가 필요한 시점에 클래스를 동적 로딩해서 객체 생성
    5. 개발 완료 후 유지 보수가 발생하더라도 해당 클래스만 수정하면 됨 → 전체 애플리케이션 컴파일할 필요 없음
  • 막강한 오픈소스 라이브러리가 풍부하다.
    •  자바는 오픈소스 언어 → 자바 프로그램에서 사용하는 라이브러리 또한 오픈소스가 넘쳐난다.

자바 가상 기계(JVM)

자바는 완전한 기계어가 아닌 중간 단계인 바이트 코드이다.

 

이 바이트 코드를 해석하고 실행할 수 있는 가상의 운영체제가 필요하다. → 자바 가상 기계(JVM) 

바이트 코드는 모든 JVM에서 동일한 실행 결과를 보장하지만 운영체제에 종속적이다.

 

  1. 소스 파일
  2. 컴파일러
  3. 바이트 코드 파일
  4. JVM 구동
    1. 윈도우 용 JVM
      1. 윈도우에서 실행할 수 있는 기계어로 번역 후 실행
    2. 맥 용 JVM
      1. 맥에서 실행할 수 있는 기계어로 번역 후 실행

 

출처: 이것이 자바다 Chater01 자바 시작하기

'Study > Java' 카테고리의 다른 글

[Java]05.참조 타입  (2) 2022.01.18
[Java]04.조건문과 반복문  (0) 2022.01.11
[Java]03.연산자  (0) 2022.01.10
[Java]06.클래스-확인문제  (0) 2021.12.29
[Java] 02.변수와 타입  (0) 2021.12.20
Comments