Java의 설계 목표
- 단순성
- 객체 지향
- 분산 환경 지원
- 강건성
- 보안성
- 아키텍처 중립
- 높은 이식성
- 바이트코드 해석 실행
- 른 실행 성능
- 멀티스레드
- 동적 성질
번째 Java 프로그램
public class Intro {
public static void main(String[] args) {
System.out.println("Java 기초 학습 시작");
}
}
프로그램 구성 요소:
public: 접근 제어자로, 외부에서 접근할 수 있음을 나타낸다.class: 에 오는 이름이 클래스 이름이다.- 클래스명은
public으로 선언되면 파일명과 동일해야 하며,.java확장자를 사용한다.
소스 파일과 바이트코드
Java 코드는 .java 파일로 작성된다. 컴파일 후에는 .class 파일, 즉 바이트코드가 생성되며, JVM에서 실행된다. JVM은 동일한 바이트코드를 서로 다른 운영체제에서 실행할 수 있게 하므로 Java는 플랫폼 독립성을 갖는다.
기본 데이터 타입과 래퍼 클래스
Java의 기본형은 네 가지 범주로 구분된다.
- 정수형
- 부동소수점형
- 문자형
- 논리형
| 타입 | 바이트 수 |
|---|---|
| byte | 1 |
| short | 2 |
| int | 4 |
| long | 8 |
| float | 4 |
| double | 8 |
| char | 2 |
| boolean | JV |
각 기본형에는 대응하는 래퍼 클래스가 있다.
- Byte, Short, Integer, Long
- Float, Double
- Character
- Boolean
int는 기본형이고 Integer는 참조형 래퍼 클래스이다. int의 기본값은 0, Integer의 기본값은 null이다. 래퍼 클래스는 기본형과 문자열 간 변환에 유용하다.
Integer boxed = 100;
int primitive = boxed.intValue();
int parsed = Integer.parseInt("42");
final 워드
- 클래스:
final클래스는 상속할 수 없다. - 메서드:
final메서드는 하위 클래스에서 오버라이딩할 수 없다. - 변수:
final변수는 한 번 초기화되면 값을 변경할 수 없다. 기본형은 값이 고정되고, 참조형은 객체 참조를 바꿀 수 없다.
수학 함수와 상수
Math 클래스는 다양한 산술 연산을 제공한다.
| 표현 | 의미 |
|---|---|
| Math.sqrt(x) | 제곱근 |
| Math.abs(x) | 절대값 |
| Math.pow(a, b) | a의 b제곱 |
| Math.PI | 원주율 |
비트 연산자
&: AND|: OR^: XOR~: NOT<<: 왼쪽 시프트>>: 오른쪽 시프트
String 클래스
String은 불변 객체이다. 한 번 생성된 문자열은 변경되지 않으며, 변경 메서드를 호출하면 새로운 객체가 생성된다.
| 메서드 | 설명 |
|---|---|
| charAt(i) | 지정 인덱스의 문자 반환 |
| compareTo(other) | 사전 비교 |
| isEmpty() | 빈 문자열 여부 |
| indexOf(str) | 부분 문자열의 첫 위치 |
| substring(a, b) | 범위 추출 |
| toLowerCase() | 소문자 변환 |
| toUpperCase() | 대문자 변환 |
Java는 문자열 리터럴을 효율적으로 관리하기 위해 상수 풀을 사용한다. 클래스 로딩 시 .class에 있는 정적 상수 풀 정보가 JVM 메모리의 실행 상수 풀에 적재된다.
입력과 출력
표준 출력은 System.out을 사용한다.
System.out.println("출력 예제");
표준 입력은 java.util.Scanner를 활용한다.
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
String name = sc.nextLine();
int age = sc.nextInt();
패키지
패키지는 클래스를 조직화하고 이름 충돌을 방지하는 단위이다. 패키지명은 일반적으로 도메인을 역순으로 작성한다. 클래스 사용 시 import 문으로 가져올 수 있다.
import java.util.Scanner;
import java.util.*;
package 선언은 소스 파일 맨 위에 위치해야 한다.
for 문
첫 번째는 인덱스 기반 반복이다.
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
두 번째는 향상된 for 문으로, 배열이나 Iterable을 순회할 때 사용한다.
int[] values = {1, 2, 3};
for (int v : values) {
System.out.println(v);
}
이스케이프 시퀀스
| 문자 | 의미 | 유니코드 |
|---|---|---|
| \b | 백스페이스 | \u0008 |
| \t | 탭 | \u0009 |
| \n | 개행 | \u000a |
| \r | 캐리지 리턴 | \u000d |
| \" | 큰따옴표 | \u0022 |
| \' | 작은따옴표 | \u0027 |
| \\ | 역슬래시 | \u005c |
용어 정리
- 코드 포인트: 문자에 할당된 유니코드 값
- 코드 유: 실제 인코딩에서 사용하는 최소 단위