백엔드/JAVA

1주차 ( ch3~ ch4 ) 이론 추가

두개의 문 2023. 4. 29. 23:52
Ch03. 연산자

< 03-1 ) 연산자와 연산식 >

 

- 연산식은 반드시 하나의 값을 산출, 값 대신에 연산식 사용 가능

- *, /, % : 우선순위 동일 → 왼쪽에서 오른쪽 방향으로 연산

  100 * 2 / 3 % 5 = 1

- 복잡한 연산식에는 괄호( )를 사용해서 우선순위를 정하자

 

 

 

< 03-2 ) 연산자와 연산식 >

 

 - 단항 연산자 중 부호 연산자 ( +, - )

   : + 는 부호 유지 / - 는 부호 반대로 변경

  ※ 주의 ) 부호 연산자의 결과 = int 타입

    → byte 타입 변수를 부호 연산하면 int타입으로 변환되므로 int 타입 변수에 저장해야 함

- 잘못된 코딩 -
byte b = 100 ;
byte result = -b ;		// 컴파일 에러

- 올바른 코딩 - 
byte b = 100 ;
int result = -b ;

- 이항 연산자

 1. 산술 연산자 ( +, -, *, /, % )

  · 특징 : 피연산자들의 타입이 동일하지 않을 경우, 피연산자들의 타입을 일치시킨 후 연산 수행

    ① 피연산자들이 byte, short, char 타입일 경우, 모두 int 타입으로 변환된 후 연산 수행

    ② 피연산자들이 모두 정수 타입이고 long 타입이 포함되어 있을 경우, 모두 long 타입으로 변환 후 연산 수행

    ③ 피연산자 중 실수 타입 ( float, double )이 있을 경우, 허용 범위가 큰 실수 타입으로 변환된 후 연산 수행

byte byte1 = 1;
byte byte2 = 1;
byte byte3 = byte1 + byte2;		// 모든 피연산자가 int타입이므로 연산 결과도 int 타입

int result = byte1 + byte2 ;	// 올바른 코딩
int int1 = 10;
int int2 = 4;
int result1 = int1 / int2 ;		// 출력 결과 : 2
double result2 = int1 / int2 ; 		// 출력 결과 : 2.5가 아닌 2.0

// 2.5의 결과를 얻으려면, int1, int2 중 하나를 double 타입으로 강제 타입 변환시킨 후 산술 연산하기
double result3 = (double) int1 / int2 ;
char c1 = 'A' + 1;		// char c1 = 66; 으로 컴파일됨
char c2 = 'A';
// char c3 = c2 + 1 ;		
// char 변수가 산술 연산에 사용 시, int 타입으로 변환되므로 결과도 int 타입

- 올바른 코딩 - 
char c3 = (char) ( c2 + 1 ) ;	// char 타입으로 강제 타입 변환

 

 2. 문자열 결합 연산자

· 문자열과 숫자가 혼합된 + 연산식 : 왼쪽에서 오른쪽으로 연산 진행

"JDK" + 3 + 3.0 ;        // 출력 결과 : JDK33.0 
3 + 3.0 + "JDK" ;        // 출력 결과 : 6.0JDK

 

3. 비교 연산자

· 연산을 수행하기 전에 피연산자의 타입을 일치시킴

 예외 )

0.1 == 0.1f 
→ double 타입으로 변환 시, 0.1 == 0.1로 true가 산출될 거로 예상되지만 false!
    ∵ 실수의 저장 방식인 부동 소수점 방식이 0.1을 정확히 표현할 수 없기 때문
       0.1f = 0.1의 근사값인 0.10000000149011612로 표현되므로 0.1보다 큰 값

· 부동 소수점이란?

글을 봐도 이해가 확 와닿지는 않네.. 질문하자

 

- 삼항 연산자

 ( 조건식 ) ? A : B

 :  조건이 true이면, A 산출 / false이면, B 산출

  → if문으로 변경해서 작성할 수 있지만, 한 줄로 간단하게 작성 시 효율적

 

 


Ch04. 조건문과 반복문

< 04-1 ) 조건문 : if문, switch문 >

 

- switch문 

  if문 : 조건식의 결과가 true, false 두 가지 밖에 없으므로, 경우의 수가 많아질수록 else-if를 반복적으로 추가해서 복잡해짐

 → switch문은 변수의 값에 따라 실행문이 결정되므로 코드 간결

switch ( 변수 ) {
	case 값1 : 
    		실행문 A
        	break;
    case 값2 : 
    		실행문 B
        	break;
    default : 
    		실행문 C
}

 괄호 안의 변수 값과 동일한 값을 갖는 case로 가서 실행문 실행함 / default 값은 생략 가능