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 |