1. Java의 탄생
개발 언어의 역사
- A 언어
- 핵심기능 : 입/출력, 문맥
- B 언어
- Bell 사에서 개발
- 핵심기능 : A언어 기능 + 기계식 데이터 타입, 연산기능, 메서드
- C 언어
- 핵심기능 : B언어 기능 + 자료형 데이터 타입, 자료구조
- Java 언어
- 핵심기능 : C언어 기능 + 공통 실행환경, 클래스, 객체
Java 언어의 기능
2. Java를 배워야 하는 이유
Java를 배워야 하는 이유
- Java는 가장 많이 쓰이는 개발 언어 중 하나
- Java는 공통 실행환경이 있어 여러 기기에서 실행 가능
- 여러 기기의 운영 체제에서 실행할 수 있는 언어
- 특히, 앱 개발에 적합!
- Java는 코드를 이해하기 쉽고 유지 보수가 쉬움
- 존재하는 물건을 “객체”라고 부르는 세상을 닮도록 만든 객체언어
- Java에서는 클래스를 통해 객체를 만듬
- Java는 안정성이 높아 프로그래밍 오류를 방지하고 보안상 안전함
- Java 언어로 작성된 문맥을 바이트 코드로 변환하는 변환기(Compiler)가 먼저 오류를 체크
- Java에서 지원하는 보안 기술이 많이 있음
- 대규모 앱 개발이 가능함
- 네트워크 및 데이터베이스 연결 및 통신 등의 작업을 처리하는 API를 제공
- 다양한 개발 도구와 라이브러리를 사용할 수 있음
- 이를 통해 앱 개발에 필요한 작업을 보다 쉽게 처리할 수 있음
3. Java의 놀이터, JVM
JVM의 뜻
- Java Virtual Machine의 약자로 “자바 가상 머신”이라는 뜻
- 가상 머신이란 가상의 기기를 만들어주는 것을 의미
- 다시 말해서, 여러가지의 기기위에 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어주는 것을 의미
- 어느 장비에서든 JVM을 깔아주면 Java가 실행될 수 있는 환경이 됨
JVM의 구성
- 바이트 코드
- Java 프로그램 변환 코드
- 내가 작성한 코드가 운영체제가 읽을 수 있는 코드(바이트코드)로 Java 컴파일러가 변환한 코드
- Java 컴파일러란?
- 내가 작성한 Java코드(.java 파일)들을 운영체제가 읽을 수 있는 바이트 코드(.class 파일)로 변환하는 변환기
- 인터프리터
- Java .class 코드 해석기
- 운영체제가 읽은 바이트 코드를 기기가 실행할 수 있는 기계어로 번역
- JIT 컴파일러
- 빠른 Java .class 코드 해석기
- 인터프리터의 효율을 높여주는 서포터 해석기
- 메모리 영역
- Java 데이터를 저장하는 영역
- 운영체제로부터 JVM이 할당받은 메모리 영역
- 클래스 로더
- Java .class 바이트 코드를 메모리 영역에 담는 운반기
- JVM으로 class(바이트 코드)를 불러와서 메모리에 저장함
- 가비지 컬렉터
- Java 쓰레기 청소기
- 메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기
4. 개발환경 구성
JRE
- JVM을 설치하는 방법 : JRE를 설치하는 것
- Java Runtime Environment 즉, 자바 실행 환경 이라는 뜻을 가지고 있음
- JRE만 있다면 Java 프로그램을 실행만 시킬 수 있음
- .class 파일만 실행 가능
- JDK 가 javac 명령을 통해 .java 파일을 실행가능한 .class 파일로 변환해줌
JDK
- Java Development Kit 즉, 자바 개발 키트라는 뜻을 가지고 있음
- Java 프로그램을 개발하기 위해서는 필요함
- JRE 기능을 포함하고 있음
- .java 파일들을 .class 파일들로 변환해주는 Java Compiler(javac) 기능
- JDK 디버깅 기능
- Java 프로그램을 실행한다는 것은 곧 Java 코드를 한줄씩 실행하면서 명령을 수행하는 것을 의미
- 우리가 개발한 코드들을 한줄씩 객체와 메소드를 수행하면서 변수들도 변하는 과정을 우리가 볼 수 있도록 JDK는 코드를 따라가면서 변수를 볼 수 있는 “디버깅” 기능을 제공함
- 내가 작서한 코드 라인에 “중단점”을 설정하고 “디보그”모드로 프로그램을 실행하면, 프로그램이 중단점의 코드라인을 수행할 때 프로그램 흐름이 일시정지되며 변수들을 볼 수 있게 도와줌
- 디버깅 = 중단점 일시정지 + 코드 라인단위 수행
- 🤓 JDK 의 Jdb 기능을 통해서 실행중인 프로그램의 코드 실행을 따라다니며 볼 수 있음
5. Java 코드 해석하기
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
- Java 프로젝트는 제일 먼저 클래스의 main 메서드를 실행시킴
- public class Main {
- 클래스 정의
- public : 클래스 경로 외부에서 실행시킬 수 있다고 표시해주는 “접근 제어자”
- 클래스 경로 외부에서 호출 못하도록 막는 “접근 제어자”는 private (그외 protected 도 있음)
- class : 객체를 만드는 클래스 라고 선언
- Main : 클래스 명
- 파일명과 일치 시켜야 함 (다르면 알림문구가 뜸)
- 그렇게 해야 Java 컴파일러가 바이트코드 변환했을때의 파일 확장명(.class )과 일치됨
- public static void main(
- main 메서드 정의
- public : 외부에서 실행시킬 수 있다고 표시해주는 “접근 제어자”
- static : Java 컴파일러가 바이트 코드로 변환할때 미리 정의되는 메서드 표기
- 앱 실행시 한번만 정의되며 static 메서드 또는 변수(데이터) 끼리만 호출할 수 있음
- void : 메서드의 응답값을 정의하는 곳인데 void 는 응답할 값이 없다는 정의
- int 는 정수, char 는 문자, string 은 문자열 등…
- (String[] args)
- 메서드가 시작될때 넘겨받을 데이터들(변수들)
- String[] : 문자열 여러개 데이터 타입
- args : 문자열 여러개 데이터의 이름 (사용자가 정의한값 아무거나 써도됨)