JAVA

ChaeHo95·2022년 5월 22일
0

Java

목록 보기
1/10
post-thumbnail

JAVA

  • 플랫폼 독립적(Platfoem Independent)이며 메모리 사용 용량이 적은 객체 지향 언어
  • 자바 가상 머신(Java Virtual Machine)가 있어 운영체제나 하드웨어에 상관없이 동일한 실행 환경 및 실행 결과를 제공
  • WORA(Write Once Rub Anywhere)의 특징을 대표적으로 보여줌
    • 한번 작성된 코드는 모든 플랫폼에서 실행

프로그래밍 언어

  • 컴퓨터가 실행할 프로그램을 작성하는 언어

기계어(Machine Language)

  • 0과 1로 이루어진 이진수(binary code) 명령어들로 구성된 언어

어셈블리어(Assembly Language)

  • 사람이 직접 기계어 프로그램을 작성하기 힘들기 때문에 만들어진 언어
  • 기계어의 각 명령을 ADD,SUB,MOVE 등 가급적 표현하기 쉬운 상징적인 니모닉 기호(mnemonic symbol)로 일대일 대응시킨 언어

고급언어(High Level Language)

  • 어셈블리어 역시 사람이 다루기 힘들고 표현에 한계가 있기 때문에 만들어 진 언어
  • 사람이 이해하기 쉽고, 복잡한 알고리즘이나 프로그램, 자료를 효율적으로 표현
  1. 절차 지향 언어(Procedural Programming Language)
    • 초기의 고급 언어
    • 순차적인 처리가 중요시 되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법
    • 대표적인 절차지향 언어에는 C언어
  2. 객체 지향 언어(Object Oriented Programming Language)
    • 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들 마다 역할을 정의하여 객체들 간의 상호작용을 통해 프로그램을 만드는 프로그래밍 기법
    • 특징
      • 상속(Inheritance) 상위 클래스의 모든 걸 하위 클래스가 이어 받는 것 부모의 특징을 자식이 물려 받는 것 과 같음
      • 캡슐화(Encapsulation) 데이터와 코드의 형태를 외부로부터 보호 및 데이터의 구조와 역활, 기능을 하나의 캡슐 형태로 만드는 방법
      • 다형성(Polymorphism) 한 객체가 다른 여러 객체로 재구성 되는 것 대표적인 예로 오버로드(Overload) 또는 오버라이드(Override)이 있음
      • 추상화(Abstraction) 객체의 공통적인 속성과 기능을 추출하여 정의하는 것 공통적인 특성을 파악하여 필요 없는 특성을 제거하는 과정
    • 대표적인 객체 지향 언어에는 JAVA, C#, C++ 등이 있음

프로그램 컴파일 과 실행

  • 프로그래밍은 컴퓨터 언어로 프로그램 소스(Source)파일을 작성하는 것으로 시작
    • 소스(Source) 프로그래밍 언어로 작성된 텍스트 파일
  • 컴퓨터는 고급 언어로 작성된 프로그램을 직접 처리할 수 없기 때문에, 컴파일(compile) 과정을 통해 기계어로 변환 필요
    • 컴파일(compile) 소스 파일을 컴퓨터가 이해할 수 있는 기계어로 만드는 과정

바이트 코드

  • 자바 가상 기계에서만 실행 되는 기계어로서 CPU와 관계 없는 바이너리 코드(Binary Code)
  • 자바 가상 기계가 인터프리터 방식으로 바이트 코드 해석
    • 인터프리터 고급언어로 작성된 프로그램을 한 문장씩 읽고, 번역 후 실행하는 방식

자바 가상 기계(JVM : Java Virtual Machine)

  • 소프트웨어로서, 서로 다른 플랫폼에서 자바 프로그램이 실행되는 동일한 환경 제공
  • 자바 가상 기계 자체는 플랫폼에 종속적

자바 프로그램 실행

  • 소스 코드(.java) → 자바 컴파일러 → 바이트 코드(.class) → JVM(로딩 (→ 필요한 클래스 파일 로딩) → 배치→ 실행) → 운영체제

JDK(Java Development Kit)

  • 자바 개발자를 위한 상업용 소프트웨어
  • 자바 컴파일러 등의 개발 도구와 JRE(Java Runtime Environment)로 구성
    • JRE(Java Runtime Environment) 개발자가 활용할 수 있는 자바 API와 자바 가상 기계를 포함
  • JDK의 bin 디렉터리에 포함된 주요 개발 도구
    • javac 자바 소스를 바이트 코드로 변환하는 컴파일러
    • java 자바 응용프로그램 실행기
    • javadoc 자바 소스로부터 HTML 형식의 API 도큐먼트 생성
    • jar 자바 클래스들(패키지포함)을 압축한 자바 아카이브 파일(.jar) 생성 관리
    • jmod 자바의 모듈 파일(.jmod)을 만들거나 모듈 파일의 내용 출력
    • jlink 응용프로그램에 맞춘 맞춤형(custom) JRE 제공
    • jdb 자바 응용프로그램의 실행 중 오류를 찾는 데 사용하는 디버거
    • javap 클래스 파일의 바이트 코드를 소스와 함께 보여주는 디어셈블러

자바의 배포판 종류

  • Java SE
    • 자바 표준 배포판(Standard Edition)
    • 데스크탑과 서버 응용 개발 플랫폼
  • Java ME
    • 자바 마이크로 배포판(Micro Edition) 휴대전화나 셋톱박스 등 제한된 리소스를 갖는 하드웨어에서 응용 개발을 위한 플랫폼
    • Java SE의 서브 셋 + 임베디드 및 가전 제품을 API 정의
  • Java EE
    • 자바 기업용 배포판 자바를 이용한 다중 사용자, 기업용 응용 개발을 위한 플랫폼
    • Java SE + 인터넷 기반의 서버사이드 컴퓨팅 관련 API 추가

자바 API(Application Programming Interface)

  • JDK에 포함된 클래스 라이브러리
  • 개발자는 API를 이용하여 쉽고 빠르게 자바 프로그래램 개발

자바IDE(Integrated Devlopment Environment)

  • IDE란 단어가 뜻하는 그대로 소스 코드 편집, 컴파일, 디버깅을 한꺼번에 할 수 있는 통합 개발 환경(소프트웨어)
  • 자바 응용프로그램 개발에 현재 많이 사용되고 있는 IDE로 이클립스(eclipse)가 있음

자바의 특징

  • 플랫폼 독립성 자바 가상 기계만 있으면 하드웨어/운영체제를 막론하고 자바 프로그램의 실행이 가능
  • 객체 지향 캡슐화, 상속, 다형성을 지원
  • 클래스로 캡슐화 객체 지향 언어의 캡슐화(encapsulation) 원칙을 철저히 지켜, 변수나 메소드는 반드시 클래스 내에 구현 클래스에 속하지 않는 변수나 메소드는 있을 수 없음 클래스 안에 새로운 클래스, 내부 클래스를 만들 수 있음
  • 소스와 클래스 파일 클래스 파일에는 반드시 하나의 자바 클래스만 존재, 그러므로 자바 소스 파일에 여러 개의 클래스를 작성한 경우, 컴파일 진행 시 클래스마다 별도의 클래스 파일 생성 하나의 자바 소스 파일에 작성된 클래스 중 오직 한 클래스만 public으로 선언 가능, 소스 파일 파일 내에 public 으로 선언된 클래스의 이름으로 자바 소스 파일을 저장
  • 실행 코드 배포 자바 응용프로그램은 한 개의 클래스 파일 또는 다수의 클래스 파일로 구성되어 다수의 클래스 파일을 jar 파일 형태로 압축하여 배포 또는 실행 java 9부터는 자바 응용프로그램을 위한 맞춤형 커스텀 JRE를 만들어 실행이 가능해짐
  • 패키지 서로 관련 있는 클래스는 패키지(폴더와 같은 개념)로 묶어 관리
  • 멀티스레드 하나의 자바 프로그램이 다수의 작업을 처리할 수 있도록 다수의 스레드가 동시에 실행 할 수 있도록 다수의 스레드가 동시에 실행 할 수 있는 환경
  • 가바지 컬렉션 프로그램 내에 사용되지 않는 메모리(가비지)는 자바 가상 기계의 가비지 컬렉션 기능에 의해 자동으로 회수
  • 실시간 응용 시스템에 부적합 실행 도중 예측할 수 없는 시점에 가비지 컬렉션이 실행되므로, 프로그램 실행이 일시 중단되므로 일정 시간 내에 실행 결과를 내야 하는 실시간 시스템에는 부적합
  • 안전성 자바는 타입 체크가 매우 엄격하며, 다른 언어와 달리 메모리의 물리적 주소를 사용하는 포인터의 개념이 없기 때문에 잘못된 자바 프로그램으로 인해 컴퓨터 시스템이 중단 될 일이 없음
  • 프로그램 작성이 쉽다 포인터 개념이 없기 때문에 프로그램 작성에 부담이 적음 다양한 라이브러리와 스윙 등 GUI 라이브러리를 지원하므로 프로그램 작성이 빠르고 쉬움
  • JIT 컴파일러 사용 실행하는 도중 자바 프로그램을 해당 CPU의 기계어 코드로 컴파일하고 CPU가 바로 기계어를 실행하도록 하는 JIT(Just in Time) 컴파일링 기법을 이용하므로, C/C++ 와 거의 비슷한 성능으로 개선

참조 : 명품 JAVA Programming 개정 4판

profile
what you do matters ,but why you it matters much more 당신이 무엇을 하는지는 중요하지만, '왜' 그것을 하는지는 훨씬 더 중요합니다.

0개의 댓글