한국에서 가장 광범위하게 쓰이는 언어로, 초기엔 가전 제품을 위한 언어로 Oak로 명명했으나
1995년 Java 1.0으로 이름을 변경 후 출시하였다.
WORA(Write Once, Run Anywhere)을 목표로 하여 개발환경이 자유롭다는 장점이 있다.
JDK (Java Development Kit)
자바를 개발 시 필요한 라이브러리와 javac, javvadoc 등의 개발 도구를 제공
JRE (Java Runtime Environment)
프로그램을 실행 시킬 때 필요한 라이브러리 API를 함꼐 배포되는 패키지
JVM (Java Virtual Machine)
Java를 실행시킬 때 OS에 종속받지 않고 메모리 관리를 도와준다.

위와 같이 JVM은 JRE에, JRE는 JDK에 포함되어 있다.
기본 문법은 C/C++과 큰차이가 없기때문에 C/C++ 이용자들은 자바에 입문할 때 편할 것이다.
int i = 10;
double d = 10.0;
char c = 'A';
String s = "ABC";
정수, 실수, 문자, 문자열을 변수로 선언하여 저장할 수 있고 문장의 끝을 알리기 위한 ;을 붙여준다.
변수 작명시에는 규칙을 따라야하며 그 규칙은 아래와 같다.
$, _만 허용if, for, int 등의 예약어 사용 불가| 데이터 | 자료형 | 바이트 |
|---|---|---|
| 정수 | byte | 1 |
| short | 2 | |
| int | 4 | |
| long | 8 | |
| 실수 | float | 4 |
| double | 8 | |
| 문자 | char | 2 |
| 문자열 | String | - |
문자열은 문자열의 길이와 JVM의 구현 방식과 객체의 배치 방식에 따라 바이트 크기가 달라질 수 있다.
형변환은 데이터 타입을 다른 데이터 타입으로 변경하는 것을 지칭하며 casting이라고도 한다.
작은 크기에서 큰 크기의 타입으로 변환
데이터 손실이 없을 때 자동으로 수행
ex)
int i = 10;
long l = i;
long l0 = 10L;
float f = l0;
float은 4byte이지만 지수비트로 인해 long보다 더 큰 타입으로 판단한다.
큰 크기를 작은 크기의 타입으로 변환
데이터 손실이 발생할 수 있다.
ex)
double d = 10.0;
int i = (int) d;
주의 사항
java는 정수를 연산할 때 long이 아닌 경우에는 연산항을 int형으로 자동 변환을 하기 때문에 아래와 같은 코드는 컴파일 에러가 발생한다.
byte b1 = 1, b2 = 2; byte b3 = b1 * b2;
사칙연산, 대입, 논리적인 연산 등을 수행하는 기호이다.
구체적인 연산자의 종류는 아래와 같다.
| 연산자 | 기호 |
|---|---|
| 대입 연산자 | = |
| 증감 연산자 | ++, -- |
| 산술 연산자 | +, -, *, /, % |
| 부호 연산자 | +, - |
| 복합 대입 연산자 | +=, -= 등 |
| 관계 연산자 | >, >=, <, <=, ==, != |
| 논리 연산자 | ||, &&, ! |
| 비트 연산자 | &, |, ^, ~, <<, >> |
현실세계에서도 곱셈을 먼저하고 덧셈을 하듯이 컴퓨터 또한 연산에 대한 우선순위가 있다.

주어진 조건에 따라 코드를 실행하거나 반복하여 코드의 실행 흐름을 제어한다.
코드의 실행 흐름을 flowchart로 구성했다고 생각하면된다.
if(조건문1){
실행문
} else if(조건문2){
실행문
}
else{
실행문
}
말 그대로
만약(if) 조건문에 부합한다면 블록안의 코드를 실행한다.
else if는 조건문1에 부합하지 않는 조건문2를 검사한다.
모두 아니라면(else) 블록안의 코드를 실행한다.
switch(변수){
case 조건값1:
실행문
case 조건값2:
실행문
default:
실행문
변수가 설정한 조건값일 때 case의 코드를 실행한다.
각 case마다 break를 걸어주지 않으면 실행하고자하는 case 위의 코드들이 모두 실행되니 주의하자.
switch문의 구조를 점프테이블이라고도 하며 if-else문은 조건을 계속 검사하는 반면 조건값을 찾아 바로 실행하기 때문에 속도는 더 빠르지만 메모리 낭비가 발생할 수 있다.
while(조건식){
실행문
}
설정한 조건식이 true라면 블록안의 코드를 계속 반복해서 실행한다.
예를 들어 while(true)라면 무한히 코드가 실행된다.
무한 루프를 빠져나가는 break 혹은 알맞은 조건식이 필요하다.
for(변수; 조건식; 증감식){
실행문
}
while과 같이 설정한 조건식이 true라면 코드를 반복한다.
가장 흔한 형태는 for(int i = 0; i < n; i++)의 형태로 n만큼 반복하는 것이다.
이 또한 무한 루프에 빠질 수 있기 때문에 알맞은 조건식과 증감식을 설정해야 한다.
int[] array = {1, 2, 3};
for(int num : array){
System.out.println(num);
}
J2SE 5.0부터 추가되었으며 배열, 컬렉션의 값들을 보다 간단하게 참조할 수 있다.
단, 값을 읽는 것만 가능하고 변경은 안된다.
같은 타입의 변수들을 한곳에 묶어 하나의 변수로 선언한다.
한 상자에 변수를 여러개 보관한다고 생각하면 된다.
int[] array0 = new int[n];
배열을 선언할 때는 자료형뒤에 []를 붙이고 new 연산자를 활용해 원하는 만큼의 공간을 할당해준다.
int[] array = {10, 20, 30, 40, 50}
배열 또한 선언과 동시에 초기화를 할 수 있는데,
위와 같은 방법으로 값과 크기를 동시에 할당할 수 있다.
int[5] |
|||||
|---|---|---|---|---|---|
| index | 0 |
1 |
2 |
3 |
4 |
| value | 10 |
20 |
30 |
40 |
50 |
위 표는 방금 선언한 array의 구조를 나타낸 것으로 index는 0부터 시작하여 N - 1까지 있다.
배열에 담긴 변수를 호출하고 싶다면 array[n] 이와 같은 방식으로 호출을 하면 된다.
예를 들어 1번 index의 값을 변수 number에 저장하고 싶다면
int number = array[1];
위와 같이 코드를 작성해주면 된다.
주의할 점은 index는 0부터 시작한다는 점이다.
array[0]가 첫번째 값이고 배열의 크기가 N이라면array[N - 1]이 마지막 값이다.
배열 안에 또 배열을 넣을 수 있다.
복잡할 수도 있겠지만, 상자 안에 또 다른 상자가 있는 것이라고 보면된다.
int[][] arrays0 = new int[N][M];
int[][] arrays1 = {{1, 2, 3}, {4, 5, 6}};
선언은 위와 같이하며 2중배열의 구조는 우리가 일상생활에서 접할 수 있는 표를 떠올리면 된다.
int[2][3] |
|||
|---|---|---|---|
colIndexrowIndex |
0 |
1 |
2 |
| 0 | 1 |
2 |
3 |
| 1 | 4 |
5 |
6 |
위 표는 array1의 구조를 모식화한것이다.
int[N][M]은 M개의 열로 구성된 행이 N개 있다고 생각하면된다.
int[][][] = {{{1, 2}, {3, 4}}, {{5, 6}, {7, 8}}, {{9, 10}, {11, 12}}}위의 3차원 배열과 같이 배열은 N차원으로 원하는대로 선언할 수 있다.