2023-01-10 09:30 ~ 18:30 수업진행
※ 수업내용
1. 형변환 (casting)
형변환은 boolean 타입을 제외한 나머지 모든 자료형들은 서로 형변환이 가능하다.
자동(묵시적)형변환과 강제(명시적)형변환 두가지가 있다.
1) 자동 형변환
먼저 자동 형변환은 프로그램 실행 중에 자동으로 자료형이 변환되는 것을 말한다.
아래 예제를 보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package chapter3;
public class CastingEx {
public static void main(String[] args) {
// 자동형변환 예시
int number = 10;
// int number(변수)선언과 동시에 = 10; 초기화
long number2 = number;
// long number2 (변수)선언과 동시에 = number; 초기화
System.out.println(number2);
/*
* // //int < long // int 자료형 변수에 10을 담았고, int 변수를 long 자료형 변수에 담았기 때문에
* 크기가 작은 자료형(int)은 큰 자료형(long)으로 자동형변환이 일어나므로 에러없이 실행이 가능함.
*/
}
}
|
cs |
크기가 작은 자료형은 큰 자료형으로 자동 형변환이 일어나므로 에러없이 실행이 가능하다.
마치 작은 종이컵에 담긴 물을 큰 양동이에 옮겨 담는것과 같다.
2) 강제 형변환
강제 형변환을 하는 방법은 값을 대입하기 전에 괄호를 사용해서 변환하고자 하는 대상의 자료형 이름을 넣어줘야 한다.
아래 예제를 보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
package chapter3;
public class CastingEx2 {
public static void main(String[] args) {
//강제형변환 예시
double pi = 3.14 ; //double 자료형
// double 자료형 pi변수에 3.14라는 실수값을 담음
int pi2 = (int)pi ; // 강제형변환
/*
* int 자료형 pi2변수에 pi를 담음
* 하지만 자료형을 선언 할 때 double 자료형은 int 자료형보다 크기가 크기 때문에
* int 자료형으로 강제형변환을 해줘야 하며
* 이에따라 강제형변환을 의미하는 코드(int)를 추가해주어야 한다,
*/
System.out.println(pi2); // 값의 손실 발생
/*
* int 자료형은 정수 자료형이고 double 자료형은 실수자료형이기 때문에
* double 자료형에서 int 자료형으로 강제형변환을 실행 할 경우
* 소수점 .14가 모두 없어지고 정수값 3만 출력이 된다.
* 즉 실수자료형에서 정수자료형으로 강제형변환시 정수값만 정확히 보장을 받고 실수값은 모두 유실되는 셈이다.
*/
}
}
|
cs |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package chapter3;
public class CastingEx3 {
public static void main(String[] args) {
// 강제형변환 예시
double score = 100.0 ;
// double 자료형에 score 변수 선언 후 100.0이라는 값을 담음
int score2 = (int)score ; // 강제형변환
// int 자료형에 score2 변수 선언 후 score 값을 담음
// int는 double보다 크기가 작은 자료형이기 때문에 강제형변환을 하고
System.out.println(score2); // 값의 손실 발행하지 않음
// 위 예제를 실행 하였을 때 소수점 손실이 일어나지 않는데 (100 = 100.0)
// 100이라는 값이 int자료형 범위에도 포함되는 값이기 때문이다
// 쉽게말해서 양동이에 물이 종이컵만큼 있다면 양동이의 물을 종이컵에 옮겨닮아도 버리는 물 없이 담기기 때문이다.
}
}
|
cs |
2. 연산
연산의 종류는 8가지가 있다.
우선순위는 산술, 비교, 논리, 대입 이다.
대부분 이항연산을 한다.
소괄호시 우선순위를 무시한다. (코드가 더러워지니 꼭 필요할 때에만 사용하자)
1) 대입연산
아래 예제를 보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package chapter4;
public class OpEx0 {
public static void main(String[] args) {
int a = 10;
// =기호를 기준으로 왼쪽항에는 변수가 오른쪽항에는 변수, 리터럴값, 수식이 올 수 있다.
// ※ 에러와 정상
/* 10 = a;
에러 왼쪽항이 리터럴값 오른쪽에 변수가 있음
*/
/* a + 1 = 10;
에러 왼쪽항에 수식이 있음
*/
/* 10 = 1;
* 에러 변수가 없고 리터럴값에 리터럴값을 대입하려함
*/
/* a = a + 10;
정상 왼쪽항에 a라는 변수, 오른쪽항에 초기값 10이 담겨있으니 10 + 10 = 20이 된다.*/
}
}
|
cs |
"대입은 = 기준으로 오른쪽 값을 왼쪽의 변수에 대입한다" 라는 것을 반드시 기억하자.
아래 예제를 보고 다양한 대입연산자를 알아보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package chapter4;
public class OpEx1 {
public static void main(String[] args) {
int number1 = 10;
System.out.println("number1 = 10 -> "+number1); // 10출력
number1 += 10; // 더하고 대입
System.out.println("number1 = 10 -> "+number1); // 20출력
number1 -= 10; // 빼고 대입
System.out.println("number1 = 10 -> "+number1); // 10출력
number1 *= 2; // 곱하고 대입
System.out.println("number1 = 10 -> "+number1); // 20출력
number1 /= 2; // 나누고 대입
System.out.println("number1 = 10 -> "+number1); // 10출력
number1 %= 3; // 나머지 대입
System.out.println("number1 = 10 -> "+number1); // 1출력
}
}
|
cs |
2) 산술연산
산술연산은 사칙연산에 나머지 연산이 추가된 연산이다.
boolean을 제외한 모든 기본 자료형의 연산이 가능하다.
연산의 결과가 대입되는 변수에 자료형의 범위가 초과되는 경우 에러가 발생하니 주의하자.
아래 예제를 보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package chapter4;
public class OpEx2 {
public static void main(String[] args) {
int a = 5 + 5;
System.out.println("5 + 5 = "+a); // 10출력
int b = a - 5;
System.out.println("10 - 5 = "+b); // 5출력
int c = b * 2;
System.out.println("5 * 2 = "+c); // 10출력
int d = c / 5;
System.out.println("10 / 5 = "+d); // 2출력
// 나머지 연산
int e = 10 % 3; // 10 나누기 3의 결과값은 몫이 3, 나머지 1
System.out.println("10 % 3 = "+e);
}
}
|
cs |
예제 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package chapter4;
public class OpEx2_1 {
public static void main(String[] args) {
// 실수로 출력되도록 하려면 a, b 두 변수 중 하나 이상이 실수인 경우엔 결과값이 실수가 된다.
double a = 10;
int b = 4;
System.out.println("10 / 4 = "+a / b);
// 정수끼리의 연산으로 결과값이 실수가 나오게 하려면 실수 자료형으로 강제 형변환을 하면 된다.
int c = 10;
int d = 4;
System.out.println("10 / 4 = "+ (double)c / d);
}
}
|
cs |
부호연산은 항이 하나인 경우 이 항 앞에 +나 -의 부호를 지정하는 연산자 이다.
조심해야될 부분은 +연산자가 있더라도 무조건 양수로 바뀌는 것이 아니니 조심하자.
아래 예제를 보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package chapter4;
public class OpEx2_2 {
public static void main(String[] args) {
int a = 5;
System.out.println("+a = " + +a);
System.out.println("-a = " + -a);
a = -5;
System.out.println("+a = " + +a);
System.out.println("-a = " + -a);
}
}
|
cs |
3. 증감연산
증감연사는 단어 그대로 증가, 감소시키는 연산이다.
증감연산은 변수에만 사용할 수 있다.
아래 예제를 보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
package chapter4;
public class OpEx3 {
public static void main(String[] args) {
int a = 10;
int b = 10;
++a;
++b;
// 단독으로 사용시 차이가 없음
System.out.println(a);
System.out.println(b);
}
}
|
cs |
단독으로 사용시 차이가 없으므로 다른 연산자와 함께 사용되는 경우의 예제를 보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package chapter4;
public class OpEx4 {
public static void main(String[] args) {
int a = 10;
int b = ++a; // 전위연산
System.out.println("전위연산 결과 : "+b);
int x = 10;
int y = x++; // 후위연산
System.out.println("후위연산 결과 : "+y);
// 대입연산보다 나중에 실행되어 실행결과는 10
System.out.println("x : "+x);
// 변수 y에 10이 대입되고나서 후위연산이 적용되어 실행결과는 11
}
}
|
cs |
4. 비교연산
비교연산은 두 항의 관계를 나타내는 연산자로 크기를 비교하거나 같은지 여부를 비교하는 연산이다.
비교연산은 질문으로 해석해야 한다.
아래 표를 보자
비교연산 기호를 기준으로 왼쪽항과 오른쪽항을 비교한다.
모든 비교연산은 결과값이 true / false 둘 중 하나로만 나오게 된다.
5. 논리연산
아래 예제를 보자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
package chapter4;
public class OpEx6 {
public static void main(String[] args) {
int a = 10;
int b = 5;
// & 연산
System.out.println(a == b & test());
// && 연산
System.out.println(a == b && test());
}
public static boolean test() {
System.out.println("test()메서드 실행됨");
return true ;
}
}
|
cs |
6. 괄호
() : 소괄호 -> 수식의 우선순위를 지정할 때
{} : 중괄호 -> scope(영역) 중괄호를 통해 "블록"을 구분하는데 사용
[] : 대괄호 -> 배열
괄호를 끝으로 23-01-10 수업내용 정리를 마치겠다.
'JAVA' 카테고리의 다른 글
23-01-16 수업내용 정리 (0) | 2023.01.16 |
---|---|
23-01-12 수업내용 정리 (0) | 2023.01.15 |
23-01-13 수업내용 정리 (0) | 2023.01.15 |
23-01-11 수업내용 정리 (0) | 2023.01.13 |
23-01-09 수업내용 정리 (0) | 2023.01.12 |