상수와 형변환(Casting)
상수
상수의 개념
final int SIZE = 100;
SIZE = 200;
Plain Text
복사
•
값을 한번만 저장할 수 있는 공간
•
변경 불가
•
키워드 final
예제) 반지름이 5인 원의 넓이를 구하시오
public class Ex {
static final double SIZE = 3.14;
public static void main(String[] args) {
double area = Math.pow(5, 2) * SIZE;
System.out.println(area);
}
}
Plain Text
복사
리터럴의 개념
int num = 10;
Plain Text
복사
•
변하지 않는 데이터
•
우리가 기존에 알고 있던 상수
◦
프로그래밍에서의 상수 의 정의가 값을 한 번 저장하면 변경할 수 없는 저장공간 이기에 리터럴이란 용어를 도입
•
num 은 변수명, 10 은 리터럴
형변환
형변환(Casting) 이란?
•
변수 또는 상수의 타입을 다른 타입으로 변환하는 것
형변환이 왜 필요한데?
•
컴퓨터는 이진수만 처리한다
•
두 피연산자의 자료형이 일치해야 동일한 방법을 적용해 연산 가능
형변환 방법
•
타입)피연산자
•
괄호()는 캐스트 연산자 or 형변환 연산자라고 하며, 형변환을 캐스팅(Casting) 이라고도 한다.
double d = 86.4;
int score = (int) d;
System.out.println("score=" + score);
System.out.println("d=" + d);
//결과
//score=85
//d=85.4
Plain Text
복사
•
출력된 d를 보면 형변환 후에도 피연산자에는 아무런 변화가 없다.
자동 형변환
•
자동 형변환은 컴파일러가 알아서 해준다.
•
<span style='background-color:green'>기존의 값을 최대한 보존할 수 있는 타입으로 자동 형변환된다.</span>
명시적 형변환
double pi = 3.1415;
int wholeNumber = (int)pi;
Plain Text
복사
•
명시적 형변환을 사용하면 컴파일러가 개발자가 의도적으로 한 것이라 판단하고 에러를 내지 않는다.
산술 변환
1.
두 피연산자의 타입을 같게 일치시킨다. (보다 큰 타입으로 일치) <span style='background-color:green'>값 손실 최소화가 목표</span>
•
long + int
long + long
long
•
float + int
float + float
float
•
double + float
double + double
double
2.
피연산자의 타입이 int보다 작은 타입이면 int로 변환된다. <span style='background-color:green'>오버플로우 방지</span> (JVM이 32bit이기 때문에)
•
byte + short
int + int
int
•
char + short
int + int
int
정수형
실수형으로 형변환을 할 때는 정밀도가 더 높은 double 로 변환해주자.
연산자
연산자의 이해
연산자
•
3.14*radius*radius 에서 연산자는
연산자 우선순위에서 중요한 점
•
() 괄호는 최우선 연산자 - 실무에서 많이 쓰임
•
결합 방향은 같은 우선 순위일 때 먼저 계산 하는 것
문자열 연산자
String str = "JDK" + 3 + 3.0;
// 출력 결과 : JDK33.0
Plain Text
복사
•
문자열과 숫자가 있으면, 문자열로 결합
삼항 연산자
•
3개의 피연산자를 필요로 한다.
ex) 세수 중에서 가장 큰 값은?
int a = 10, b = 20, c = 30;
int result = ((a>b) ? a : b) > c) ? ((a>b) ? a : b) : c
Plain Text
복사
반복문
while 문
•
while문은 한 번도 실행되지 않을 수 있다!
while(조건식) {
// 조건식의 연산결과가 참(true)인 동안 반복될 문장들을 작성.
}
Plain Text
복사
Do while 문
do {
// 조건식의 연산결과가 참일 때 수행될 문장들을 적는다. (처음 한 번은 무조건 실행)
} while(조건식);
Plain Text
복사
for 문
for(초기화 ; 조건식 ; 증감식) {
System.out.println(num + " * " + i + " = " + num * i);
}
Plain Text
복사
continue & break
break
특정 조건을 만족하면 반복문을 벗어나도록 한다.
문제 1) 5와 7의 배수중에 첫번째 숫자는 ?
int num = 1;
boolean flag = false;
while(true) {
if(num % 5 == 0 && num % 7 == 0) {
flag = true;
break;
}else num++;
}
if(flag) System.out.println(num);
else System.out.println("5의 배수이자 7인 배수를 찾지 못했습니다.");
Plain Text
복사
continue
반복문 내에서만 사용될 수 있으며 반복이 진행되는 도중에 continue문을 만나면 반복문의 끝으로 이동하여 다음 반복으로 넘어간다.
StringBuilder sb = new StringBuilder();
int count = 0;
for(int i = 1; i <= 100; i++) {
if(i % 5 != 0 || i % 7 != 0) continue;
count++;
sb.append(i).append('\\n');
}
sb.append("count : ").append(count);
System.out.println(sb);
Plain Text
복사
i % 5 != 0 || i % 7 != 0 vs. num % 5 == 0 && num % 7 == 0
Plain Text
복사
배열
배열
배열이란?
•
같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
배열의 선언과 생성
int[] score; // 배열을 선언
score = new int[5]; // 배열을 생성
Plain Text
복사
배열의 길이
•
배열은 한번 생성하면 길이를 변경할 수 없기 때문에 배열이름.lenght 는 상수이다.
예제 문제
1.
1000개의 배열을 만들고 순서대로 1~1000 값을 넣은 후에 해당 배열에 있는 전체 합을 구하시오.
public static void main(String[] args) {
int[] arr = new int[1000];
for (int i = 0; i < 1000; i++) {
arr[i] = i+1;
}
int result = Arrays.stream(arr).sum();
System.out.println("result = " + result);
}
Plain Text
복사
1.
배열의 크기는 10이고 해당 배열에 랜덤으로 정수를 넣은 뒤에 최댓값을 구하시오.
public static void main(String[] args) {
int[] arr = new int[10];
int max = 0;
for (int i = 0; i < 10; i++) {
arr[i] = (int)(Math.random() * 100) + 1;
max = Math.max(max, arr[i]);
}
System.out.println("max = " + max);
}
Plain Text
복사
1.
배열의 크기는 6이고 1 ~ 45 숫자를 랜덤으로 넣고 출력하시오. (단, 중복되면 안 된다.)
public static void main(String[] args) {
int[] arr = new int[6];
for (int i = 0; i < 6; i++) {
arr[i] = (int)(Math.random() * 45) + 1;
for (int j = 0; j < i; j++) {
if (arr[i] == arr[j]) {
i--;
break;
}
}
}
for (int n : arr) {
System.out.println(n);
}
}
Plain Text
복사