코딩 공부/JAVA

[JAVA] 자바 변수(variable), 상수, 리터럴에 대하여

Cosmic-dust 2022. 4. 28. 19:44
728x90
반응형

1. 변수(variable)란?

- 수학 개념: 변하는 수?

- 컴퓨터 개념: 하나의 값을 저장할 수 있는 메모리 공간을 말한다.

- 1byte 단위로 메모리 주소가 있다.

 

2. 변수의 선언

(1) 변수의 선언 이유

- 값(data)을 저장할 공간을 마련하기 위해서

(2) 변수의 선언 방법

- 변수타입 변수이름;

ex) int age // 정수(int)타입의 변수 age를 선언

 

3. 변수에 값 저장하기

(1) 변수에 값 저장하기('='는 등호가 아니라 대입)

int age;         // 정수(int)타입의 변수 age를 선언

age = 25;      // 변수 age에 25를 저장

int age = 25;  // 위의 두 줄을 한 줄로

(2) 변수의 초기화 - 변수에 처음으로 값을 저장하는 것

[주의] 지역 변수는 읽기 전에 꼭! 초기화해야 함.(변수에는 클래스 변수, 인스턴스 변수, 지역변수가 있다-나중에 설명)

int x = 0;       // 변수 x를 선언 후, 0으로 초기화

int y = 5;       // 변수 y를 선언 후, 5로 초기화

int x = 0, int y = 5; //위 두 줄을 한 줄로

 

4. 변수의 값 읽어오기

(1) 변수의 값이 필요한 곳에 변수의 이름을 적는다.

int year = 0, age = 14;

year = age + 2000;

-> year = 14 + 2000;

-> year = 2014;

age = age + 1;

-> age = 14 + 1;

-> age = 15;

 

System.out.println(age);   //출력

->System.out.println(15);

 

- 변수가 필요한 이유

  - 변수가 없다면 (4*2), (4/2), (4+2), (4-2) 등의 같은 4와 2를 적었는데, 이 숫자를 바꾸고 싶다면 하나하나 다 다시 바꿔야할 것이다.

  - 하지만, int x = 4, y = 2; 로 변수를 적용해준다면 변수에 있는 숫자만 바꾸면되니 수고로움을 덜 수 있다.

 

5. 변수의 타입

(1) 변수의 타입은 저장할 값의 타입에 의해 결정된다.

(2) 저장할 값의 타입과 일치하는 타입으로 변수를 선언

char(문자형) ch = '가'(문자);

double(실수형) pi = 3.14(실수);

 

6. 값의 타입 종류(8개의 기본형)

- 값(문자, 숫자)

  - 문자 - char

  - 숫자(정수, 실수)

     -   정수 - byte, short, int, long 

     -   실수 - float, double

- 논리 - boolean(true, false)

 

6-1. 기본형과 참조형

- 기본형(Primitive type)

   - 오직 8개 (boolean, char, byte, short, int, long, float, double)

- 참조형(Reference type)

   - 무한개

   - 기본형을 제외한 나머지 (String, System 등)

   - 메모리 주소를 저장(4 byte(32bit JVM=40억) 또는 8 byte(64bit JVM = 160경))

      Date today;   // 참조형 변수 today를 선언

      today = new Date();  // today에 객체의 주소를 저장

 

6-2. 기본형(Primitive type) - 종류와 크기

- 논리형 : true와 false중 하나를 값으로 갖으며, 조건식과 논리적 계산에 사용된다.

- 문자형 : 문자를 저장하는데 사용되며, 변수 당 하나의 문자만을 저장할 수 있다.

- 정수형 : 정수 값을 저장하는데 사용된다. 주로 사용하는 것은 ing와 long이며,

             byte는 이진 데이터를 다루는데 사용되며,

             short은 c언어와의 호환을 위해 추가되었다.(잘 안쓰임)

- 실수형 : 실수 값을 저장하는데 사용된다. float와 double이 있다.

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

 

7. 변수, 상수, 리터럴

- 변수(variable) : 하나의 값을 저장하기 위한 공간(변경 O)

- 상수(constant) : 한 번만 값을 저장 가능한 변수(변경 X)

- 리터럴(literal) : 그 자체로 값을 의미하는 것(기존 수학의 상수와 같은 뜻)

ex) int score = 100;

score = 200;        // 가능

final int MAX = 100;       // MAX는 상수

           MAX = 200;       // 에러

char ch = 'A';

String str = "abc";

 

8. 리터럴의 접두사와 접미사

종류 리터럴 접미사(대소문자 구별안함)
논리형(boolean) false, true 없음
정수형(byte, short, int, long) 123, 0b0101, 077, 0xFF, 100L L
실수형(float, double) 3.14, 3.0e8, 1.4f, 0x1.0p-1 f, d
문자형(char) 'A', '1', '\n' 없음
문자열(String) "ABC", "123", "A", "true 없음

boolean power = true;

char ch = 'A';

String str = "ABC";

byte b = 127;

byte b = 128; // 에러

int i = 100;        // 10진수

int oct = 0100;       // 8진수

int hex = 0x100;       //16진수

long 1 = 10_000_000_000L;       //100억 L 생략불가. _는 큰 숫자 알아보기 쉬우라고 넣는 것

long 1 = 100;       //L 생략 가능 OK

float f = 3.14f;      //f 생략 X(생략하면 double 타입이 된다)

double d = 3.14d; //d 생략 가능

10. -> 10.0 

.10 -> 0.10 (double)

10.f -> 10.0f (float)

1e3 -> 1000.0d (e=10의 n 제곱)

 

9. 변수와 리터럴의 타입 불일치

(1) 범위가 '변수 > 리터럴' 인 경우, 불일치해도 된다(그릇이 더 큰 경우)

int i = 'A';      // int > char

long 1 = 123;  // long > int

double d = 3.14f ; // double > float

(2) 범위가 '변수 < 리터럴' 인 경우, 에러(그릇이 더 작은 경우)

int i = 30_0000_0000 ; //int의 범위(±20억) 벗어남

long l = 3.14f ; // long < float

float f = 3.14; // float < double

(3) byte, short 변수에 int 리터럴 저장가능

byte b = 100; // 가능, byte의 범위(-128~127)에 속함

byte b = 128; // 에러. byte의 범위를 벗어남

 

예제

package sec01_datatype;

public class TypeCasting_1 {
	public static void main(String[] args) {
		// 명시적 형변환 or downCasting
		// 사이즈가 큰자료형에서 작은 자료형으로 변환될때 
		int value1 = (int)5.3;
		System.out.println(value1);	// 5
		long value2 = (long)10;
		System.out.println(value2);	// 10
		float value3 = (float)5.8;	// float라고 안 써주면 문제가 된다.
		System.out.println(value3); // 5.8
		double value4 = (double)16; //16.0
		System.out.println(value4);
		
		long value5 = 10L;
		long value6 = 10l; //소문자로 써도 되는데 1이랑 비슷해서 대문자로 쓰기 권장
		float value7 = 5.8F;
		float value8 = 5.8f; //대문자나 소문자나 똑같다
		
		System.out.println(value5);		// 10
		System.out.println(value6);		// 10
		System.out.println(value7);		// 5.8
		System.out.println(value8);		// 5.8
		
		// 묵시적 형변환 or UpCasting 작은사이즈타입에서 큰사이즈타입으로 변환시 
		float value9 = 3;	//int -> float
		long value10 = 5;	//int -> long
		double value11 = 7;
		System.out.println(value9);	// 3.0
		System.out.println(value10);	//5
		System.out.println(value11); // 7.0
		
		
		byte value12 = (byte)128;
		System.out.println(value12); // -128 .129:-127
		
		int value13 = (int)3.5;
		System.out.println(value13); // 3
		
		byte c = (byte)130;
		System.out.println(c);				//-126
		
		System.out.println((int)5.6+3.5);	//8.5
		System.out.println((int)5.6+(int)3.5);	//8
		System.out.println((int)(5.6+3.5));	//9
		System.out.println(7/4);			//1
		System.out.println((double)3/2);	//1.5
		System.out.println((double)(3/2));	//1.0
		}
}

 

728x90
반응형