[9일차] 10.변하지 않는 상수와 리터럴, 변수의 형 변환 / 11. 자바의 연산자들 -1 (대입, 부호, 산술, 복합대입, 증감연산자) / 12. 자바의 연산자들 -2 (관계, 논리 연산자)

WOOJEON JANG·2022년 1월 4일
0

Part01. 자바 프로그래밍

ch 01. 자바 기초

10. 변하지 않는 상수와 리터럴, 변수의 형 변환


<상수(constant)선언하기>

  • 상수는 변하지 않는 수
  • 원주율 3.14, 1년 12개월 등
  • final 예약어를 사용하여 선언
  • 상수를 사용하면 변하지 않는 값을 반복하여 사용할 때 의미있는 문자로 인식하기 쉽고, 혹 변하더라도 선언한 부분만 변경하면 되므로 여러부분을 수정할 필요가 없음
package ch10;

public class ConstantTest {

	public static void main(String[] args) {

		final int MAX_NUM = 100;
		final int MIN_NUM;
		
		MIN_NUM = 0;
		
		System.out.println(MAX_NUM);
		System.out.println(MIN_NUM);
		
		//MAX_NUM = 1000;
	}
}
  • 결과

<리터럴(literal)>

  • 프로그램에서 사용하는 숫자, 문자, 논리값 등을 뜻한
  • 리터럴은 상수 풀(constant pool)에 있음
  • 정수 리터럴은 int로 실수 리터럴은 double 로 저장됨
    정수의 범위가 넘어가는 경우는 L(l)을 뒤에 붙이고, float을 사용하는 경우는 F(f) 식별자를 사용해야함

<형 변환(type conversion)>

  • 서로 다른 자료형 간에 연산등의 수행을 위해 하나의 자료형으로 통일하는 것
  • 묵시적 형 변환(explicit type conversion, 자동 형 변환)과 명시적 형 변환(implicit type conversion, 강제 형 변환)이 있음
  • 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동으로 이루어 짐
  • 덜 정밀한 자료형에서 더 정밀한 자료형으로의 형 변환은 자동으로 이루어 짐
byte bNum = 10;
int iNum = bNum; //byte 보다 int가 크기 때문에 자연스럽게 변환됨

int iNum1 = 20;
float fNum = iNum2; // 정수형 20 - > 실수형 20.0

int iNum = 10;
byte bNum = (byte)iNum; //int보다 작은 크기의 Byte로 강제적 형 변환, 그러나 byte보다 크지 않은 숫자라서 truncate 되지 않음

double dNum = 3.14;
int iNum2 = (int)dNum; //실수형을 정수형으로 바꿨기 때문에, 소수점 잘림
  • 결과

<연산 중 현 변환 예제>

package ch10;

public class TypeConversion {

	public static void main(String[] args) {

		double dNum = 1.2;
		float fNum = 0.9F;
		
		int iNum1 = (int)dNum + (int)fNum;
		int iNum2 = (int)(dNum + fNum);
		
		System.out.println(iNum1);
		System.out.println(iNum2);
	}

}
  • 결과

오늘의 공부 소감(10.) :
형 변환은 수학연산과 같이 괄호 안의 것을 먼저 계산한다는 것을알게되었다.



11. 자바의 연산자들-1(대입, 부호, 산술, 복합대입, 증감연산자)


<항과 연산자>

  • 항(operand) : 연산에 사용되는 값
  • 연산자(operator) : 항을 이용하여 연산하는 기호

<대입 연산자(assignment operator)>

  • 변수에 다른 변수나 값을 대입하는 연산자
    (ex. int num = 10;(10을 num에 대입해라))
  • 이항 연산자 중 우선 순위가 가장 낮은 연산자들
  • 왼쪽 변수(l value) = 오른쪽 변수(r value)(or 수식, 값)

<부호 연산자>

  • 단항 연산자
  • 변수의 부호를 유지 하거나(+)로 바꿈(-)
int num = 10;
System.out.println(-num);

== > 출력 결과 : -10
(- 부호가 앞에 붙지만 num 값 자체가 바뀌는것이 아님. num 값을 직접 바꾸려면 '대입연산자'를 사용해야함)

  • 실제 변수의 부호가 변하려면 대입 연산자를 사용해야 함

<산술 연산자>

  • 사칙 연산자
  • % : 나누고 난 나머지를 구하는 연산자, 숫자 n의 나머지 범위는 0~n-1

<복합 대입 연산자>

  • 대입 연산자와 다른 연산자가 함께 쓰임

  • += 사용 예시


<증가, 감소 연산자>
  • 단항 연산자

  • 변수의 값을 1 더하거나 1 뺄 때 사용

  • 연산자가 항의 앞에 있는가 뒤에 있는가에 따라 연산 시점과 결과가 달라짐

  • 문장(statement)의 끝(;)을 기준으로 연산 시점을 생각해야 함

  • 예제

    (증가 연산자를 앞에 붙이면 연산 후 l value에 대입시켜서 결과값이 나옴)


(증가 연산자를 뒤에 붙이면 대입 전엔 적용되지 않음)


(-- 연산자도 마찬가지로 앞에 변수 앞에 붙이면 연산 적용 후 대입되어 출력)

오늘의 공부 소감(11.) :
증가, 감소 연산자 활용이 구체적으로 어떤 경우에 유용하게 쓰이는지 궁금하다.



12. 자바의 연산자들-2(관계, 논리연산자)


<관계 연산자>

  • 이항 연산자
  • 비교 연산자 라고도 부름
  • 연산의 결과가 true(참), false(거짓)으로 반환 됨.
  • 조건문, 반복문의 조건식으로 많이 사용 됨

<논리 연산자>

  • 관계 연산자와 혼합하여 많이 사용 됨

  • 연산의 결과가 true(참), false(거짓)으로 반환 됨

  • && : AND 연산

  • || : OR 연산

  • ! : NOT 연산


<논리 연산에서 모든 항이 실행되지 않는 경우 - 단락 회로 평가(short circuit evaluation)>

  • 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true
    ==> 앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음

  • 논리 합(||)은 두 항의 결과가 모두 false 일때만 결과가 false
    ==> 앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음

  • 예시_1

  • 출력 결과 : i 값이 변하지 않았는데, 이유는 AND연산에서 두 값 중 하나만 false여도 결과가 정해지기 떄문에 굳이 뒤 항을 연산하지 않음 => short circuit evaluation

  • 예시_2

  • 출력 결과 : i 값이 변하지 않았는데, 이유는 OR연산에서 두 값 중 하나만 True여도 결과가 정해지기 떄문에 굳이 뒤 항을 연산하지 않음 => short circuit evaluation

오늘의 공부 소감(12.) :
정보처리 기능사 필시 기험때 책으로만 공부 했던 부울대수가 프로그래밍에서 어떻게 쓰이는지 궁금했었는데, 사용 방법을 알게되어 좋다.

profile
back-end enginneer

0개의 댓글