2 minute read

OOP01

프로그램

  • 프로그램은 일종의 명령서
    • 프로그래밍 : 사람이 명령서를 작성하는 과정
    • 프로그램 실행 : 컴퓨터가 명령서에 따라 명령을 수행하는 과정

사람과 컴퓨터는 서로 달라 서로 의사소통이 불가

  • 사람은 자연어 사용, 컴퓨터는 기계어 사용

서로의 차이를 극복하는 방법

  • 자연어를 알아듣는 컴퓨터를 만든다.
  • 사람이 컴퓨터의 언어로 명령한다.
  • 번역을 활용하여 언어의 차이를 극복

사람이 작성한 명령서를 컴퓨터의 언어로 극복

  • 사람이 고수준 언어로 프로그램을 작성
  • 고수준 언어로 작성된 프로그램이 기계어 프로그램으로 번역
  • 기계어로 번역된 프로그램을 컴퓨터가 그대로 이해하고 명령을 수행

컴파일

  • 프로그램을 번역하는 과정
  • 컴파일러는 프로그램을 번역하는 프로그램

해석을 활용하여 언어의 차이를 극복

  • 사람이 작성한 명령서를 해석기를 활용하여 실행
  • 사람이 고수준 언어로 프로그램을 작성
  • 컴퓨터는 고수준 언어로 작성된 프로그램 대신 해석기를 실행
  • 실행된 해석기가 고수준 언어로 작성된 프로그램을 이해하고 명령을 수행
  • 따라서 명령서는 해석기라는 컴퓨터의 대리인을 통해 수행

해석

  • 프로그램을 해석 & 실행하는 과정
  • 인터프리터는 프로그램을 컴퓨터 대신 해석하는 프로그램

번역 vs 해석

번역 프로그래밍 언어

  • 큰 사이즈의 프로젝트를 진행할 때 사용
    • 프로젝트가 커지면 안정성을 믿고 맡길 수 있기 때문에
    • 최적화를 해주기 때문에
  • 시스템 프로그램들은 하드웨어에서 직접 동작이 되어야되기 때문에 사이에 번역기를 끼워넣을 수가 없어서 번역 프로그래밍 언어들을 사용한다.

해석 프로그래밍 언어

  • 프로토타이핑 할 때 사용
  • 서버에서도 사용
  • router에 들어가는 소프트웨어들에도 사용한다.

프로그래밍 언어란?

  • 사람이 프로그램을 작성할 때 사용하는 언어
  • Syntax와 Semantics로 구성
    • 구문구조(Syntax) : 프로그래밍 언어 구문의 생김새
    • 의미(Semantics) : 프로그래밍 언어 구문의 동작

번역 프로그래밍 언어

  • 컴파일러에 의해 번역되는 프로그래밍 언어
  • 번역 과정에서 다양한 안정성 검증 과정을 수행
    • Lexical & Syntax analysis, Semantics analyses
  • 번역 과정에서 다양한 최적화 과정을 수행
    • Constant propagation
      • 변하지 않는 상수값은 변수에 넣고 쓰지 않고 상수를 쓴다.
    • Dead-code elimination
      • 실행이 안되는 코드를 제거한다.
    • Loop-unrolling
      • loop가 항상 같은 횟수를 실행한다면 loop 내의 명령들을 나열한다.
  • 컴파일러의 안정성 검증을 통과해야 하므로 상대적으로 학습이 어렵고 자유도가 낮음
  • 안정성 검증 및 최적화 수행으로 프로그램의 성능 및 안정성이 우수
  • C/C++, Java, OCaml 등

해석 프로그래밍 언어

  • 해석기에 의해 해석 & 실행되는 프로그래밍 언어
  • 번역 과정이 없으므로 안정성 검증과 최적화를 수행하지 않음
    • 간단한 수준의 lexical & syntax analysis만 수행
    • 실행 도중 JIT(Just-In-Time) compilation 등을 통해 최적화를 수행하기도 함.
      • JIT(Just-In-Time) compilation : 실행 도중에 컴파일
  • 안정성 검증 과정이 없어 상대적으로 학습이 쉽고 자유도가 높음
  • 오류 발생 시 탐지가 어렵고 해석기를 거쳐 실행되므로 성능이 상대적으로 낮음
  • Python, JavaScript 등

프로그래밍 언어 패러다임

  • 명령형 언어(Imperative Languages) : 프로그램의 상태를 변화시키는 서술(statement)을 순차적으로 수행하여 명령을 수행
  • 절차지향형 언어(Procedural Languages) : 서술의 연속으로 구성되는 절차(procedure)를 정의하고 이를 통해 명령을 수행
  • 함수형 언어(Functional Languages) : 입력과 출력의 매핑인 함수(function)의 조합과 적용으로 프로그램을 구성
  • 객체지향 언어(Object-Oriented Languages) : 상태와 행동을 갖는 객체들의 관계로 프로그램을 구성

Java

  • Java는 대표적인 객체지향 프로그래밍 언어
  • 1996년 Sun Microsystems에 의해 개발
  • 다양한 형태의 가전제품에 탑재되는 소프트웨어 개발을 목표로 정의
  • 하드웨어 및 운영체제에 독립적이다.(Write Once, Run Anywhere)
  • C++과 유사하나 배우고 활용하기 쉬움
  • 순수 객체지향에 가까운 언어
  • 자동 메모리 관리를 수행

Java 프로그램 실행 개요

  • Java는 번역 언어
  • Java 프로그램은 컴파일러를 통해 Java bytecode로 번역
  • Java bytecode는 Java 가상기계(Java Virtual Machine, JVM)에 의해 해석 & 실행
  • Java bytecode는 JVM의 기계어

img.png

복잡하게 실행되는 이유

  • 기계, 운영체제에 구애받지 않고 실행할 수 있도록 하기 위하여 Java bytecode를 해석할 수 있는 해석기를 각각 고용하여 프로그램을 해석(WORA)

Lab

  • Java 개발환경 구축
  • Java 프로그램 작성
  • Java 프로그램 컴파일
  • Java 바이트코드 확인
  • Java 프로그램 실행
  • 프로그램 배포
  • 통합 개발 환경의 사용
  • IntelliJ 설치 & 프로젝트 생성 & 프로젝트 작성 & 프로젝트 실행
  • 실행 가능한 Java Archive 만들기

Categories:

Updated: