
자바 프로젝트 생성 → 패키지 생성 → 클래스 생성(.java) → 컴파일 및 바이트 코드 생성(.class) → Run
큰따옴표"" 안에 표기해야 함
System.out.println("화면 출력"); // 화면출력
System.out.println("화면" + "출력"); // 화면출력
System.out.println("화면" + 3); // 화면3
// 1줄 이상 주석 처리는 ctrl+/, 두줄 이상은 ctrl+shift+/
int a=3;
String b="화면";
System.out.println(a); // 3
System.out.println(b); // 화면
System.out.println(b + "출력"); // 화면출력
한줄로 출력은 print, 줄바꿈은 println 혹은 print("\n");
printf()- 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력하는 기능
정수형 변수에 저장된 값을 10진 정수로 출력할 때는 지시자 %d사용,
변수의 값을 지정된 형식으로 변환해서 지시자 대신 넣는다.
System.out.printf("age:%d", age);
System.out.printf("age:%d", 14);
System.out.printf("age:14"); // "age:14"가 화면에 출력됨
printf()는 줄바꿈을 하지 않기 때문에 줄바꿈을 하고 싶다면 %n을 넣어야 함.
변수의 선언 이유: 값을 저장할 공간을 마련하기 위해서
변수의 선언 방법
변수타입 변수이름;
int age;
변수의 초기화 - 변수에 처음으로 값을 저장하는 것
변수의 값 읽어오기
프로그램 실행 중에 값 변경 가능
사용되기 이전에 선언되어야 한다.
프로그램에서 사용되는 자료를 저장하기 위한 공간
int age; // 정수(int)타입의 변수 age를 선언
age = 25; // 변수 age에 25를 저장
int age = 25; // 위의 두 줄을 한 줄로
int x = 0; // 변수 x를 선언 후, 0으로 초기화
int y = 5; // 변수 y를 선언 후, 5로 초기화
int x = 0, y = 5; // 위의 두 줄을 한 줄로
Java의 변수는 하나의 값만 저장할 수 있다.
변수, 상수, 메서드의 이름을 지을 때 반드시 지켜야 하는 공통사항
1. 특수문자는 밑줄(_)과 달러($) 표기만 사용할 수 있다.
2. 아라비아 숫자를 사용할 수 있지만 첫 번째 글자로는 사용할 수 없다.
3. 자바에서 사용하는 예약어는 사용 못 한다.
변수명을 지을 때 권장 사항
1. 영문 소문자로 시작한다.
2. 영문 단어 2개 이상 결합할 때는 새로운 단어의 첫 글자를 대문자로 한다.
상수명을 지을 때 권장사항
1. 상수는 변수와 구분하기 위해 모두 대문자로 표기한다.
상수
한 번만 값을 저장 가능한 변수. 변하지 않는 값(cf 변수: 변하는 값)
상수를 선언: final 키워드 사용
final로 선언된 상수는 다른 값을 대입할 수 없음.
final double PI = 3.14;
final int MAX_NUM = 100; // MAX는 상수
리터럴(literal)
그 자체로 값을 의미하는 것
int i = 100; // 10진수
int oct = 0100; // 8진수
int hex = 0x100; // 16진수
boolean(1byte)char(2byte)int가 사용된다. byte(1byte) < short(2byte) < int(4byte) < long(8byte)double이 사용된다. float(4byte) < double(8byte)long 변수명 = 값+L;
long 변수명 = 값+l;
float 변수명 = 값+F;
float 변수명= 값+f;
실수형에서는 double이 기본형이라 접미사 D or d는 생략이 가능하지만, float타입의 접미사 F or f는 생략 불가능하다.
자료형의 크기는 byte<short/char<int<long<float<double의 순서로 커진다.
char 문자 자료형
인코딩 - 각 문자에 따른 특정한 숫자 값(코드 값)을 부여
디코딩 - 숫자 값을 원래의 문자로 변환
항: 연산에 사용되는 값
연산자: 항을 이용하여 연산하는 기호
모든 연산자는 연산결과를 반환한다.
연산자의 우선순위와 결합법칙은 "세가지만 기억하자"
+: 두 항을 더한다.
-: 앞에 있는 항에서 뒤에 있는 항을 뺀다.
*: 두 항을 곱한다.
/: 앞에 있는 항에서 뒤에 있는 항을 나누어 몫을 구한다.
%: 앞에 있는 항에서 뒤에 있는 항을 나누어 나머지를 구한다.
대입 연산자 변수에 값을 대입하는 연산자. 왼쪽 변수에 오른쪽 변수를 대입
증가 연산자 (++) 피연산자의 값을 1 증가
감소 연산자 (--) 피연산자의 값을 1 감소
전위형 ++i; 왼쪽, 값이 참조되기 전에 증가
j = ++i; // 전위형
++i; // 증가 후에
j = 1; // 참조하여 대입
후위형 i++; 오른쪽, 값이 참조된 후에 증가
j = i++; // 후위형
j = i; // 참조하여 대입 후에
i++; // 증가
독립적으로 쓰였을 때는 전위형과 후위형의 차이가 없다.
-는 피연산자의 부호를 반대로 변경한다.
(타입)피연산자
double d = 85.4;
int score = (int)d;
int score = (int)85.4;
int score = 85;
float f = 1234; // int 타입의 값을 float타입의 변수에 저장
float f = (float)1234;
형변환을 하는 이유는 주로 서로 다른 두 타입을 일치시키기 위해서인데, 형변환을 생략하면 컴파일러가 알아서 자동적으로 형변환을 한다.
등가 비교 연산자(==) : 두 값이 동일한지의 여부를 확인한 후 동일 여부를 참(true) 또는 거짓(false)으로 반환하는 연산자
문자열 비교에는 == 대신 equals()를 사용해야 한다.
String str1 = "abc";
String str2 = "abc";
System.out.println(str1.equals(str2)); // true
대입 연산자(=) : 오른쪽의 값을 왼쪽에 대입하는 연산자, 대입 연산자의 축약 표현
a = a + b = a += b
a = a * b = a *= b
a = a & b = a &= b
✏️ 등가 비교(==)와 대입 연산자(=)를 혼동하지 말자
연산 전에 피연산자의 타입을 일치시키는 것
long + int -> long + long -> long
float + int -> float + float -> float
double + float -> double + double -> double
byte + short -> int + int -> int
char + short -> int + int -> int
반올림 - Math.round()
실수를 소수점 첫째자리에서 반올림한 정수를 반환
long result = Math.round(4.52); // result에 5가 저장된다.
나머지 연산자 %
오른쪽 피연산자로 나누고 남은 나머지를 반환
나누는 피연산자는 0이 아닌 정수만 허용(부호는 무시됨)
System.out.println(10 % 8); // 10을 8로 나눈 나머지 2가 출력된다.
비교연산자
>, <, >=, <=, ==, !=
두 피연산자를 비교해서 true(참) 또는 false(거짓)을 반환
논리 연산자
조건식을 연결할 때 사용하는 연산자
&&(AND) : 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.
||(OR) : 피연산자 중 어느 한 쪽이 true이면 true를 결과로 얻는다.
^(XOR) : 두 값이 다를 때는 true, 같을 때는 false를 결과로 얻는다.
!(NOT) : true를 false로, false는 true로 바꾼다.
boolean b = true;
!!b -> !!true -> !false -> true
// (참 또는 거짓) ? 참일 때 연산 결과 : 거짓일 때 연산 결과
int a = (true) 1 : 2;
System.out.println(a); // 1
int b = (a % 2 == 0) ? 10 : 20;
System.out.println(b); // 20
if, switchfor,whileif(score>60)
System.out.println("합격입니다.");
System.out.println("축하드립니다.");
if(조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적는다.
} else {
// 조건식이 거짓(false)일 때 수행될 문장들을 적는다.
}
if (조건식1) {
// 조건식1의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if ( 조건식2) {
// 조건식2의 연산결과가 참일 때 수행될 문장들을 적는다.
} else if (조건식3) {
// 조건식3의 연산결과가 참일 때 수행될 문장들을 적는다.
} else { // 생략 가능
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들을 적는다.
}
switch (조건식) { // 조건식에는 정수, 문자열이 올 수 있다.
case 값1:
// 조건식의 결과가 값1과 같을 경우 수행될 문장들
// ...
break;
case 값2:
// 조건식의 결과가 값2와 같을 경우 수행될 문장들
// ...
break;
//...
default:
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
// ...
}
Math.random() - 0.0과 1.0 사이의 임의의 double값을 반환for(초기화식; 조건식; 증감식) {
수행문;
}
num이 1에서부터 5일 때까지 하나씩 증가하면서 출력하는 for문
int num;
for(num = 1; num <= 5; num++)
{
System.out.println(num);
}
초기식;
while (조건식) { // 조건식 생략불가
실행구문; // 조건식이 true인 동안 실행
증감식;
}
초기식;
do {
실행구문;// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.(처음 한 번은 무조건 실행)
증감식;
} while (조건식); // 문법 구조상 중괄호가 없으므로 세미콜론(;)으로 끝남.
break문: 반복문에서 break문을 만나면 더 이상 반복을 수행하지 않고 반복문을 빠져나옴.
중첩된 반복문 내부에 있는 경우 가장 가까운 반복문 하나만 빠져나옴.
continue문: 반복문과 함께 쓰이며, 반복문 내부 continue문을 만나면 이후 반복되는 부분을 수행하지 않고 조건식이나 증감식을 수행함.
break문과 달리 반복문을 벗어나지 않는다.
for(num = 1; num <= 100; num++) { // 100까지 반복
if(num % 2 == 0) // num값이 짝수인 경우
continue; // 이후 수행을 생략하고 num++ 수행
total += num; // num값이 홀수인 경우에만 수행
}
<!DOCTYPE html> // 현재 문서가 HTML5 언어로 작성한 웹 문서라는 뜻
<html>~</html> // 웹 문서의 시작과 끝을 나타내는 태그
<head>~</head> // 웹 브라우저가 웹 문서를 해석하는 데 필요한 정보를 입력하는 부분
<body>~</body> // 실제로 웹 브라우저에 나타나는 내용
동일한 자료형을 묶어 저장하는 참조 자료형.
생성할 때 크기를 지정해야 하고, 한 번 크기를 지정하면 절대 변경할 수 없는 특징이 있다.
int[] a = new int[3]; // int[] - 배열 자료형 a = 참조변수 new = Heap 메모리에 넣어라 int[3] = int 자료형 3개를 저장할 수 있는 공간
=>int 자료형 3개를 저장할 수 있는 공간을 Heap 메모리에 넣어두고 어디에 넣었는지를 참조변수 a에 넣어라
자료형[] 배열이름 = new 자료형[개수];
int[] arr = new int[10];
자료형 배열이름[] = new 자료형[개수];
int arr[] = new int[10];
배열은 선언과 동시에 초기화까지 할 수 있음
배열을 초기화 할 때는 배열의 개수를 명시하지 않음
int[ ] studentsIDs = new int[ ] {101, 102, 103} // 개수 생략
int [ ] studentIDs = new int[3] {101, 102, 103} // 오류 발생
아무런 초기화 값이 없이 선언만 한 경우, 정수는 0, 실수는 0.0 객체 배열은 null로 초기화됨.
배열 사용하기
[]: 인덱스 또는 첨자 연산자로 표시
int[] a; // int 자료형만 저장 가능
double[] a; // double 자료형만 저장 가능
String[] a; // String 자료형만 저장 가능
new 자료형[배열의 길이]
new int[3]; // 정수 자료형 3개를 포함할 수 있는 배열 객체 생성
new double[5]; // 실수 자료형 5개를 포함할 수 있는 배열 객체 생성
new String[10]; // 문자열 자료형 10개를 포함할 수 있는 배열 객체 생성
new int[]; // 객체의 크기를 지정하지 않아 오류 발생
자료형[] 변수명 = new 자료형[배열의 길이];
int[] a = new int[3];
자료형[] 변수명;
변수명=new 자료형[배열의 길이];
int[] a;
a = new int[3];
int[] arr=new int[5]; // 길이가 5인 int배열
int tmp=arr.length; // arr.length의 값은 5이고 tmp에 5가 저장된다.
int sum=0; // 총합을 저장하기 위한 변수
float average=-0f; // 평균을 저장하기 위한 변수
average=sum
(float)score.length; // 계산 결과를 float로 얻기 위해서 형변환
int max=score[0]; // 배열의 첫번째 값으로 최대값을 초기화 한다.
int min=score[0]; // 배열의 첫번째 값으로 최소값을 초기화 한다.
int[][] score = new int[4][3]; // 4행 3열의 2차원 배열을 생성한다.
score[0][0] = 100; // 배열 score의 1행 1열에 100을 저장.
System.out.println(score[0][0]); // 배열 score의 1행 1열의 값을 출력.
int[][] a = {{1, 2}, {3, 4, 5}};
for(int i = 0; < a.length; i ++) {
for(int j = 0; < a[i].length; j++) {
System.out.println(a[i][j]);
}
}
int[][] arr = new int[][]{ {1, 2, 3}, {4, 5, 6} };
int[][] arr = new { {1, 2, 3}, {4 , 5, 6} }; // new int[][]가 생략됨.
int[][] arr = { { 1, 2, 3 },
{ 4, 5 ,6 }
};
String str = new String("안녕");
String[] name = new String[3]; // 3개의 문자열을 담을 수 있는 배열을 생성한다.
name[0] = "Kim";
name[1] = "Park";
name[2] = "Yi";
String a = "a";
String b = "b";
a = a + b;
int[] arr = {0, 1, 2, 3, 4};
int[][] arr2D = {{11, 12}, {21, 22}};
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]
System.out.println(Arrays.deepToString(arr2D)); // [[11, 12], [21, 22]]
String[][] str2D = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
String[][] str2D2 = new String[][]{{"aaa", "bbb"}, {"AAA", "BBB"}};
System.out.println(Arrays.equals(str2D, str2D2)); // false
System.out.println(Arrays.deepEquals(str2D, str2D2)); // true
배열의 복사 - copyOf(), copyOfRange()
배열의 정렬 - sort()
int[] arr = {3, 2, 0 ,1 ,4};
Arrays.sort(arr); // 배열 arr을 정렬한다.
System.out.println(Arrays.toString(arr)); // [0, 1, 2, 3, 4]