//////
Search
📓

09/21 상수, 형변환, 연산자, 반복문, 배열

생성일
2022/09/21 08:38
태그

상수란?

변수에 값을 딱 한번 할당
변경 불가능
키워드 선언시 final이 붙는다.
class Constants{ final int MIN_VALUE = 0; final int MAX_VALUE = 1e10; final char MAX_GRADE = 'A'; }
Java
복사

리터럴(literal)

변수에 넣는 변하지 않는 데이터
class Literal{ int a = 10; int b = 10; }
Java
복사
위 코드에서 10이 변하지 않는 고정값 즉, 리터럴이다.
여기서 a와 b는 메모리 낭비를 방지하기 위해, Heap 영역의 메모리 영역에 있는 같은 10의 메모리 주소를 가리킨다.
String 또한 String constant pool이라는 영역에서 똑같이 관리한다.
//메모리 영역 예시 public class Main { public static void main(String[] args) { String a = "str"; String b = "str"; System.out.println(System.identityHashCode(str)); //result:2008362258 System.out.println(System.identityHashCode(str2)); //result:2008362258 } }
Java
복사

형 변환 이란?

서로 다른 데이터 타입간의 연산을 수행할 때, 타입을 일치시키기 위해 변수나 리터럴의 타입을 다른 타입으로 변환하는 것
int num1 = 50; int num2 = 500; System.out.println(num1+num2);
Java
복사

자동 형변환

묵시적 형 변환이라고도 하며 자료형의 크기가 큰 방향으로 형변환, 정수 보다는 실수형으로 형변환을 시킨다.
byte(1) -> short(2), char(2) -> int(4) -> long(8) -> float(4) -> double(8)
Plain Text
복사
int num1 = 50; double num2 = 500; System.out.println(num1+num2);
Java
복사
이런 식으로 해도 출력 결과는 550으로 나온다. 이는 double 형으로 자동 형변환이 된 경우이다.
크기 순서대로 봤을 때 long의 우선 순위가 float보다 먼저일거라고 생각이 들지만, 크기와 타입을 떠나서 컴파일러에 의해 float가 우선순위가 더 높도록 설정되어 있다.

강제(명시적, 수동) 형변환

명시적 형변환이라고도 하며 강제적으로 형변환을 시킨다.
import java.util.Scanner; public class reteral { public static void main(String[] args) { int num; Scanner sc = new Scanner(System.in); System.out.println("숫자를 입력하세요"); num = sc.nextInt(); char ch = (char)num; System.out.println(ch); } }
Java
복사
위 코드와 같이 scanner를 통해 int형을 받고 ch변수에서 num앞에(char)을 붙여줘 강제로 형 변환을 시킨다.
출력 결과
65 A
Plain Text
복사
연산자가 들어가면 Java는 기본적으로 int형 결과를 내뱉습니다. 이 때 short인 s3가 int형 크기보다 작기 때문에 에러가 뜹니다. 따라서 강제 형변환 등의 방법을 고려해야 합니다.

연산자

-연산자: 연산을 수행하는 기호(+, -, *, … )
-피연산자: 연산자의 작업 대상
-연산자 우선순위
대입 연산자
x += y; //x = x + y; x -= y; //x = x - y;
Java
복사
증감 연산자
//x++: x의 값이 사용된 후에 증가 //++x: x의 값이 사용되기 전에 증가 int x = 1, y = 1; System.out.printf("%d %d %d %d",x++, ++x, ++y, y++); //result 1 3 2 2
Java
복사
논리 연산자
int x = 1, y = 2; boolan flag; flag = x&&y;//x와 y가 모두 참이면 True (and) flag = x||y;//x또는 y가 참이면 True (or) flag = !x; //Not연산으로 x가 참이면 True, 거짓이면 False
Java
복사
관계(비교) 연산자
int x = 1 y = 2; boolean flag; flag = (x > y); //false, x가 y보다 크면 True flag = (x < y); //true, x과 y보다 작으면 True flag = (x + 1 >= y); //true flag = (x == y); //false, x와 y가 같으면 True flag = (x != y); //true, x와 y가 다르면 True
Java
복사
삼항 연산자
int a = 10, b = 20; int max_value = (a > b) ? a: b; // a>b의 조건식이 참이면 a, 거짓이면 b 즉 max_value = 20
Java
복사

반복문

while 문
while(조건식) { 반복문장; }
int num = 0; int sum = 0; while(++num <= 10) { sum += num; num++; } System.out.println(sum);
Java
복사
Do while 문
do { 반복문장; } while(조건식);
do while문은 조건식이 False이더라도 무조건 1번은 실행한다.
do { System.out.println("I like Java " + num; num++; } while(num < 5);
Java
복사
for 문
for(초기식; 조건식; 증감식) { 반복문장; }
Scanner scan = new Scanner(System.in); int dan = scan.nextInt(); for(int i = 1; i < 10; i++) { System.out.println(dan + " * " + i + " = " + dan * i); }
Java
복사
이중 for 문
이중 for 문은 for 문안에 한번 더 for문을 사용하는 것입니다. 대표적인 예로 구구단 구현할 때 사용합니다.

코드

public static void main(String[] args) { for(int i = 1; i <= 9; i++){ System.out.println(i + "단"); for (int j = 1; j <= 9; j++){ System.out.println(i + "x" + j + "=" + i*j); } System.out.println(); } }
Java
복사

출력값

1단 1x1=1 1x2=2 1x3=3 1x4=4 1x5=5 1x6=6 1x7=7 1x8=8 1x9=9 . . . 9단 9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
Plain Text
복사
break와 continue
break는 가장 가까운 반복문을 탈출한다.
continue 아래 코드를 건너뛰고 다음 반복문을 실행한다.

배열

사용 이유
같은 자료형의 변수를 여러개 정리할 때 선언 및 초기화를 여러번 해야하는 것보다 나음.
선언 방법
첫 번째
int[] arr=new int[배열크기]
Plain Text
복사
두 번째
int[] scores = {65, 74, 23};
Plain Text
복사
배열의 길이를 바로 쓰기 위한 변수(?)
arr.length
for-each 문을 통해 배열에 있는 값을 바로 꺼내 쓸 수 있다.
int[] arr=[2,3,5]; for(int num : arr){ System.out.println(num); }
Plain Text
복사
arr 배열의 원소가 차례대로 출력된다. for-each 문 안의 num 변수에 첫 원소부터 끝 원소까지 차례대로 값이 들어가는 것이다.
배열 예제 1
1부터 100까지의 숫자 중 랜덤으로 가장 큰 숫자를 출력
import java.util.Arrays; public class Arr02_01 { public static void main(String[] args) { int[] arr = new int[10]; int max = 0; for (int i = 0; i < arr.length; i++) { arr[i] = (int) (Math.random() * 100) + 1;// +1을 안하면 0부터 99까지 // 랜덤함수 자체는 double이다. 그래서 (int)로 형변환 해야한다. } for (int num : arr) { if (num > max) { max = num; } } System.out.println(max); System.out.println(Arrays.toString(arr));// 인트값 전체 배열을 표시. } }
Java
복사
배열 예제 2
배열 6개를 선언하고 1부터 45 까지 랜덤으로 숫자를 넣고 출력
import java.util.Arrays; public class Arr03 { public static void main(String[] args) { int[] arr = new int[6]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) (Math.random() * 46) + 1; for (int j = 0; j < i; j++) { if (arr[i] == arr[j]) { i--; } } } System.out.println(Arrays.toString(arr)); } }
Java
복사