Java 기본

Srevil·2022년 10월 5일
0

About Programming Language

  1. 기계어
    • 0, 1의 이진수로 구성된 언어
    • 컴퓨터의 CPU는 기계어만 이해하고 처리가능
  2. 어셈블리어
    • 기계어 명령을 상징적 단어인 니모닉 기호로 일대일 대응시킨 단어
  3. 고급언어
    • 자료 구조, 알고리즘을 표현하기 위해 고안된 언어
    • Pascal, Basic, C/C++, Java, etc.
    • 절차 지향 언어와 객체 지향 언어로 분류

Compile

  • 소스(source) : 프로그래밍 언어로 작성된 텍스트 파일
  • Compile : source file -> 기계어
    • sorce file 확장자 & compile 된 파일의 확장자
      • .java -> .class
      • .c -> .o -> .exe
      • .cpp -> .o -> .exe

About Java

  1. 1995년에 발표(발표 년도)
  2. 플랫폼 호환성 문제 해결(목적)
    • 기존 언어로 작성된 프로그램은 PC, Unix, Main Frame 등 플랫폼 간에 호환성 x
    • source를 다시 compile 하거나 프로그램을 재작성 해야함.
  3. 플랫폼 독립적인 언어를 개발(목적)
    • 모든 플랫폼에서 호환성을 갖는 언어 필요
    • Network, web에 최적화된 언어의 필요성 대두
  4. 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용(목적)
    • 가전 제품 : 작은 량의 메모리를 가지는 제어장치
    • 내장형 시스템 요구 충족
  5. 2009년 오라클에서 인수(인수 년도)

WORA

Write Once Run Anywhere
한번 작성하면 모든 플랫폼에서 바로 실행 가능하고, 이는 기존 언어가 가진 플랫폼 종속성을 극복하였으며, Network에 연결된 어느 client에서나 실행 가능함.
즉, OS, HW에 상관없이 Network에 연결되어 있으면 Java Program이 동일하게 실행됨을 뜻한다.

WORA를 가능하게 하는 Java 의 특징

  1. Byte code

    • Java source를 compile한 목적 코드
    • CPU에 종속적이지 않은 중립적인 코드
    • JVM에 의해 해석되고 실행
    • Byte code는 CPU에 의해 직접 실행 x
    • JVM이 작동 중인 platform에서 실행
    • JVM이 인터프리터 방식으로 해석
    • .class에 저장
    • disassemble(.class에 있는 byte code를 text로 볼 수 있게 변환하는 작업)
      - JDK의 javap.exe 이용

      JVM = Java Virtual Machine. Java Byte Code를 실행하는 SW

  2. JVM

    • 동일한 Java 실행 환경 제공
    • JVM 자체는 platform에 종속적
      • e.g. Linux에서 작동하는 JVM은 Windows에서 작동 x
    • 오라클, IBM 등에서 JVM 개발 및 공급
  3. Java 응용프로그램 실행

    • JVM이 응용프로그램을 구성하는 .class file 의 Byte code 실행

What is Platform Dependency

  1. Platform = HW platform + OS Platform

    Program의 Platform 호환성이 없는 이유

  2. 기계어가 CPU마다 다름
  3. OS(운영체제)마다 API가 다름
  4. OS마다 실행파일 형식이 다름

Java

C/C++

C 와 Java의 개발 및 실행 환경

C/C++


1. 개발

  • 여러 개의 .c 파일로 나누어 개발
  • link를 통해 실행에 필요한 모든 code를 하나의 실행 파일(.exe)에 저장
  1. 실행
    • exe file은 모두 memory에 올려져야 실행. memory가 적은 경우 낭패

Java


1. 개발

  • 여러 .java 파일로 나누어 개발
  • link 과정 x
  1. 실행
    • main() 메소드를 가진 class에서부터 실행 시작
    • JVM는 필요할 때 class file loading, 적은 memory로 실행 가능

Java 와 C/C++ 의 실행 환경 차이


1. Java 는 링크 과정 x / C 는 링크 과정 o
2. Java의 compile 결과는 byte code / C의 compile & link 결과는 .exe

  1. Java는 JVM 위에서 실행 / C는 OS위에서 실행

Tip: Java와 C/C++ 실행 환경 및 과정

  • Java

    • compiler byte code 생성 후 link 과정 x
    • byte code 는 JVM에서만 실행 가능
    • 필요한 class 들을 program 실행 중에 동적으로 코딩
      • 동적 loading 은 JVM에 포함된 class Loader에 의해 이루어짐
      • Class Loader class 를 이용하여 개발자가 직접 로딩 가능
  • C/C++

    • compiler 가 중간 단계인 목적 코드(.o) 생성
    • link
      • linker가 .o 와 library 연결, 실행 가능한 .exe file 생성
      • 정적 library는 .exe file에 포함 => .exe file size 커짐
      • 동적 library의 경우는 실행 중에 동적으로 link
    • .o 및 .exe file은 platform에 따라 다름
      • 다른 platform에서 실행시키려면 다시 compile & link

    Java 관련 용어

  1. JDK와 JRE
  2. Java SE, Java ME, Java EE
  3. Java API
  4. Module programming

    JDK와 JRE

  • JDK

    • 응용 개발 환경(개발에 필요한 도구 포함)
      => Compiler, Compile 된 API Class들이 들어 있는 module file, sample, etc.
    • bin dir에 포함된 주요 개발 도구
    • 설치 후 dir 구조
  • JRE

    • 실행 환경(JVM 포함)
    • Compile 된 Java API들이 들어 있는 Module file
    • 개발자가 아닌 경우 JRE만 따로 다운 가능

배포판 종류(SE, ME, EE)

  • Java SE

    • 표준 배포판
    • Desktop 과 Server 응용 개발 platform
  • Java ME

    • Micro 배포판
      • 휴대 전화, PDA, 셋톱박스 등 제한된 resource를 갖는 HW 응용 개발 위한 platform
      • 가장 작은 memory footprint
    • SE의 subnet + Embeded & 가전 제품을 위한 API 정의
  • Java EE

    • 기업용 -> 다중 사용자, 기업용 응용 개발을 위한 platform
    • SE + Internet 기반의 Server Side Computing 관련 API

Java API

  • JDK에 포함된 class library

    • 주요 기능들을 미리 구현한 class library set
  • API를 이용하여 쉽고 빠르게 개발

    • API에서 정의한 규격에 따라 class 사용
  • Java Package

    • 서로 관련된 class 들을 분류하여 묶어 놓음
    • 계층 구조
      • class의 이름에 package 이름도 포함
      • 다른 package에 동일한 이름의 class 존재 가능
    • API는 JDK에 package 형태로 제공
      • 필요한 class가 속한 package만 import하여 사용
    • 개인 package 생성 가능

Module Programming

  • Modularity(모듈화)

    • Java 9에서 정의된 새로운 기능(17년 9월 21일)
    • Module : Package와 이미지, XML 파일 등의 자원들을 묶은 단위
    • Module Programming : 응용프로그램을 필요한 module을 연결하는 방식으로 작성
  • Java Platform Modularity

    • 실행 시간에 사용되는 Java API의 모든 class 를 module 로 분할
    • 목적
      • 세밀한 모듈화 -> 필요없는 모듈 배제
      • 작은 크기의 실행 환경 구성
      • HW가 열악한 소형 IoT 장치 지원
  • 모듈 방식 사용 안해도 무관

Java 특성

  • Platform 독립성
    • platform 상관없이 어디서든 실행 가능
  • 객체 지향
    • 상속성, 다형성, 캡슐화
  • class로 캡슐화
    • class 내에 모든 변수(field), 함수(method) 구현 필요
    • class 안에서 새로운 class(내부 class) 작성 가능
  • source(.java) & .class file
    • 하나의 source file에 여러 class 작성 가능
      • public class는 하나만 가능
      • source file name == public class name
    • compile 된 class file 에는 class 하나만 존재
      • 다수의 class를 가진 .java 를 compile 하면 class마다 별도의 .class file 생성

Source file(.java)와 Class, class file(.class) 관계

Java 특징

  1. 실행 코드 배포
    • 실행 코드 : 한 개의 class file or 다수의 class file
    • 여러 폴더에 걸쳐 다수의 class file로 구성된 경우
      • jar file 형태로 배포 가능
    • main() method
      • 실행은 main() method에서 시작
    • 하나의 class file에 하나 이상의 main() 블가
      • 각 class file이 main() method를 가지는 것은 상관 x
  2. Package
    • 관련된 여러 class 를 package로 묶어 관리
    • Package는 폴더 개념
      • e.g. java.lang.System은 java\lang dir의 System.class file
  3. 멀티스레드
    • 자체적으로 멀티스레드 지원
      • C/C++ 은 멀티스레드 운영체제 API를 호출
  4. 가비지 컬렉션
    • memory 반환 기능 x. Only Memory 할당 기능(new)만 존재
    • 가비지 : 할당 후 사용 x 인 memory
    • JVM이 자동으로 가비지 회수
  5. 실시간 응용 시스템에 부적합
    • 실행 도중 예측할 수 없는 시점에 가비지 컬렉션 실행
  6. Java Program은 안전
    • Type check가 엄격
    • Pointer 개념 x
  7. 작성 쉬움
    • 다양하고 강력한 Library 많음
  8. 실행 속도를 개선하기 위해 JIT compiler 사용
    • 느린 요인 : 인터프리터 방식으로 byte code 실행
    • JIT(Just in Time) 기법으로 개선
      • 실행 도중 byte code를 해당 CPU의 기계어 code로 compile.

Java의 응용

  1. Desktop 응용프로그램 : 가장 전형적인 응용 프로그램
    • PC 등의 Desktop computer에 설치되어 실행
    • JRE가 설치된 어던 환경에서도 실행 (다른 응용프로그램 도움 x)
  2. Servlet 응용프로그램
    • Applet과 반대로 Server에서 실행되는 프로그램
      • server client model에서 servlet과 applet이 각각 통신하면서 실행
    • Database server & etc server 와 연동하는 복잡한 기능 구현 시 사용
    • 사용자 Interface 필요 없는 응용
    • Web server에 의해 실행 통제
  3. Android 앱
    • 구글 주도 -> OHA에서 만든 free mobile platform
    • JVM에 해당하는 Dalvik은 기존 Byte code와 호환성이 없어 변환 필요
  4. Applet 응용프로그램
    • Web browser에 의해 구동, 실행 제어되는 Java program
    • 자원 접근에 제약 있음
profile
UOU_Unknown

0개의 댓글