Chapter 1: 개발 언어 (Java)
- Java 란?
- 어디서나 마시는 커피처럼 어디서나 동작 가능한, 자바 커피에서 이름을 따서 만든 Java언어
- 발표년대 : 1990'
- 핵심기능 : C언어 기능 + 공통 실행환경, 클래스, 객체 바구니
- C 언어 기능에 여러 기기에서 실행가능하도록 도와주는 실행환경, 그리고 데이터와 메서드를 담는 클래스를 통해 객체를 만들 수 있는 언어
- ※ C언어 핵심 기능 : A(입/출력, 문맥) + B(기계식 데이터 타입, 연산기능, 메서드) + 자료형 데이터 타입 + 자료 구조
- Java를 배우는 이유
- 발전해온 언어 중 가장 많이 쓰이는 개발언어
- 플랫폼 독립성: 한 번 작성하면 어디서든 실행 가능(Write Once, Run Anywhere).
- 객체 지향 언어: 유지보수가 용이하고, 코드 재사용성이 높다.
- 안정성과 보안성: 강력한 메모리 관리와 보안 기능 제공.
- 대규모 앱 개발이 가능함
- 풍부한 라이브러리와 API: 다양한 기능을 쉽게 구현할 수 있도록 지원.
- JVM (Java Virtual Machine)
- 자바 가상 머신이라는 뜻을 가지고 있으며 가상의 기기를 만들어 주는 것을 의미함
- 즉, 여러가지의 기기위해 Java 프로그램을 실행시킬 수 있는 가상의 기기를 만들어 주는 것을 의미함.
- JVM 구성
- 바이트 코드 : Java 프로그램 변환 코드 (작성한 .Java코드를 운영체제가 읽을 수 있는 .class 파일로 변환)
- 인터프리터 : Java, class 코드 해석기 (운영체제가 읽은 바이트 코드를 기계가 실행할 수 있는 기계어로 변역)
- JIT 컴파일러 : 빠른 Java,Class 코드 해석기 (인터프리터의 효율을 높여주는 서포터 해석기)
- 메모리 영역 : Java데이터를 저장하는 영역 (운영체제로 부터 JVM이 할당받은 메모리 영역)
- 클래스 로더 : Java .class 바이트 코드를 메모리 영역에 담는 운반기 (JVM으로 class를 불러와 메모리에 저장)
- 가비지 컬렉터 : Java 쓰레기 청소기 (메모리 영역에서 안쓰는 데이터를 주기적으로 흡수해가는 청소기)
- Java 개발 환경 구성 방법
- JRE(Java Runtime Environment)
- JVM을 설치하는 방법은 JRE를 설치하는 것으로 JRE는 자바 실행 환경의 뜻을 가지고 있음
- 하지만 JRE(JVM)만 있다면 Java 프로그램을 실행'만' 시킬 수 있음
- JDK가 Javac 명령을 통해 .Java 파일을 실행가능한 .class 파일로 변환함JRE는 .class 파일만 실행 가능함
- JDK(Java Development Kit)
- 자발 개발 키트라는 뜻을 가지고 있으며, Java 프로그램을 개발하기 위해 필요함
- JDK는 JRE의 기능을 포함하고 있으며 .Java 파일을 .class 파일로 변환해주는 Java Compiler(Javac) 기능이 있음.
- JDK는 코드를 디버깅하는 jdb 등의 기능이 있음
- JDK 디버깅 기능 : JDK의 Jdb기능을 통해 실행중인 프로그램의 코드 실행을 따라다니며 볼 수 있음
- Java 프로그램을 실행한다는 것은 Java 코드를 한줄씩 실행하며 명령을 수행하는 것을 의미
- 개발한 코드를 한줄씩 객체와 메소드를 수행하면서 변수가 변하는 과정을 볼 수 있도록 디버깅기능을 제공함
- JRE(Java Runtime Environment)
- JAVA로 프로그램 만들기
public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
- Main 메서드 : Java 프로그램의 시작점으로 실행되면 제일 먼저 클래스의 main 메서드를 실행하는 것이 JVM의 약속
- public class (
- 클래스 정의
- public 클래스 경로 외부에서 실행시킬 수 있다고 표시해주는 접근 제어자
- class 객체를 만드는 클래스라고 선언
- Main 클래스 명
- 파일명과 일치시켜야 함. Java 컴파일러가 바이트코드 변환했을때의 파일 확장명(.class)와 일치됨
- public static void main(
- main 메서드 정의
- public : 외부에서 실행시킬 수 있다고 표시해주는 접근제어자
- static : Java 컴파일러가 바이트 코드로 변환할때 미리 정의되는 메서드 표기
- 앱 실행시 한번만 정의되며 static 메서드 또는 변수끼리만 호출할 수 있음
- void : 메서드의 응답값을 정의하는 곳으로 void는 응답할 값이 없다는 정의임
- int는 정수, char는 문자, string은 문자열 등
- (String[] args)
- 메서드가 시작될때 넘겨받을 데이터들(변수들)
- String[] : 문자열 여러개 데이터 타입
- args : 문자열 여러개 데이터의 이름 (사용자가 정의한값)
Chapter 2: 변수
- 변수와 상수의 차이점
- 변수: 값이 변경될 수 있는 저장공간. ex) int number = 10;
- 상수: 값이 변경되지 않는 저장공간. ex) final int number = 10;
- 변수 타입
- 기본 데이터 타입:
- 정수형: byte, short, int, long
- 정수형 숫자값을 저장함 (0,1,2,10)
- byteNumber = 127; // byte 는 -128 ~ 127 범위의 숫자만 저장 가능
- shortNumber = 32767; // short 는 -32,768~32,767 범위의 숫자만 저장 가능
- intNumber = 2147483647; // int 는 -21억~21억 범위의 숫자만 저장 가능
- longNumber = 2147483647L; // long 은 숫자뒤에 알파벳 L 을 붙여서 표기하며 매우 큰수를 저장 가능
- 실수형: float, double
- 소수점 실수값을 저장함 (0.123, 0.9999)
- float (4byte) : 3.4 * -10^38 ~ 3.4 * 10^38 (long 보다 큼)범위의 숫자 저장이 가능
- double (8byte) : 1.7 * -10^308 ~ 1.7 * 10^308 (long 보다 큼)범위의 숫자 저장이 가능
- 문자형: char
- ‘A’, ‘1’ 와 같은 문자 하나만 저장함
- 논리형: boolean
- True/False 값만 저장함
- 정수형: byte, short, int, long
- 참조 데이터 타입: String, 배열, 객체 등
- 문자열 변수 : String “Apple”, “텍스트” 와 같은 문장을 저장
- Object, Array, List … : 객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장
- 래퍼 클래스(Wrapper Class) 변수
- 기본형 변수를 클래스로 감싼 것.
- 박싱 (Boxing): 기본형 타입을 래퍼 클래스로 변환하는 과정.
- 예: int number = 21; → Integer num = new Integer(number);
- 언박싱 (Unboxing): 래퍼 클래스를 기본형 타입으로 변환하는 과정.
- 예: int n = num.intValue();
- 클래스 기능을 활용하기 위해 사용함 (객체지향 프로그래밍).
- 변수 타입 간 형변환(Casting) 방법
- 정수 ↔ 실수: (원하는 타입) 사용.
- 예: doubleNumber = (double) intNumber;
- 자동 형변환: 작은 타입에서 큰 타입으로 변환 (값 손실 없음).
- 예: intNumber = byteNumber;
- 강제 형변환: 큰 타입에서 작은 타입으로 변환 (값 손실 가능).
- 예: intNumber = (int) doubleNumber;
- 정수 ↔ 실수: (원하는 타입) 사용.
- 기본 데이터 타입: