관리 메뉴

거니의 velog

230704 자바 강의 본문

대덕인재개발원_Java

230704 자바 강의

Unlimited00 2023. 7. 11. 21:17

1. 변수(Variable)은 변하는 수!

(1) 변수는 언제 쓰는가?

- 프로그램에서 항상 변하는 값을 나타낼 필요가 있다.
  예를 들어 학생의 성적이나 평균, 게임의 레벨이나 골드, 예금 잔고 등등
  이런 식으로 수시로 변하는 값들을 바꾸기 위한 일종의 "그릇"이 필요해 진다, 이것을 변수라고 부른다.

- 표현하려는 데이터 값에 맞는 데이터 타입(자료형, 참조형)을 이용하여 변수를 선언한다.
   변수가 선언되면 변수마다 가지는 자료형이 다를 수 있다.

   자료형 타입 8가지 : 정수형 (byte, short, int-기본형, long), 실수형(float, double-기본형), 문자형(char), 논리형(boolean)
   자료형 타입 변수에는 실제 데이터가 저장된다.

   참조형 타입 4가지 : 배열, 클래스, enum(열거형), interface
   참조형 타입 변수에는 실제 데이터가 담기지 않고, 데이터가 저장된 주소를 참조한다.

- 표현하려는 자료가 이처럼 숫자나 문자, 논리형 등 다양할 수 있으므로 그에 맞는 자료형을 사용하면, 메모리의 사이즈도 제각기 다르게 된다.

(2) 변수의 개념

- 할당 연산자(assign to) : 오른쪽에 있는 데이터를 왼쪽에 할당.

- 지역변수 : 메서드 내부에서 선언되며, 초기화되지 않으면 사용이 불가능하다. 또한 자기가 선언된 블록 영역을 벗어나면 값이 사라지게 되는데, 이를 "생존 영역(scope rule)"이라 한다.

- 멤버변수(필드) : 메서드 밖에 선언된 변수. 주로 클래스에서 선언하고 생성자와 같이 있다.

- 변수 선언 => 타입 변수명 [= 초기값];


[VariableExample01.java]

package ddit.chap02.sec01;

public class VariableExample01 {

//	int result = 0; // 왜 method1()이 인식할 수 없는가? 클래스에 static이 선언되었기 때문에 멤버 변수 result 생성 시점도 static으로 맞춰 주어야 한다.
	static int result = 0;
	
	public static void main(String[] args) {
		
//		int score; // score가  초기화되지 않으므로 수식에서 오류발생.
		int score1 = 100;
		int score2 = 95;
		int score3 = 70;
		
		result = score1 + score2 + score3; 
		
		System.out.println("총점 : " + result);
		method1(); // main() 메서드 안에서 실행.
		
	}
	
	public static void method1() {
		
		System.out.println("평균 : " + result/3); // result가 멤버변수로 선언되지 않으므로 결과 출력 불가.
		
	}

}

[VariableExample02.java]

package ddit.chap02.sec01;

// 1-100 사이의 합
public class VariableExample02 {

	public static void main(String[] args) {
		
		int sum = 0;
		
		for(int i=1; i<=100; i++) {
			sum += i; // sum = sum + i;
		}
		
		System.out.println("1부터 100까지의 합 : " + sum); // 1부터 100까지의 합 : 5050
		
		myMethod();
		// 경과일수 : 14일
		// 저축 총액 : 1638300원
		
	}
	
	// 첫 날에 100원, 둘째 날부터 전날의 두배씩 저축한다면 최초로 100만원을 넘는 날은 몇 일이 경과된 날이며, 그때까지의 금액은?
	public static void myMethod() {
		
		int days = 1; // 경과일수
		int money = 100; // 날마다 저축할 액수
		int sum = 0; // 저축 총액
		
		while(true) {
			sum = sum + money; // 저축 총액 증가
			if(sum >= 1000000) break; // 저축 총액이 100만원 이상이라면 반복문 종료.
			money = money*2; // 금액이 2배씩 증가
			days++; // days+1; // 경과일이 하루씩 증가
		}
		
		System.out.println("경과일수 : " + days + "일");
		System.out.println("저축 총액 : " + sum + "원");
		
	}

}

[IntegerExample.java]

package ddit.chap02.sec02;

public class IntegerExample {

	public static void main(String[] args) {
		
		byteInteger();
		
	}
	
	public static void byteInteger() {
		
		// byte : 1byte 공간
		//        -128 ~ 127 저장 가능
		//		  127보다 크거나 -128보다 작은 literal은 오류 발생.
		//        수식에 의한 범위를 초과하는 경우 순환적용된 값(128은 -128로, 129면 -127로) 출력
		
//		byte b1 = 128; // 불가능
//		byte b2 = -129; // 불가능
		
		byte res = 127;
		System.out.println(++res); // -128
		System.out.println(++res); // -127
		
	}
	
	public static void shortInteger() {
		
		// short : 2byte 공간
		//         -32768 ~ 32767 저장 가능
		//		   32767보다 크거나 -32768보다 작은 literal은 오류 발생.
		//         수식에 의한 범위를 초과하는 경우 순환적용된 값(32768은 -32768로, 32769면 -32767로) 출력
		
		short sh1 = 200;
		short res1 = (short) (sh1 + 10); // 오류 발생. 10이 int이므로 short->int로 바뀜 + int = int. 따라서 강제 형변환-캐스트(short)이 되어야 함.
		
		short sh2 = 10;
		short res2 = (short) (sh1 + sh2); // 수식에서 int보다 작으면 무조건 int로 자동 형변환(프로모션)이 일어남.
		
	}

}

[정수형 4가지 타입의 예제를 하나씩 만들어 제출하시오.]

package ddit.chap02.sec02;

public class IntegerExample {

	public static void main(String[] args) {
		
		byteInteger();
		shortInteger();
		integer();
		longInteger();
		
	}
	
	public static void byteInteger() {
		
		// byte : 1byte 공간
		//        -128 ~ 127 저장 가능
		//		  127보다 크거나 -128보다 작은 literal은 오류 발생.
		//        수식에 의한 범위를 초과하는 경우 순환적용된 값(128은 -128로, 129면 -127로) 출력
		
//		byte num1 = 128; // 127보다 크므로 오류
//		byte num2 = -129; // -128보다 작으므로 오류
		
		byte res = 127;
		System.out.println(++res); // -128
		System.out.println(++res); // -127
		
	}
	
	public static void shortInteger() {
		
		// short : 2byte 공간
		//         -32768 ~ 32767 저장 가능
		//		   32767보다 크거나 -32768보다 작은 literal은 오류 발생.
		//         수식에 의한 범위를 초과하는 경우 순환적용된 값(32768은 -32768로, 32769면 -32767로) 출력
		
//		short num1 = 32768; // 32767보다 크므로 오류
//		short num2 = -32769; // -32768보다 작으므로 오류
		
		short res1 = 32767;
		System.out.println(++res1); // -32768
		System.out.println(++res1); // -32767
		
		///////////////////////////////////////////////////////////////////
		
		short sh1 = 200;
		short res2 = (short) (sh1 + 10); // 오류 발생. 수식(sh1 + 10) 중에 10이 int이므로 [short->int로 바뀜 + int = int]. 따라서 강제 형변환(캐스트(short))이 되어야 함.
		System.out.println(res2); // 210
		
		short sh2 = 10;
		short res3 = (short) (sh1 + sh2); // 수식(sh1 + sh2)에서 변수의 데이터 타입이 int보다 작으면 무조건 int로 자동 형변환(프로모션)이 일어남.
		System.out.println(res3); // 210
		
	}
	
	public static void integer() {
		
		// int : 4byte 공간
		//         -2147483648 ~ 2147483647 저장 가능
		//		   2147483647보다 크거나 -2147483648보다 작은 literal은 오류 발생.
		//         수식에 의한 범위를 초과하는 경우 순환적용된 값(2147483648은 -2147483648로, 2147483649면 -2147483647로) 출력
		
//		int num1 = 2147483648; // 2147483647보다 크므로 오류
//		int num2 = -2147483649; // -2147483648보다 작으므로 오류
		
		int res1 = 2147483647;
		System.out.println(++res1); // -2147483648
		System.out.println(++res1); // -2147483647
		
		///////////////////////////////////////////////////////////////////
		
		int int1 = 300;
		int res2 = (int) (int1 + 20L); // 오류 발생. 수식(int1 + 20L) 중에 20L이 long이므로 [int->long으로 바뀜 + int = long]. 따라서 강제 형변환(캐스트(int))이 되어야 함.
		System.out.println(res2); // 320
		
	}
	
	public static void longInteger() {
		
		// long : 8byte 공간
		//        –9223372036854775808 ~ 9223372036854775807 저장 가능
		//		  9223372036854775807보다 크거나 -9223372036854775808보다 작은 literal은 오류 발생.
		//        수식에 의한 범위를 초과하는 경우 순환적용된 값(9223372036854775808은 -9223372036854775808로, 9223372036854775809면 -9223372036854775807로) 출력
		
//		long num1 = 9223372036854775808L; // 9223372036854775807L보다 크므로 오류
//		long num2 = -9223372036854775809L; // -9223372036854775808L보다 작으므로 오류
		
		long res = 9223372036854775807L;
		System.out.println(++res); // -9223372036854775808
		System.out.println(++res); // -9223372036854775807
		
	}

}

'대덕인재개발원_Java' 카테고리의 다른 글

230710 자바 강의  (0) 2023.07.12
230707 자바 강의  (0) 2023.07.12
230706 자바 강의  (0) 2023.07.12
230705 자바 강의  (0) 2023.07.12
230703 첫 자바 강의  (0) 2023.07.11