본문 바로가기
코리아 IT아카데미/Java

2일차 | 상수, 형 변환과 연산자

by Sharon kim 2021. 10. 19.

 

복습 순서  잘 안되는 부분
ch02 >ConstantTest.java
TypeConversion.java
ch03 >
MainTest1,2,7,3,4,5.java
ShortCircuitTest.java
MainTest6.java
OperaterEx1.java
강제 형변환: 오른쪽에서 왼쪽 읽기
관계, 논리 연산자는 예약어 boolean을 쓰는 것

상수 예제

package ch02;

public class ConstantTest {
	// 메인 함수 (코드의 시작점)
	public static void main(String[] args) {

		// 상수(constant)
		final int MAX_NUM = 12; // 상수를 선언과 초기화를 동시에
		final int MIN_NUM; // 상수선언

		MIN_NUM = 1;
		System.out.println(MAX_NUM);
		System.out.println(MIN_NUM);

//		MAX_NUM = 100;
		// 상수에 한번 초기화된 공간에는 값을 변경할 수 없다.

		final int MY_COUNT = 100;
		// 1.위에서 상수는 어디를 말하는 걸까요?
		// MY_COUNT
		// 2. 예약어는 어디 어디를 말하는 건가요?
		// final, int
		// 3. 100은 무엇인가요?
		// 리터럴,값

	}// end of main

}// end of class

데이터 형변환

package ch02;

public class TypeConversion {
	// 메인함수_코드의 시작점
	public static void main(String[] args) {
		// 데이터의 형변환
		//int 자료형을 double로 변경하거나
		//double 자료형을 int로 변경하는 것을 말한다.
		int iNum1 = 100;
		System.out.println(iNum1);
		
		//자동 형변환
		double dNum1 = iNum1;
		System.out.println(dNum1);
		
		//강제 형변환
		double dNumber = 1.12345;
//		int iNumber = dNumber;
		//int는 4byte double은 8byte 
              //작은 것에서 큰걸 담으려니까 에러
		
		//개발자가 컴파일럭야 괜찮으니깐 그냥 강제로 넣어
		int iNumber = (int)dNumber;
		System.out.println(iNumber);
		
		//연습
		double aValue;
		int bValue;
		
		aValue = 0.5;
		bValue = (int)10.1;
		System.out.println(bValue);
		
		
	}// end of main

}// end of class

대입연산자

package ch03;
//1
public class MainTest1 {
	// 메인함수_코드의 시작점
	public static void main(String[] args) {

		// 대입 연산자( = ) 오른쪽에서 왼쪽으로 대입하기 
		//10은 number
		int number = 10;
		// = (수학기호와 달리 변수나 값을 대입하는 연산자 입니다.)
		// 연산에 방향은 오른쪽에서 왼쪽으로 연산이 됩니다.
		int number2 = number;
		// 변수에 변수를 대입할 수도 있습니다.
		System.out.println(number);
		System.out.println(number2);

		System.out.println("=================");

		// 부호 연산자(+,-)
		// 부호를 변경하는 연산자입니다.
		// 단 변수에 들어 있는 실제 값을 변경한 상태는 아닙니다.
		
		System.out.println(-number);
		System.out.println("number에 현재 값:"+ number);
		
		number = -number;
		System.out.println(number);
		//변수에 실제 값을 변경하려면 
		//대입 연산자를 함께 사용해야 한다.
		
		
	}// end of main

}// end of class

산술연산자

package ch03;
//2
public class MainTest2 {
	// 메인함수_코드 시작점
	public static void main(String[] args) {

		// 산술 연산자 연습(+ - * / %)

		int number1 = 5 + 3;
		int number2 = 5 - 3;
		int number3 = 5 * 3;
		int number4 = 5 / 3;
		int number5 = 5 % 3;

		System.out.println(number1);
		System.out.println(number2);
		System.out.println(number3);
		System.out.println(number4);
		System.out.println(number5);
		System.out.println("=============");
		// 문제
		// 1. (12+3)/3 값을 화면에 출력해보세요.
		// 단, 변수를 만들어서 담고 출력해주세요
		int number6 = (12 + 3) / 3;
		System.out.println(number6);

		// 2. (25%2)값을 화면에 출력해 보세요.
		// 단, 변수 사용 없이 바로 화면에 출력해주세요.
		System.out.println(25 % 2);
		
	}// end of main

}// end of class

복합대입연산자

package ch03;
//3
public class MainTest7 {
	// 메인함수 _ 코드 시작
	public static void main(String[] args) {

		// 복합 대입 연산자 (+=, -=, *=, /=, %=)
		// 대입 연산자와 다른 연산자가 함께 사용

		int num1 = 1;
		// num1 = num1 + 10;
		// System.out.println(num1);
		num1 += 10;
		System.out.println(num1);

		int num2 = 1;
		// num2 = num2-10;
		// 복합 대입 연산자로 변경
		num2 -= 10;
		System.out.println(num2);
		// num2 변수에 값이 현재 -9이다.

		// num2 변수에 곱하기 2를 해서 num2 변수 결과값을 담아 주세요
		// 단, 복합 대입 연산자를 사용
		num2 *= 2;
		System.out.println(num2);
		num2 = num2 * 2;
		// num2 변수에 나누기 2를 해서 num2 변수 결과값을 담아 주세요
		// 단, 복합 대입 연산자를 사용
		num2 /= 2;
		System.out.println(num2);
		num2 = num2 / 2;
		// num2 변수에 나머지 연산자 2를 해서 num2 변수 결과값을 담아 주세요
		// 단, 복합 대입 연산자를 사용
		num2 %= 2;
		System.out.println(num2);
		num2 = num2 % 2;
		
	}// end of main

}// end of class

증감, 감소 연산자

package ch03;
//4
public class MainTest3 {
	//메인함수_코드 시작
	public static void main(String[] args) {
		
		//증감, 감소 연산자
		//++, --
		
		int num1 = 1;
		num1 ++;
		System.out.println(num1);
		
		int num2 = 1;
		num2--;
		System.out.println(num2);
		
		//1. 증감 연산자가 뒤에 올 경우
		int num3 = 10;
		int num4;
		
//		num4 = num3++;
		num4 = ++num3;
		
		System.out.println(num4);
		System.out.println(num3);
		
		int num5 = 100;
		int num6;
		
		//1.num5를 num6 변수에 담아 주세요
		// 단 증감 연산자를 사용해서 num6변수를 101로 만들어서 출력
		
		num6 = ++num5;
		System.out.println(num6);
		
		//2.num5를 num6 변수에 담아 주세요
		// 단 증감 연산자를 사용해서 num6변수를 101로 만들어서 출력
		
		num6 = num5++;
		System.out.println(num6);
		
		System.out.println(num5);
		
		//결론 : 증감 연산자는 변수(공간)에 있는 값을 1 증가 시킨다. 
		//단 앞에 있을 때와 뒤에 있을 때 연산에 순서가 다르다.

	}//end of main

}//end of class

관계연산자

package ch03;
//5
public class MainTest4 {
	//메인함수 코드시작
	public static void main(String[] args) {
		//관계연산자
		//관찰에 결과가 참, 거짓인지 판별할 때 사용
		//결과값은 오직 true, false이다.
		
		int num1 = 5;
		int num2 = 3;
		
		boolean value1 = (num1 < num2);
		System.out.println(value1);
		
		boolean value2 = (num1 > num2);
		System.out.println(value2);
		
		boolean value3 = (num1 == num2);
		System.out.println(value3);
		
		boolean value4 = (num1 != num2);
		System.out.println(value4);
		
	}//end of main

}//end of class

논리연산자

package ch03;
//6
public class MainTest5 {

	// 메인함수 코드의 시작
	public static void main(String[] args) {

		// 논리 연산자 (&&엠퍼센트, ||버티컬바, !)
		// 관계연산자와 혼합하여 많이 사용됨
		// 연산에 결과가 true, false

		int num1 = 10;
		int num2 = 20;

		// 1.논리곱 (&&)
		
		boolean flag1 = (num1 > 0) && (num2 > 0); // true
		boolean flag2 = (num1 > 0) && (num2 < 0); // false
		//둘 다 true(참)일때, true를 반환
		
		// 2. 논리합(||)
		
		boolean flag3 = (num1 < 0) || (num2 > 0); // true
		boolean flag4 = (num1 > 0) || (num2 > 0); // true
		//둘 중 하나라도 true이면, 연산의 결과는 true를 반환한다.
		System.out.println(flag4);
		
		System.out.println("----------------");
		
		//num1 = 10
		boolean flag5 = (num1 < 0) && (num2 > 0);
		boolean flag6 = (num1 > 0) || (num2 > 0);
		
		System.out.println(flag5);
		System.out.println(flag6);
	                    //앞의 식만 보고 true, false 바로 구별
		
	}// end of main

}// end of class

앞의 식만 보고 true, false 바로 구별

package ch03;
//7
public class ShortCircuitTest {

	public static void main(String[] args) {
		//  
		int num1 = 5; 
		int i = 0; 
		
		boolean value = ((num1 = num1 + 10 ) < 10) && ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
		
		value = ((num1 = num1 + 10 ) < 10) || ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);

	}

}

삼항연산자

package ch03;
//8
import java.util.Scanner;

public class MainTest6 {
	//메인함수 코드시작
	public static void main(String[] args) {
		
		//삼항 연산자
		//조건식 ? 결과1 : 결과2;
		
		int num1 = (5 > 3)? 10 : 20;
		System.out.println(num1);
		
		int num2 = (5 < 3)? 10 : 20;
		System.out.println(num2);
		
		//JDK가 만들어진 도구를 이용해 봅시다.
		int max;
		System.out.println("입력 받은 두 수 중 큰 수를 출력하세요.");
		Scanner scanner = new Scanner(System.in);
		//ctrl + shift + o 
		//ctrl + 마우스로 Scanner 클릭,   ctrl + w 종료
		System.out.println("입력1 : ");
		int x = scanner.nextInt();
		System.out.println("입력2 :");
		int y = scanner.nextInt();
		
		//삼항연산자 식
		max = (x > y)? x:y;
		System.out.println("큰 숫자는 : "+ max + " 입니다.");
		
	}//end of main

}//end of class

연습문제

package ch03;
//9
public class OperaterEx1 {

	public static void main(String[] args) {
		
		int i = 10;
		double d = 20.5;
		
		// 1
		// 두 수를 덧셈 연산 하여 result1 변수에 담고
		// 결과값 30.5를 출력 하세요.
		double result1 = i + d;
		System.out.println(result1);

		// 2
		// result1 변수를 정수형으로 강제 형 변환 해서 출력하세요
		//단 변수에 저장하지 말고 수행해주세요
		
		System.out.println((int)result1);

		// 3
		// i 변수의 값을 -1을 뺀 후 출력하세요
		// 단, 단항 연산자 사용

//		i -= 1;
		i--;
		System.out.println(i);
		
		// 4
		// d 변수에 값을 -20.5로 출력 하세요
		// 단, d 변수에 값을 변경하지 마세요(부호연산자를 정확히 알고 있는가?)

		System.out.println(-d);
		//System.out.println(d);
		//d = -d;

		// 5
		// 변수 i와 d, 관계 연산자를 사용해서 result2 변수를 
		// 선언하고 변수에 true 값이 담기도록 식을 만들고
		// 출력하세요 
		boolean result2 = (i<d) ;
		System.out.println(result2);

		int num1 = 10;
		int num2 = 30;

		// 6
		// 변수 result3을 선언하고
		// num1과 num2 변수가 숫자 50보다 큰지 논리 연산자를 
		//사용해서 결과를 담고 출력하세요

        boolean result3 = (num1 > 50) && (num2 > 50);
		System.out.println(result3);
		
		// 7
		// num1과 num2 값 중 큰 수를 삼항 연산자를 사용해서
		// max 변수에 값을 담고 출력해주세요
		// 단, 선언과 초기화를 동시에 해주세요
		 
		int max = (num1 > num2)? num1 : num2;
		System.out.println(max);

	}

}

수업내용

[출처] https://blog.naver.com/devnote1 작성자 devnote1

상수(constant) 선언하기

상수는 변하지 않는 수

 

원주률 3.14, 1년 12개월 등

final 예약어를 사용하여 선언

상수를 사용하면 변하지 않는 값을 반복하여 사용할 때 의미있는 문자로 인식하기 쉽고

혹, 변하더라도 선언한 부분만 변경하면 되므로 여러부분을 수정할 필요가 없음

 

public class ConstantTest {

	public static void main(String[] args) {

		final int MAX_NUM = 10;
		final int MIN_NUM;

		MIN_NUM = 0;

		System.out.println(MAX_NUM);
		System.out.println(MIN_NUM);

		// MAX_NUM = 100;
	}
}

리터럴(literal)

원래 10, 123, 3.14, 'A'와 같은 값들이 '상수'인데, 프로그래밍에서는 상수를 '값을 한번 저장하면 변경할 수 없는 저장공간'으로 정의하였기 때문에 이와 구분하기 위해 상수를 다른 이름으로 불러야만 했습니다. 그래서 상수 대신 리터럴이라는 용어를 사용한다. 리터럴은 단지 우리가 기존에 알고 있던 '상수'의 다른 이름일 뿐입니다.

형 변환 (type conversion)

묵시적 형 변환(explicit type conversion, 자동 형 변환)과 명시적 형 변환(implicit type conversion, 강제 형 변환)이 있음

바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동으로 이루어 짐

public class TypeConversion {

	public static void main(String[] args) {

		int iNum1 = 100;
		// 자동형변환
		double dNum1 = iNum1;

		System.out.println(iNum1);
		System.out.println(dNum1);

		
		double dNum2 = 1.12315;
		// 명시적 형변환
		int iNum2 = (int) dNum2;

		System.out.println(dNum2);
		System.out.println(iNum2);
	}
}

* 서로 다른 자료형 간에 연산등의 수행을 위해 하나의 자료형으로 통일하는 것

(묵시적 형 변환(explicit type conversion, 자동 형 변환)과 명시적 형 변환(implicit type conversion, 강제 형 변환)이 있음

* 바이트 크기가 작은 자료형에서 큰 자료형으로 형 변환은 자동으로 이루어 짐

 

항과 연산자

● 항(operand) : 연산에 사용되는 값

● 연산자 (operator) : 항을 이용하여 연산하는 기호

 

대입 연산자 (assignment operator)

● 변수에 다른 변수나 값을 대입하는 연산자

● 이항 연산자 중 우선 순위가 가장 낮은 연산자들

● 왼쪽 변수 = 오른쪽 변수(변수 또는 식, 값)

부호 연산자

● 단항 연산자

● 변수의 부호를 유지 하거나(+) 바꿈(-)

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

● 부호 연산자 예제

public class OperationTest1 {

	public static void main(String[] args) {

		int num = 10;
		// 부호 연산자
		System.out.println(-num);

		System.out.println(num);
		// 실제 값이 변경된 것은 아니다.
		// 값을 변경 하려면 대입 연산자를 사용해야 한다.
		num = -num;
		System.out.println(num);
	}
}

산술 연산자

사칙 연산자

복합 대입 연산자

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

● 복합연산자 예제

public class OperationTest1 {

	public static void main(String[] args) {

		int num1 = 0;
		// num1 = num1 + 2;
		num1 += 2;
		System.out.println(num1);

		int num2 = 0;
		// num2 = num2 - 2;
		num2 -= 2;
		System.out.println(num2);

		int num3 = 1;
		num3 *= 3;
		System.out.println(num3);

		int num4 = 10;
		num4 /= 2;
		System.out.println(num4);

		int num5 = 5;
		num5 %= 3;
		System.out.println(num5);

		// ctrl + shift + f : 코드 정렬

	}
}

증감, 감소 연산자

단항 연산자

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

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

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

● 증감, 감소 연산자 예제

public class OprationTest3 {

	public static void main(String[] args) {

		int gameScore = 10;

		int lastScore;
		
		lastScore = ++gameScore;

		// lastScore = gameScore++;
		// gameScore += 1;

		System.out.println(gameScore);
		System.out.println(lastScore);
	}
}

관계 연산자

● 이항 연산자

● 연산의 결과가 true(참), false(거짓)으로 반환 됨, 비교연산자 라고도 함

● 조건문, 반복문의 조건식으로 많이 사용 됨

 

public class RealtionalTest {

	public static void main(String[] args) {

		int num1 = 5;
		int num2 = 3;
		
		boolean value = (num1 > num2);
		System.out.println(value);
		
		System.out.println(num1 < num2);
		System.out.println(num1 >= num2);
		System.out.println(num1 <= num2);
		System.out.println(num1 == num2);
		System.out.println(num1 != num2);
	}
}

논리 연산자

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

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

public class LogicalTest {

	public static void main(String[] args) {
		
		int num1 = 10;
		int num2 = 20;
		
		boolean flag = (num1 > 0) && (num2 > 0);
		System.out.println(flag);
		
		flag = (num1 < 0) && (num2 > 0);
		System.out.println(flag);
		
		flag = (num1 > 0) || (num2 > 0);
		System.out.println(flag);
		
		flag = (num1 < 0) || (num2 > 0);
		System.out.println(flag);
		
		flag = !(num1 > 0);
		System.out.println(flag);
	}
}

논리 연산에서 모든 항이 실행되지 않는 경우

(short circuit evaluation)

● 논리 곱(&&)은 두 항의 결과가 모두 true일 때만 결과가 true

-- 앞의 항의 결과가 false이면 뒤 항의 결과를 평가하지 않음

● 논리 합(||)은 두 항의 결과가 모두 false일 때만 결과가 false

-- 앞의 항의 결과가 true이면 뒤 항의 결과를 평가하지 않음

public class ShortCircuitTest {

	public static void main(String[] args) {
		int num1 = 5; 
		int i = 0; 
		
		boolean value = ((num1 = num1 + 10 ) < 10) && ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);
		
		value = ((num1 = num1 + 10 ) < 10) || ( ( i = i + 2 ) < 10);
		System.out.println(value);
		System.out.println(num1);
		System.out.println(i);

	}

}

조건 연산자

● 삼항 연산자

● 조건식의 결과가 true(참)인 경우와 false(거짓)인 경우에 따라 다른 결과가 수행됨

● if (조건문)을 간단히 표현할 때 사용 할 수 있음

import java.util.Scanner;

public class ConditionTest {

	public static void main(String[] args) {

		int max;
		System.out.println("입력 받은 두 수중 큰 수를 출력하세요\n ");
		
		Scanner scanner = new Scanner(System.in);
		System.out.println("입력1:");
		int x = scanner.nextInt();
		System.out.println("입력2:");
		int y = scanner.nextInt();
		
		max = (x > y)? x : y;
		System.out.println(max);
	}
}

연산자 우선순위

● 가장 높은 순위 연산자는 () [] .

● 가장 낮은 순위 연산자 =

해보기1 : 복습 완료 

해보기2 :연습문제 완료

 

1. 다음 표의 빈 칸에 8개의 기본형(primitive type)을 알맞은 자리에 넣으시오.

종류 / 크기 1 byte 2 byte 4 byte 8 byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

2. 주민등록번호(임시)를 숫자로 저장하고자 한다. 단 ‘ - ‘ 은 사용하지 않습니다.  이 값을 저장하기 위해서는 어떤 자료형 (data type)을 선택해야 할까? regNo라는 이름의 변수를 선언하고 자신의 주민등록번호로 초기화 하는 한 줄의 코드를 적으시오. 

 

int regNo = 1234567891234;

 

3. 다음의 문장에서 리터럴, 변수, 상수, 키워드를 적으시오

 int i = 100;

 long iNum =100L;

 final float PI = 3.14f;

 

- 리터럴 : 100, 100, 3.14

- 변수 : i, iNum

- 키워드 : int, long, float, final

- 상수 : PI

4. 다음 문장들의 출력결과를 적으세요. 

 

System.out.println( "1" + "2"); -> ( 12 )

System.out.println(true + ""); -> ( true )

System.out.println('A' + 'B'); -> ( 131 )

System.out.println('1' + 2); -> ( 51 )

System.out.println('1' + '2');  -> ( 99 )

System.out.println('J' + "ava"); -> ( Java )

 

5. 다음 중 변수의 이름으로 사용할 수 있는 것은? (모두 고르시오)  a, g

a. $ystem

b. channel#5

c. 7eleven 

d. If

f. new

g. $MAX_NUM

h. hello@com