2022.09.21 (수요일)

yeonicerely·2022년 9월 21일
0

1. 형변환

1) 상수

A. 상수: 변하지 않는 수

a. Final을 사용해서 선언함
b. 상수의 변수명은 전부 대문자와 언더바(_)를 사용하고, 스네이크 표기법을 사용한다.

final int MAX_SIZE = 100;

final int CONST_ASSIGNED;
CONST_ASSIGNED = 12; 

MAX_SIZE = 200; //error (상수는 값을 변경할 수 없다)

B. 리터럴: 변수에 넣는 변하지 않는 데이터(값)

a. int num=10; 에서 num은 변수명, 10은 리터럴


2) 형변환 캐스팅

A. 형변환의 대전제: 컴퓨터는 연산 시 데이터 타입을 맞추어야 한다

a. 자료형의 크기가 큰 방향으로, 정수형보다는 실수형으로(소수점 보전) 데이터 타입을 맞춘다

  • int + long이면 long으로 데이터 타입을 맞춘다
  • int + float이면 float로 데이터 타입을 맞춘다
    - 실수는 최댓값과 최솟값을 정해놓고 지수와 가수의 형태로 변환시킨다 -> 정수보다 더 넓은 범위

B. 강제 형변환

a. int 이하(short, char, ...)에서 연산을 하면 default로 int로 변환된다. 변환되지 않게 하려면 강제 형변환

public static void main(String[] args){
	short s1 = 10;
    short s2 = 20;
    
    short s3 = (short)(s1+s2); // short 형식으로 강제 형변환
    int s4 = s1+s2; // 연산 시 int로 변환됨
    }

b. 강제 형변환 예제: 문자의 아스키코드 출력하기

import java.util.Scanner;

public class HelloWorld{
	public static void main(String[] args){
    
    Scanner scan = new Scanner(System.in);
    String lett1 = scan.next();
    char lett2 = lett1.charAt(0);
    
    int result = (int)lett2;
    System.out.println(result);
    }
}
    

2. 연산자

1) 연산자의 우선순위

a. 우선순위가 높은 연산자를 우선으로
b. 우선순위가 같으면 결합방향에 따라서
c. 현업에서는 우선순위가 높은 경우 괄호를 쳐서 표현


2) 문자열 연산자

A. double과 문자열을 연산하면 문자열로 데이터타입을 맞춘다.


String str1 = "백엔드스쿨"+2.0+"기";
System.out.println(str1); //백엔드스쿨2.0기

String str2 = "백엔드스쿨" + 21+9.0;
System.out.println(str2); //백엔드스쿨219

String str3 = 21+9.0+"백엔드스쿨" ;
System.out.println(str3); //30.0백엔드스쿨
  • +의 결합방향이 오른쪽으로 진행 -> 21+9.0+"백엔드스쿨"에서는 21+9.0먼저 계산

3) 복합 대입 연산자

A. +=, -=, *=, /=, %=

B. 전위연산, 후위연산

public static void main(String[] args){
    	int x=1,y=1;
        
        int num1=x++;
        int num2=++y;
        
        System.out.println("num1="+a+", num2="+b);
        // num1=1, num2=2
}

a. num1=x++ (후위연산): x값이 num1로 할당된 이후에 연산을 함
→ 따라서 num1 값에는 변동이 없고, x값은 1 증가하여 2가 된다.

b. num2=++y (전위연산): 증가 연산을 먼저한 후 num2에 할당함
→ 바뀐 값(증가한 값)이 변수 num2에 할당됨

cf) 관련 내용 링크: https://dojang.io/mod/page/view.php?id=96


4) 관계연산자

  • ||(OR): 앞부분 조건이 true이면 그 다음은 체크하지 않음

  • &&(AND): 앞부분 조건이 true여도 그 다음 조건을 체크함


5) 삼항연산자

  • (관계식)?(참일때의 값-A):(거짓일때의 값-B) : 관계식이 참이면 A, 거짓이면 B

public static void main(String[] args) {
	
	int x=10, y=20, z=30;
	int max1 = (x>y)?x:y; //x와 y중에 큰 수를 max1으로
	int max2 = (max1>z)?max1:z; // max1과 z 중 큰 수를 max2로 

	System.out.println(max2);
}
  • cf) 파이썬 삼항연산자: (참일때의 값) if (조건식) else (거짓일때의 값)

3. 반복문

1) while문

while(조건){
실행코드
}
- 조건에 따라 코드가 실행되지 않을 수도 있음

2) do while문

do{
실행코드
} while(조건)
- 무조건 한 번은 실행됨

3) for 문

A. for문 실행순서

for((1)int i=0; (2) i<5; (4) i++) {
(3)System.out.println(i);

}

(1) 변수 초기화(한 번만 실행) -> (2) 조건확인 -> (3) 실행 -> (4) 증감식 실행 -> (2) 조건확인 -> ...

B. 이중 for 문

public static void main(String[] args){
	for (int i=2; i<10; i++){
    	for (int j=1; j<10; j++){
        	System.out.println(i+"*"+j+"="+i*j); 
        }
    }
}
  • 메모리 변화: 첫번째 for문 i=2 생성 -> 두번째 for문을 생성하면서 j 생성 -> j 값이 변화 -> 두번째 for문이 끝나면 j가 메모리에서 사라짐 -> i가 2로 바뀜 -> j값이 메모리에서 생성 -> ...

  • cf) println: 출력을 print한 후 다음 줄에서 실행/ print: 바로 옆에서 다음 내용 출력


C. Continue&Break

a. Break: 반복문 중단
b. Continue: 이번 차례 건너뛰고 다음 차례 실행(python pass와 비슷)



4. 배열

1) 배열 초기화

a. 5개의 요소를 담을 수 있는 배열 생성하기

int[] score = new int[5];

b. 배열에 바로 요소 집어넣기: 배열은 중괄호로 선언함

int[] score = {65,74,68,40,12};
  • 메모리
import java.util.Arrays;

public class Example{
	public static void main(String[] args){
    	int[] arr1 = new int[10];
        int max = 0;
        for (int num=0; num<10; num++){
        	arr1[num] = (int) (Math.random()*100)+1;
        }
        for (int num: arr1){
        	if (max>num){
            	continue;
            } else{
            	max=num;
            }
        }
        System.out.println(max);
        System.out.println(Arrays.toString(arr1));
    }
}
  • 배열은 반드시 메모리의 연속된 공간으로 할당된다
  • 배열 score에 대한 메모리는 배열이 시작되는 첫번째 주소가 할당된다

2) For each문

A. for (int num: arr){}

for문이 돌아갈 때 배열 arr안의 요소를 순서대로 num에 넣는다

int[] arr = {12,40,68,74,65};
int sum = 0;
for (int num: arr){
	sum+=num;
}

sum은 배열 arr의 원소 12,40,68,74,65의 합이다.

  • cf) Arrays.toString(arr1): 배열 출력



B. 예제 로또번호 생성

0개의 댓글