-
3-1. 자바의 기초(ch2~5)카테고리 없음 2022. 10. 2. 19:38
Chapter 2
#2-1~2
->글자 출력하기
System.out.println("Hello");
: print 만써도 가능. 단, 뒤에 ln을 붙이는 이유는 줄바꿈을 위함.
팁:ctrl+alt+down =행단위 복사
팁:alt+shift+a = 컬럼 편집 모드
#2-3
->변수(variable) : CS에선 하나의 값을 저장할 수 있는 메모리 공간을 뜻함.
->변수의 선언 이유 : 값(data)을 저장할 공간 마련을 위해
->변수 선언 방법 : '변수타입' '변수이름' ;
->변수에 값 저장하기 : 변수 선언 이후, '변수이름' = '값' ;
(선언과 값 저장을 동시에 하기 : '변수타입' '변수이름' = '값';
->변수의 초기화 : 변수에 처음으로 값을 저장하는 것
#2-4
->변수의 타입은 저장할 값의 타입에 의해 결정된다.(저장할 값의 타입과 변수 타입이 일치해야 한다)
->값의 타입 종류들
-기본형들-
(1)char : '문자'를 저장
(2)byte
(3)short
(4)int
(5)long
(6)float
(7)double
(8)boolean
--
#2-5
변수 : 하나의 값을 저장하기 위한 공간.
상수 : 한 번만 값을 저장 가능한 변수.(앞에 'final' 적을시 ex)final in MAX = 100; )
리터럴 : 그 자체로 값을 의미하는 것 (상수와 비슷)
#2-6
리터럴의 종류
=>
논리형 : true , false
정수형 : 123, 0b0101, 100L (접미사 L 이 붙으면 long 타입, 그 외는 int 타입)
실수형 : 3.14 , 3.0e8 , 1.4f (접미사 f가 붙으면 float형, d가 붙으면 double 형)
문자형 : 'A' (''사이에 있으면 문자형)
문자열 : "ABC" (""사이에 있으면 문자열)
-정수형,실수형에서 붙는 접미사는 대소문자 구별이 없다.
값의 최대값, 최소값 등에 따라 접미사를 생략이 가능,불가능이 나뉜다.
ex)int 값의 경우, 20억 미만은 int도, long타입도 가능하기에 뒤에 접미사를 생략해도 되지만,
100억 등의 값일 경우, int의 최대값을 넘어서버리기 때문에, long타입이어야 해서 뒤에 L 을 붙여줘야 함!
범위의 경우 변수 > 리터럴 인 경우는 OK,
변수 < 리터럴의 경우는 에러. (밥이 그릇보다 크면 안된다!)
#2-7,8
문자는 char, 문자열은 String.
char ch = 'A' ; String s = "ABC" ;
여기서, String s = ""; // 빈 문자열 이어도 괜찮! (이 빈 문자열은, 숫자 데이터를 문자열로 바꾸는데 이용됨.)
하지만 char ch = ''; // 에러뜸!
#2-9
두 변수의 값을 교환하기 위해선,
ex) int x =10, y = 20; 일때, 다른 변수 tmp로 옮기고, 서로 위치를 교환해주기!
(컵에 담긴 물을 옮기는 방법을 생각)
#2-10
변수의 타입은 '기본형'과 '참조형' 으로 나뉨.
'기본형'은 위에 적은 8가지 값의 타입.
참조형 : 기본형을 제외한 나머지 (String, System 등)
메모리 주소를 저장.(4byte or 8byte)
ex) Data today; // 참조형 변수 today를 선언
위 'Data'가 참조형
#2-11
기본형의 표현 범위의 경우, 표를 참고(글로쓰면 더 난해함)
#2-12,13
println은 출력형식이 지정 불가 (실수, 10진수 외의 진법 등 지정불가)
->printf()로 출력형식 지정 가능
System.out.printf("%.2f", 10.0/3) ; // 3.33 이 나옴
이때, "%.2f" 부분은 '지시자' 라고 하며, %.2f 의 뜻은 '소수점 둘째자리 까지' 라는 뜻.
지시자는 %b(불리언 형식 출력), %d(10진 정수의 형식으로 출력), %c(문자로 출력)
등 다양한 지시자가 있으며, java API -> Formatter 에서 더 많은 지시자 확인.
#2-14
Scanner란?
-화면으로부터 데이터를 입력받는 기능을 제공하는 클래스
-사용하려면 import 문으로 추가해주어야 한다.
ex)
import java.util. **** ; Scanner scanner = new Scanner (System.in);
#2-15,16
오버플로우의 개념 : 계수기 를 생각!
=>네자리 계수기의 경우, 9999 이후 다시 0001 로 넘어갈때, 발생하는 일을 '오버플로우'라고 한다!
즉, 오버플로우 : 표현가능한 범위를 넘어서는 것
*최대값 +1 -> 최소값
*최소값 - 1 -> 최대값
#2-17
타입간의 변환 방법
1.문자와 숫자간의 변환 : 3 (숫자)+ '0'(문자) = '3'(문자)
2.문자열로의 변환 : 3(숫자) + "" (빈 문자열) = "3"(문자열)
3.문자열을 숫자로 변환 : "3" -> 3 intger.parseInt("3")
Chapter 3
#3-1,2
연산자 : 연산을 수행하는 기호 : +,-,*,/ 등
피연산자 : 연산자의 연산 수행 대상
x + 3
(피연산자) (연산자) (피연산자)
연산자 종류는
1. 산술 연산자 : 사칙 연산과 나머지 연산(%)
2. 비교 연산자 : 크고 작음과 같고 다름을 비교
3. 논리 연산자 : '그리고(AND)' 와 '또는(OR)'으로 조건을 연결
4. 대입 연산자 : 우변의 값을 좌변에 저장
5. 기타 : 형변환 연산자, 삼항 연산자, instanceof연산자
#3-3,4
연산자의 우선순위 : 하나의 식에 연산자가 둘 이상 있을떄, 어떤 연산을 먼저 수행할 지
자동 결정 하는 것 (ex.*가 +보다 먼저 연산되는 것)
연산자 우선순위는 표를 참고.
대충 상식적으로 생각!
연산자의 결합규칙 : 우선순위가 같은 연산자가 있을때,
=>"대입과 단항 연산자를 제외하면, 모두 왼쪽->오른쪽"
요약)
1.산술>비교>논리>대입. 대입은 제일 마지막에 수행
2.단항(1) > 이항(2) > 삼항(3). 단항 연산자의 우선순위가 이항 연산자보다 높음
3.단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽에서 오른쪽이다.
#3-5,6
증감 연산자.
증가 연산자 (++) 피연산자의 값을 1 증가시킴
감소 연산자 (--) 피연산자의 값을 1 감소시킴
*전위형과 후위형으로 나뉨.
전위형 : j = ++i;
후위형 : j = i++;
"증감 연산자가 독립적으로 사용된 경우, 전위형과 후위형의 차이가 없다."
#3-7,8
형변환 : 변수또는 상수의 타입을 다른 타입으로 변환하는 것.
(타입)피연산자
ex) int -> char 의 경우, 수식은 (char)65 = 'A'로 변환.
그 외는 표 참고
#3-9,10
산술 변환 : 연산전에 피연산자의 타입을 일치시키는 것
(중요한 두가지 규칙이 있음!)
1.두 피연산자의 타입을 같게 일치시킨다.(보다 '큰' 타입으로 일치)
ex) long + int -> long + long -> long (long이 더 '큰 타입'이기 때문)
2.피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.
#3-11,12
반올림 - Math.round() : 실수를 소수점 첫 째자리에서 반올림한 정수를 반환
ex)
long result = Math.round(4.52); // result에 5가 저장된다.
나머지 연산자 % : 오른쪽 피연산자로 나누고 남은 나머지를 반환
ex)
System.out.println(10 % 8) ; // 2 출력.
(10/8 하면 1이 몫, 2가 나머지인데, 2를 반환 한다.)
#3-13,14
비교 연산자 (<, >, >=, <=),(==, !=)
단, 문자열 비교에는 == 대신, equals()를 사용해야 한다.
#3-15,16
논리 연산자 (&& ll) : 조건식을 연결할 때 사용하는 연산자
ll (OR결합) : 피연산자 중 어느 한쪽이 true이면 true를 결과로 얻는다.
&&(AND결합) : 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.
ex1)x는 10보다 크고, 20보다 작다
10 < x && x < 20
(단, 10<x<20 이런식으로 적으면 안됨. 무조건 논리 연산자를 넣어줄 것!)
ex2)i는 2의 배수 또는 3의 배수이다.
1%2==0 ll i%3==0
ex3)i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다.
(i%2==0 ll i%3==0) && i%6 != 0
논리 부정 연산자 ! : true를 false로, false는 true로 바꾼다.
x = true , !x = false, y= false , !y = true
#3-17~19
조건 연산자 ? : 조건식의 결과에 따라 연산결과를 달리한다.
ex) result = (x > y) ? x : y ;
-> 괄호안의 결과가 true면 x, false면 y.(if문과 비슷)
대입 연산자 : 오른쪽 피연산자를 왼쪽 피연산자에 저장 후 저장된 값을 변환
lvalue - 대입 연산자의 왼쪽 피연산자(변수,배열 등의 '저장공간'이어야 한다!)
rvalue - 대입 연산자의 오른쪽 피연산자
복합 대입 연산자 : 대입 연산자와 다른 연산자를 하나로 축약
ex) i +=3; 은 i = i + 3; 이다.
ex2) i *= (10 + j); 는 i = i*(10 + j);
Chapter 4
#4-1~4
조건문과 반복문
조건문 : 조건을 만족할때만 {}를 수행(0~1번) (if, switch)
ex)
if (score > 60){ System.out.println("합격입니다"); }
반복문 : 조건을 만족하는 동안 {}를 수행 (0~n번) (for,while)
ex)
int i = 10; while (i-- > 0){ System.out.println(i); }
if문 : 조건식이 참(true)일때, 괄호{} 안의 문장들을 수행한다.
if-else문 : 둘중의 하나 - 조건식이 참일 때와 거짓일 때로 나눠서 처리
#4-5~8
if - else if문 : 여러 개 중의 하나 - 여러 개의 조건식을 포함한 조건식
#4-9~11
switch문 : 처리해야 하는 경우의 수가 많을 때 유용한 조건문 (보통은 if문을 씀)
(switch문의 경우, 각 case 끝에 break로 끊어줘야 한다.)
switch문의 제약조건
1) switch문의 조건식 결과는 정수 또는 문자열이어야 한다
2) case문의 값은 정수 상수(문자 포함), 문자열만 가능하며, 중복되지 않아야 한다.
#4-12
임의의 정수(난수) 만들기
Math.random() - 0.0과 1.0 사이의 임의의 double 값을 반환
(위 값에, %.3f 이후, *10 하면 1~9의 수를 얻는 등으로 활용 가능)
#4-13,14
for 문 : 조건을 만족하는 동안 블럭 {}을 반복 (for문은 반복횟수를 알 때 적합, 모를땐 while문이 적합)
ex)
for(int 1=1; i<=5; i++) { System.out.println("I can do it."); }
-> for( 초기화; 조건식; 증감식)
(조건식 설정을 잘 못 할경우, 값이 무한으로 계속 생김.)
#4-15
중첩 for문 : for문 내에 또 다른 for문을 포함시킬 수 있다
ex)
for (int i=2; i<=9; i++) { for(int j=1; j<=9; j++) { System.out.println(i + "*" + j + "=" + (i*j)); } }
#4-16~19
while문 : 조건을 만족시키는 동안 블럭{}을 반복 - 반복횟수 모를 때
while (조건식) {
// 조건식의 연산결과가 참(true)인 동안, 반복될 문장들을 적는다.
}
ex)
int i = 1; while(i<=10) { //조건식 System.out.println(i); i++; // 증감식 }
위의 식은 그대로 줄여서 for문으로도 바꿀 수가 있다.
->
for(int i=1; i<=10; i++) { System.out.println(i); }
#4-20~24
break문 : 자신이 포함된 하나의 반복문을 벗어난다 (switch문 에서 사용)
continue문 : 자신이 포함된 반복문의 끝으로 이동 - 다음 반복으로 넘어감
전체반복 중에서 특정 조건시 반복을 건너뛸 때 유용
이름붙은 반복문 : 반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다
=>반복문앞에 이름 명명,
break '이름';
Chapter 5
#5-1~3
배열 : 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
ex) int[] score = new int[5]; // 인덱스 0~4까지의 5개 변수가 생김.
배열 선언 - 배열을 다루기 위한 참조변수의 선언
1. 타입[] 변수이름;
2. 타입 변수이름[];
ex) int[] score;
int score[];
=> int[] score; //int타입의 배열을 다루기 위한 참조변수 score선언
score = new int[5]; //int 타입의 값 5개를 저장할 수 있는 배열 생성
*인덱스 : 배열의 각 요소에 자동으로 붙는 일련변호.(0부터 시작)
#5-4,5
배열의 길이 : 배열이름.length 를 통해 알아낼 수 있음(배열의 길이를)(int형 상수로)
'배열은 한번 생성하면 실행하는 동안 그 길이를 바꿀 수 없다.'
-부족할땐 더 넓은 새 배열을 만들고, 이전 배열의 값을 복사해서 옮김.
배열의 초기화 : 배열의 각 요소에 처음으로 값을 저장하는 것
(자동 초기화 : int 0 값으로 기본적으로 초기화가 됨)
ex) int[] score = new int[] { 50, 60, 70, 80, 90} ; //인데, new int[]를 생략할 수 있기에,
int[] score = {50,60,70,80,90}; 으로 주로 씀 (99%)
단, 이걸 두줄로는 나눠 쓸 수 없음 (두줄로 나눠쓸거면 생략한 new int[] 넣어야 됨)
#5-6,7
배열의 출력
int[] iArr = {100, 95, 80, 70, 60}; 일때, 이 배열을 불러오고 싶어서
System.out.println(iArr); //이렇게 쓰면, [i@14318bb]와 같은 형식의 문자열이 출력됨.
즉, 제대로 안나옴! (단, char배열은 제대로 출력이 됨. 그 외는 제대로 안나옴)
->
for(int i=0; i<iArr.length; i++) { System.out.println(iArr[i]); }
이렇게 쓰면 배열의 요소를 하나씩 출력
위 보다 더 간편하게 쓰려면,
System.out.println(Arrays.toString(iArr));
을 사용하면 된다(Arrays 클래스를 이용)(Arrays 클래스에 있는 toString 메서드를 이용)
toString은 문자열로 바꾸는 기능, 즉
배열 [100,95,80,70,60] 을, "[100,95,80,70,60]" 라는 문자열로 만들어서 출력
#5-12,13
String 배열 : 문자열을 담을 수 있는 배열
단, String은 참조형 변수라, 기본값이 0 이 아닌 null 이 들어감
ex) String[] name = { "Kim", "park", "Moon"};
#5-14,15
String 클래스
1.String 클래스는 char[]와 메서드(기능)를 결합한 것
-> String클래스 = char[] + 메서드(기능)
2.String 클래스는 내용을 변경할 수 없다.(읽기만 가능)
#5-18~20
2차원 배열 : 테이블 형태의 데이터를 저장하기 위한 배열(행렬 형식)
ex) int[][] score = new int[4][3]; // 4행 3열의 2차원 배열을 생성한다
이 때, 인덱스는
score[행][열] 로 매겨져서, score[0][0] ~ score[3][2] 까지 총 12개의 인덱스가 생성,
score[0][0] = 100;
System.out.println(score[0][0]); // 100이 출력
2차원 배열의 초기화는
int[][] arr ={ {1,2,3}, {4,5,6} }; //new int[][]가 생략됨
이렇게 해도 되고,
int[][] arr = { {1, 2, 3}
{4, 5, 6}
};
이렇게 해도 됨.