차곡차곡 성 쌓기
article thumbnail

본 포스팅은 '명품 JAVA Programming (개정4판)- 황기태 저' 책을 바탕으로 작성되었습니다.😀


 

 

프로그래밍 언어

  • 기게어
  • 어셈블리어
  • 고급언어 - JAVA

 

언어의 진화

기계어 ➞ 어셈블리어   Fortran(수학 전용 언어)   C   C++

명품 운영체제 - 황기태

  • C 언어 왜 생겼을까? (1972)
    • 유닉스라는 운영체제를 개발하기 위해 만든 언어 : 절차 지향 언어 시대
  • C++ 왜 생겼을까? (1983)
    • PC가 생기면서 규모가 커져 만들고 관리하는 것이 너무 힘들어짐. 객체 지향언어 시대
  • JAVA 왜 생겼을까? (1995)
    • 나온 이유 : C++의 어떤 문제를 해결하기 위해 등장 (어떤 문제인지 아래에서 기술)
    •  C++의 모양을 빌어 등장. 조상이 C++이다

 

컴파일 방식

자바 : .Java  .class (링킹 과정 없음)

C : .c    .obj  .exe

C++ : .cpp    .obj   .exe (컴파일 후 링킹 통해 실행 파일 생성)

 

 

자바의 태동

1991년 그린 프로젝트

  • 선마이크로 시스템즈의 제임스 고슬링에 의해 시작
  • 가전 제품에 들어갈 소프트웨어를 위해 개발

🍎 목적

  • 플랫폼 호환성 문제 해결 → WORA
  • 플랫폼 독립적인 언어 개발 → JAVA의 가상머신
  • 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용 (LG 에어컨 종류만 100개, 다 다르다면?) → 동적 클래스 로딩

 

자바는 플랫폼 독링성, WORA

WORA(Write Onece Run Anywhere)

  • 한 번 작성된 코드는 모든 플랫폼에서 실행될 수 있다.
  • 해결되지 않은 문제 :  프로그램의 플랫폼 호환성이 없음
    • 기계어가 CPU마다 다름
    • 운영체제마다 API 다름
    • 운영체제마다 실행파일 형식 다름
  • 자바는 컴파일하면 바이트 코드가 만들어진다. →  바이트 코드 : 자바 가상 기계가 이해할 수 있는 코드
    • 어떤 컴퓨터든 JVM을 깔아놓으면 모든 자바 코드가 돌아간다. → 자바 가상기계만 설치하면 자바로 짠 코드가 다 돌아간다.
  • 의문. C언어의 경우 소스 코드를 배포하고 해당 컴퓨터에서 실행하면 되지 않나? 컴파일하고 실행파일을 만드는 것이 느려가 그런가

▶︎ WORA를 가능하게 하는 자바의 특징

  • 바이트 코드
    • 자바 소스를 컴파일한 목적 코드
    • CPU에 종속적이지 않은 중립적인 코드 -> 모든 CPU에서 실행할 수 있다.
    • JVM에 의해 해석되고 실행된다.

 

JVM (Java Virtual Machine)

자바 바이트 코드를 실행하는 자바 가상 기계(소프트웨어)

  • 자바 가상 기계 자체는 플랫폼에 종속적
  • 자바 가상 기계가 응용프로그램을 구성하는 클래스 파일의 바이트 코드 실행

 

C / C++과 다른 점

명품 운영체제 - 황기태

✓ C/C++ 프로그램의 개발

  • 여러 소스 파일로 나누어 개발
  • 링크를 통해 필요한 모든 코드를 하나의 실행파일(.exe)에 저장
    • 링커는 필요한 모든 코드를 하나의 exe 파일에 모두 저장한다.

실행

  • 실행 파일(exe)은 모두 메모리에 올려져야 실행, 메모리가 작은 경우 낭패

 

✓자바 프로그램의 개발

  • 여러 소스(.java)를 나누어 개발
  • 바이트 코드 (.class)를 각각 만들지만 실행파일(exe)로 만드는 링크 과정이 없음

실행

  • main() 메소드를 가진 클래스에서부터 실행 시작.
  • 자바 가상 기계는 필요할 때, 클래스 파일을 로딩한다. ➞ 적은 메모리로 실행가능!

 

 

JDK와 JRE

JDK(Java Developmdent Kit)

  • 컴파일러, 컴파일된 자바 API 클래스들이 들어 있는 모듈 파일, 샘플 등

JRE(Java Runtime Environment)

  • 자바를 실행하기 위한 환경. JVM 포함
  • 컴파일된 자바 API 들이 들어 있는 모듈 파일

 

 

📌 자바의 특성

  • 플랫폼 독립성
  • 객체지향
  • 클래스로 캡슐화
    • 클래스 에 모든 변수, 함수를 구현해야 함. 바깥 구현 금지
  • 소스(.java)와 클래스(.class)파일
    • 같은 소스코드 파일안에 4개의 클래스가 있으면, 4개의 클래스 파일이 만들어짐. 내부 클래스도 마찬가지
    • 자바는 동적으로 클래스 로딩을 함. 필요한 클래스을 바로 찾기 위해 같은 각 클래스 파일을 만드는 것.
  • 멀티 스레드
  • 가비지 컬렉션
    • 개발자가 메모리를 반환할 수 있는 방법이 없음
    • 자바 가상 기계가 자동으로 가비지 회수
  • 실시간 응용 시스템에 부적합
    • 가비지 컬렉션의 실행 시기는 예측할 수 없음
  • 실행 속도를 개선하기 위해 JIT 컴파일러 사용
    • 자바의 느린 실행 요인 : 인터프리터 방식으로 바이트 코드 실행
    • JIT(Just in Time) 컴파일링 기법으로 개선
      • 실행 도중 바이트 코드를 해당 CPU의 기계어 코드로 컴파일, 해당 CPU가 기계어를 실행
      • 루프를 많이 도는 코드는 바로 기계어로 컴파일해버려서 CPU가 실행하도록 함
728x90
profile

차곡차곡 성 쌓기

@nagrang

포스팅이 좋았다면 "좋아요" 해주세요!