프로그래밍 언어/Java

[Java] 자바 이론

Campus Coder 2023. 4. 17. 01:16
728x90
반응형

프로그래밍 언어

  • 기계어: 이진수로 구성된 언어, CUP는 기계어만 처리 가능
  • 어셈블리어: 기계어를 표현하기 쉬운 언어인 니모닉 기호로 일대일 대응 시킨 언어
  • 고급언어: 사람이 이해하기 쉽고 복잡한 작업 등을 위해 고안된 언어 → C/C++, Java 등

 

컴파일

소스 프로그램 편집 및 개발 → 소스 프로그램→ 컴파일러 → 기계어 → 프로그램 실행

 

자바의 태동

목적

  • 플랫폼 호환성 문제 해결
  • 플랫폼 독립적인 언어 개발
  • 메모리 사용량이 적고 다양한 플랫폼을 가지는 가전제품에 적용

 

WORA(Write Once Run Anywhere)

  • 한번 작성된 코드는 모든 플랫폼에서 바로 실행
  • C/C++ 등 기존 언어가 가진 플랫폼 종속성 극복
  • 네트워크에 연결된 어느 클라이언트에서나 실행

 

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

바이트 코드

  • CPU에 종속적이지 않은 중립적인 코드
  • 자바 소스를 컴파일한 목적 코드
  • JVM에서만 의해 해석되고 실행됨
  • 클래스 파일(.class)에 저장

 

JVM

  • 자바 바이트 코드를 실행하는 자바 가상 기계(소프트웨어)
  • 자바 가상 기계가 설치된 모든 컴퓨터에서 실행됨
  • 동일한 자바 실행 환경 제공
  • 자바 가상 기계 자체는 플랫폼에 종속적
  • 자바 가상 기계가 응용프로그램을 구성하는 클래스 파일(.class)의 바이트 코드 실행

 

C/C++ 프로그램의 개발 및 실행

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

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

 

실행

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

 

자바의 개발 및 실행 환경

자바 프로그램의 개발

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

 

실행

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

 

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

순서 -> -> -> ->
자바 자바 소스 파일(.java) 컴파일러 바이트 코드(.class) 자바 프로그램(.class)/자바 가상 기계/운영체제/하드웨어
C/C++ 소스 파일 컴파일러/링커 바이너리 실행 파일(.exe) C++프로그램(.exe)/운영체제/ 하드웨어

 

자바

  • 컴파일러가 바이트 코드를 생성한 후 링크 과정 없음
  • 자바는 필요한 클래스들을 프로그램 실행 중에 동적으로 로딩
    • 동적 로딩은 JVM에 포함된 클래스 로더에 의해 이루어짐
    • ClassLoader 클래스를 이용하여 개발자가 직접 클래스 로딩가능

 

C/C++

  • 컴파일
    • 컴파일러가 중간 단계인 목적 코드를 생성

 

  • 링크
    • 링커가 목적 코드와 라이브러리 연결, 실행 가능한 최종 실행 파일 생성
    • 정적 라이브러리는 실행 파일에 포함 → (실행 파일 크기 증가)
    • 동적 라이브러리의 경우는 실행 중에 동적 링크

 

  • 목적 코드 및 실행 파일은 플랫폼에 따라 다름
    • 플랫폼이 바뀌거나 다른 플랫폼에서 실행시키려면 다시 컴파일 및 링크

 

JDK, JRE

JDK(Java Development Kit)

  • 자바 응용 개발 환경, 개발에 필요한 도구 포함

 

JRE(Java Runtime Environment)

  • 자바 실행 환경, JVM 포함
  • 컴파일된 자바 API 들이 들어 있는 모듈 파일

 

JDK의 bin 디렉터리에 포함된 주요 개발 도구

  • javac - 자바 소스를 바이트 코드로 변환하는 컴파일러
  • java - 자바 응용프로그램 실행기. 자바 가상 기계를 작동시켜 자바프로그램 실행
  • jar – 자바 클래스들(패키지포함)을 압축한 자바 아카이브 파일(.jar) 생성 관리
  • 외에도 javadoc, jmod, jlink, jdb, javap 등이 있음

 

자바 API

API(Application Programming Interface)

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

 

자바 패키지

  • 서로 관련된 클래스들을 분류하여 묶어 놓은 것
  • 계층구조로 되어 있음
  • 자바 API는 JDK에 패키지 형태로 제공됨

 

Java 9부터 시작된 모듈 프로그래밍

모듈화(modularity)

  • 모듈: 자바 패키지들과 이미지, XML 파일 등의 자원들을 묶은 단위
  • 모듈 프로그래밍
    • 자바 응용프로그램을 마치 직소 퍼즐( jigsaw)을 연결하듯이 필요한 모듈을 연결하는 방식으로 작성

 

자바 플랫폼의 모듈화

  • 실행 시간에 사용되는 자바 API의 모든 클래스들을 모듈들로 분할
  • 모듈화의 목적
    • 세밀한 모듈화, 자바 응용프로그램이 실행되는데 필요없는 모듈 배제
    • 작은 크기의 실행 환경 구성
    • 하드웨어가 열악한 소형 IoT 장치 지원

 

  • 모듈 방식이 아닌, 기존 방식으로 자바 프로그래밍 해도 무관
    • 자바 플랫폼이 모듈 방식으로 바뀌었지만, 굳이 응용프로그램을 모듈 방식으로 작성할 필요 없음

 

자바 통합 개발 환경 - 이클립스

IDE

  • 통합 개발 환경
  • 편집, 컴파일, 디버깅을 한번에 할 수 있는 통합된 개발 환경

 

이클립스

  • 자바 응용 프로그램 개발을 위한 통합 개발 환경

 

자바 프로그램 개발

public class Hello2030

  • 클래스 선언문
  • Hello2030 은 클래스 이름
  • 클래스는 {와 } 사이에 정의
  • 자바는 하나 이상의 클래스로 구성

 

public static void main(String [] args)

  • 자바 프로그램은 main() 메소드에서 실행 시작
    • 실행을 시작하는 클래스에 main() 메서드가 반드시 하나 존재

 

int n = 2030;

  • 지역 변수 선언

 

System.out.println("헬로"+n);

  • 화면에 "헬로2030“ 출력
  • System.out 객체는 JDK에서 제공됨

 

자바 소스 편집

클래스와 동일한 이름으로 파일 저장

확장자 .java

 

자바 응용의 종류

데스크톱

  • PC 등의 데스크톱 컴퓨터에 설치되어 실행
  • 자바 실행 환경(JRE)이 설치된 어떤 컴퓨터에서도 실행

 

서블릿

  • 웹 서버에서 실행되는 자바 프로그램
  • 데이터베이스 서버 및 기타 서버와 연동하는 복잡한 기능 구현 시 사용
  • 사용자 인터페이스가 필요 없는 응용
  • 웹 서버에 의해 실행 통제받음

 

안드로이드

  • JVM에 해당하는 Dalvik은 기존 바이트 코드와 호환성 없어 변환 필요

 

자바의 특성

플랫폼 독립성

객체지향

  • 상속성, 다향성, 캡슐화

 

클래스로 캡슐화

  • 클래스 내에 모든 변수, 함수 구형해야 함
  • 클래스 안에서 새로운 클래스 작성 가능

 

소스(.java)와 클래스(.class) 파일

  • 하나의 소스 파일에 여러 클래스 작성 가능
    • public 클래스는 하나만 가능
    • 소스 파일 이름 = public으로 선언된 클래스 이름

 

  • 컴파일된 클래스 파일에는 클래스 하나만 존재
    • 다수의 클래스를 가진 자바 소스(.java) 컴파일 시 클래스마다 별도의 클래스 파일(.class) 생성

 

자바의 특징

실행 코드 배포

  • 실행 코드: 한 개의 class 파일 또는 다수의 class파일로 구성
  • 여러 폴더에 걸쳐 다수의 클래스 파일로 구성된 경우 → jar 파일 형태
  • main() 메서드에서 응용 프로그램 시작
  • 하나의 클래스 파일에 하나의 main() 메소드

 

패키지

  • 관련된 여러 클래스를 패키지로 묶어 관리
  • 패키지는 폴더 개념
    • ex) java.lang.System은 java/lang 디렉터리의 System.class 파일

 

  • 멀티스레드
    • 자바는 운영체제의 도움 없이 자체적으로 멀티스레드 지원
    • C/C++ 등에서는 API 호출

 

가비지 컬렉션

  • 자바는 응용프로그램에서 메모리 반환기능 없음, 메모리 할당 기능(new)만 있음
  • 가비지: 할당 후 사용되지 않는 메모리
  • 자바 가상 기계가 자동으로 가비지 회수

 

실시간 응용 시스템에 부적함

  • 자바 응용프로그램은 실행 도중 예측할 수 없는 시점에 가비지 컬렉션 실행
  • 일정 시간 내에 반드시 실행 결과를 내야만 하는 실시간 시스템에는 부적합

 

자바 프로그램은 안전

  • 타입 체크가 엄격
  • 포인터 개념 없음

 

프로그램 작성이 쉬움

  • 포인터 개념 없음
  • 다양하고 강력한 라이브러리

 

실행 속도를 계선하기 위해 JIT 컴파일러 사용

  • 자바의 느린 실행 요인: 인터프리터 방식으로 바이트 코드 실행
  • JIT(Just in Time) 컴파일링 기법으로 개선
728x90
반응형

'프로그래밍 언어 > Java' 카테고리의 다른 글

[Java] 자바 기본 문법 4  (0) 2023.04.17
[Java] 자바 기본 문법 3  (0) 2023.04.17
[Java] 자바 기본 문법 2  (0) 2023.04.17
[Java] 자바 기본 문법 1  (2) 2023.04.17