[JAVA] 자바 시작하기
This is JAVA :)
이것이 자바다를 보고 공부했습니다 :)
1.1 프로그래밍 언어란?
- 프로그래밍 언어는 고급 언어와 저급 언어로 구분
- 고급 언어: 컴퓨터와 대화할 수 있도록 만든 언어 중에서 사람이 쉽게 이해할 수 있는 언어
- 고급 언어로 작성된 소스는 컴파일을 통해 0과 1로 이루어진 기계어로 변환 후 컴퓨터가 사용
- 일반적으로 프로그래밍 언어는 고급 언어를 의미함
- 프로그램: 컴퓨터에서 특정 목적을 수행하기 위해 프로그래밍 언어로 작성된 소스를 기계어로 번역한 것을 말한다
1.2 자바란?
1.2.1 자바 소개
- 인터넷이 활성화되면서 웹 어플리케이션 구축용 언어로 자바가 급부상
- 한 번의 작성으로 다양한 서버 운영체제에서 실행가능하기 때문
1.2.2 자바의 특징
- 이식성이 높은 언어
- 이식성: 서로 다른 실행 환경을 가진 시스템 간에 프로그램을 옮겨 실행할 수 있는 것
- JRE(Java Runtime Environment 자바 실행 환경)가 설치된 모든 운영체제에서 실행 가능
- 객체 지향 언어
- 객체를 만들기 위해 설계도인 클래스를 작성
- 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어낸다
- 함수적 스타일 코딩 지원
- 최근 함수적 프로그래밍이 다시 부각
- 대용량 데이터의 병렬 처리, 이벤트 지향 프로그래밍에 적합하기 떄문
- 자바 8부터 함수적 프로그래밍을 위한 람다식 지원
- 최근 함수적 프로그래밍이 다시 부각
- 메모리를 자동으로 관리
- 개발자가 메모리에 접근 불가, 자바가 직접 관리
- 객체 생성 시 자동으로 메모리 영역을 찾아서 할당
- 사용 완료 시 Garbage Collector가 사용하지 않는 객체 제거
- Multi-Thread 구현 용이
- Thread 생성 및 제어와 관련된 라이브러리 API를 제공
- Dynamic Loading을 지원
- 객체가 필요한 시점에 클래스를 동적 로딩해서 객체를 생성
1.2.3 JVM(Java Virtual Machine)
- 가상의 운영체제 역할
- JVM이 운영체제와 자바 프로그램을 연결하며 운영체제와 상관없이 동일한 실행결과가 나오도록 함
- 대신 JVM은 운영체제에 종속적
- 자바 프로그램 실행 단계
- .java 소스 파일 작성
- 컴파일러(javac.exe)로 컴파일하면 확장자가 .class인 바이트 코드 파일이 생성
- 바이트 코드 파일은 JVM 명령어(java.exe)에 의해 JVM에서 해석되고 운영체제에 맞게 기계어로 번역
1.3 자바 개발 환경 구축
- JRE = JVM + 표준 클래스 라이브러리 API
- JDK = JRE + 컴파일러 등 개발에 필요한 도구
1.6 이클립스 설치
- 이클립스는 자바 프로그램을 개발하기 위한 IDE(Integrated Development Environments 통합 개발 환경)
추가로 공부한 내용
동적로딩 vs 정적로딩
동적 로딩
실행에 필요한 내용을 메모리에 한번에 로딩하지 않고 실제 요청이 발생할 때 메모리에 로딩되는 방식
- 대표적인 예: Java (웹과 같이 유동적, 가변적인 프로그램)
- 장점
- 필요한 기능만 사용하기 떄문에 메모리를 적게 차지한다.
- 단점
- 요청이 생기면 메모리에 로딩하기 때문에 실행 속도가 느려질 수 있다
(static 키워드로 해결)
- 요청이 생기면 메모리에 로딩하기 때문에 실행 속도가 느려질 수 있다
정적 로딩
프로그램을 실행할 때, 모든 실행파일이 메모리에 로딩되는 방식
- 대표적인 예: C언어 (자주 변하지 않는 소프트웨어)
- 장점
- 모든 기능이 메모리에 존재하므로, CPU가 필요로 하는
- 단점
- 메모리를 많이 차지한다.
Garbage Collectior
-
객체가 생성되는 heap에 새로운 객체를 생성할 메모리가 없으면 JVM이 OOM(Out Of Memory error)를 던지고 Garbage Collector가 실행된다.
-
Garbage Collection의 대상
- 모든 객체 참조가 null인 경우
- 객체가 블럭 안에서 생성되고 블럭이 종료된 경우
- 부모 객체가 null일 때 자식 또는 포함된 객체
Garbage Collection, Garbage Collector 관련 내용이 방대하여 이 정도로 마무리하고 다음에 다시 공부해봐야겠다
참고
JAVA2_day02 | 동적 로딩, 정적 로딩, static 키워드
JAVA:: 가비지 컬렉터(Garbage Collector)란
자바에서 Garbage Collection은 어떻게 동작하나?
Java Garbage Collection
Leave a comment