[객체지향프로그래밍] 1. java 시작 -1

Zoe·2022년 4월 15일
0
post-thumbnail

1. 프로그래밍 언어

  • 기계어 : 0,1 이진수로 구성된 언어, 컴퓨터의 CPU는 기계어만 이해하고 처리 가능
  • 어셈블리어 : 기계어 명령을 표현하기 쉬운 상징적인 단어인 니모닉 기호로 일대일 대응시킨 언어
  • 고급언어: 사람이 이해하기 쉽고, 복작한 작업, 자료 구조, 알고리즘을 표현하기 위해 고안된 언어
    - Pascal, C, Basic, java, c#
    -절차 지향 언어와 객체 지향 언어

2. 컴파일

  • 소스: 프로그래밍 언어로 작성된 텍스트 파일
  • 컴파일 : 소스 파일을 컴퓨터가 이해할 수 있는 기계어로 만드는 과정
언어소스코드컴파일 단계링킹단계
java.java.class
C.c.obj.exe
C++.cpp.obj.exe
  • 프로그램 생성 과정

3. 자바의 태동

- 자바의 목적

  • 플랫폼 호환성 문제 해결
  • 플랫폼 독립적인 언어 개발
  • 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전 제품에 적용
    - 가전 제품 : 작은 량의 메모리를 가지는 제어 장치
    • 내장형 스시템 요구 충족(임베디드 환경) - 플랫폼이 다양함.

- 플랫폼 독입적 언어

  • 플랫폼 종속적 언어 : 하나의 앱이 OS 마다 다른 환경을 요구함. 소스 코드의 일부를 재작업 해야함.
  • 플랫폼 독립적 언어 : 하나의 앱이 모든 OS 에서 실행 가능함
    재작업 필요성이 없음-> 생산성 증가.

4. WORA

WORA : Write Once Run Anywhere

  • 한번 작성된 코드는 모든 플랫폼에서 바로 실행, 즉 플랫폼 독립적
  • 네크워크에 연결된 어느 클라이언트에서나 실행 ( 웹 브라우저, 분산 환경 지원)

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

  • 바이트 코드 : 자바 소스를 컴파일 한 목적 코드
    - CPU에 종속적이지 않은 중립적인 코드
    - JVM에 의해 해석되고 실행됨
  • JVM: 자바 바이트 코드를 실행하는 자바 가상 기계 (sw)

플랫폼 종속성

  • 플랫폼 = 하드웨어 플랫폼 + 운영체제 플랫폼
  • 사용자 입장에서 같은 프로그램이 개발자의 입장에서 서로 다른 프로그램으로 인식됨 -> 플랫폼이 다르면 내부구조가 다름.

자바의 플랫폼 독립성 WORA

  • 링크 과정 없이 소스 코드를 한번만 작성하고 컴파일도 한번 진행. (링크 과정이 없다 -> 즉, 실행파일을 만들지 않는다.)
  • 생산성을 향상 시켜줌.

* API와 라이브러리

  • API: 함수를 다운로드 받지 않아도 운영체제가 기본 제공하는 함수 목록
    - API는 광범위하게 사용되고 있음. 플랫폼 성격을 갖고 APP이 쓸 수 있도록 만들어진 함수 set (작업량을 줄어줌)

  • 라이브러리: 특정한 역할을 하는 함수들의 모임, 자주 사용되는 함수가 이미 만들어져 있는 것
    - .obj 파일로 함수들이 번역되어 있음.

  • 실행 파일의 구조: .obj 파일이 여러개 합쳐진 것

  • 헤더 색션

    5. 바이트 코드와 자바 가상 기계

    바이트 코드

  • 바이트 코드: 자바 가상 기계에서 실행 가능한 바이너리 코드.
    - 바이트 코드는 컴퓨터 CPU에 의해 직접 실행되지 않고 자바 가상 기계가 작동 중인 플랫폼에서 실행됨. (인터프리터 방식)

  • 클래스 파일 (.class)에 저장.

    JVM (자바 가상 기계)

  • 역할 :각기 다른 플랫폼에 설치 되더라도 동일한 자바 실행 환경을 제공
    - 자바 응용프로그램을 실행함. 자바 가상 기계가 응용프로그램을 구성하는 클래스 파일의 바이트 코드 실행

  • 자바 가상 기계는 플랫폼에 종속적(플랫폼 마다 각각 작성됨.)

  • 자바 개발사인 오라클, IBM에서 JVM 개발 및 공급

    6.자바와 C/C++의 실행 환경 차이

  • 자바 : 컴파일러가 바로 바이트 코드 생성 후 링크 과정이 없음.
    - 바이트 코드는 JVM에서만 실행 가능.
    - 자바는 필요한 클래스들은 프로그램 실행 중 동적으로 로딩

    • 동적 로딩은 JVM에 포함된 클래스 로더에 의해 이루어짐.
    • Classloader 클래스 이용 개발자가 직접 로딩 가능
  • C/C++
    - 컴파일: C/C++에서는 컴파일러가 중간 단계인 목적 코드 생성
    -링크:링커가 목적 코드와 라이브러리 연결, 실행 가능한 최종 실행 파일 생성

    • 정적 라이브러리: 실행 파일에 포함. 링크 단계에 결합되는 .obj파일
      -> 실행 파일의 크기가 커짐
      -> 라이브러리가 실행 파일에 들어가 있는 경우
    • 동적 라이브러리: 실행 중 동적 링크 (.dill)
      -> 실행 중 동적으로 결합하는 경우도 있음
      ->실행 파일 내에서 동적 라이브러리의 함수 호출 -> 로딩/실행 기계어 파일
  • 목적 코드 및 실행 파일은 플랫폼에 따라 다름 : 플랫폼이 바뀌거나 다른 플랫폼에서 실행시키려면 다시 컴파일 및 링크

7.JDK / JRE

JDK(Java Development Kit)

: 자바 응용 개발 환경. 개발에 필요한 도구(컴파일러, 컴파일된 자바 API 클래스들이 내포된 모듈 파일들, 샘플 등) 포함

JRE(Java Runtime Environment)

:자바 실행 환경, JVM 포함

  • 컴파일된 자바 API들이 들어있는 모듈 파일
  • 개발자가 아닌 경우 JRE만 따로 다운 가능

Java SE 구성

JDK 설치시 디렉터리 구조

profile
모른다는 말로 다가가 새로운 기술을 반갑게 맞이하고 적용하여 새로운 문제 해결을 꿈꿉니다.

0개의 댓글