본문 바로가기
자바/이것이 자바다

2. 변수와 타입

by 989898 2023. 11. 10.

2.1 변수선언

변수는 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름. 변수를 통해 프로그램은 메모리 번지에 값을 저장하고 읽을 수 있다.

 

변수 = 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름

 

자바의 변수는 다양한 타입의 값을 저장할 수 없다. 즉, 정수형 변수에는 정수값만 저장할 수 있고, 실수형 변수에는 실수 값만 저장할 수 있다.

 

정수형 변수  = 정수값 ( 하나의 값만 저장 가능)

실수형 변수  = 실수값 ( 하나의 값만 저장 가능)

 

변수를 사용하려면 변수 선언이 필요한데, 변수 선언은 어떤 타입의 데이터를 저장할 것인지 그리고 변수 이름이 무엇인지 결정하는 것이다.

 

                                       타입           이름

int              age   // 정수 (int) 값을 저장할 수 있는 age 변수 선언

double       value  // 실수 (double) 값을 저장할 수 있는 value 변수 선언

 

변수 이름은 첫 번째 글자가 문자여야 하고, 중간 부터는 문자, 숫자, $, _를 포함할 수 있다. 또한, 첫 문자를 소문자로 시작하되 캐멀 스타일로 작성하는 것이 관례임.

 캐멀(camel) 스타일

 낙타의 등처럼 대소문자가 섞여 있도록 작성하는 스타일을 말함.
 자바 소스 파일명과 변수명을 작성할 때 관례적으로 사용.

 1. 자바 소스 파일명(클래스명)은 대문자로 시작하는 것이 관례

     Week.java
     MemberGrade.java
     ProductKind.java

 2. 변수명은 소문자로 시작하는 것이 관례

     score
     mathScore
     sportsCar

 

변수가 선언되었다면 값을 저장할 수 있는데, 이때 대입 연산자인 =를 사용한다. 자바에서는 우측 값을 좌측 변수에 대입하는 연산자로 사용함.

 

int score; // 변수 선언

score = 90; // 값 대입

 

변수 선언은 저장되는 값의 타입과 이름만 결정한 것이지, 아직 메모리에 할당된 것은 아니다. 변수에 최초로 값이 대입될 때 메모리에 할당되고, 해당 메모리에 값이 저장된다.

 

변수에 최초로 값을 대입하는 행위를 변수 초기화라고 하고, 이때의 값을 초기값이라고 한다. 초기 값은 다음과 같이 변수를 선언함과 동시에 대입할 수도 있다.

 

int score = 90; // 변수 초기화

 

초기화되지 않은 변수는 아직 메모리에 할당되지 않았기 때문에 변수를 통해 메모리 값을 읽을 수 없다. 따라서 다음은 잘못된 코딩이다.

 

int value; // 변수 value 선언

int result = value + 10; // 변수 value 값을 읽고 10을 더해서 변수 result에 저장

 

변수 value가 선언되었지만, 초기화되지 않았기 때문에 value + 10에서 value 변수값은 읽어올 수 없다. 따라서 위 코드는 다음과 같이 변경해야 한다.

 

int value = 30; // 변수 valuer 30으로 초기화

int result = value + 10; // 변수 value (30)값을 읽고 10을 더해서 변수 result에 저장

 

 

초기화 되지 않은 변수를 연산식에 사용할 경우 컴파일 에러(The local variable value may not have been initialized)가 발생하는 것을 보여준다.

package ch02.sec01;

public class VariableInitializationExample {

	public static void main(String[] args) {
		
		int value;
		
		int result = value + 10; // 빨간 줄은 컴파일 오류를 표시한 것임.
		
		System.out.println(result);
	}

}

 

package ch02.sec01;

public class VariableUseExample {

	public static void main(String[] args) {
		int hour = 3;
		int minute = 5;
		System.out.println(hour + "시간 " + minute + "분");
		
		int totalMinute = (hour*60)+minute;
		System.out.println("총 "+totalMinute+"분");

	}

}
실행결과
3시간 5분 
총 185분

 

변수는 또 다른 변수에 대입되어 메모리 간에 값을 복사할 수 있다. 다음 코드는 변수 x값을 변수 y값으로 복사한다.

int x = 10;
int y = x;

 

package ch02.sec01;

public class VariableExchangeExample {

	public static void main(String[] args) {
		int x = 3;
		int y = 5;
		System.out.println("x:" + x + ", y:" + y);
		
		int temp = x;
		x = y;
		y = temp;
		System.out.println("x:" + x + ", y:" + y);
	}

}
실행 결과
x: 3, y: 5
x: 5, y: 3

 


 

2.2 정수 타입

 

변수는 선언될 때의 타입에 따라 저장할 수 있는 값의 종류와 허용 범위가 달라진다. 자바는 정수, 실수, 논리값을 저장할 수 있는 기본 타입 8개를 다음과 같이 제공한다.

값의 분류 기본 타입
정수 byte, char, short, int, lon
실수 float, double
논리 (true, false) boolean

 

정수 타입은 총 5개로, 다음과 같이 메모리 할당 크기와 저장되는 값의 범위를 가지고 있다.

타입 메모리 크기 저장되는 값의 허용 범위
byte 1byte 8bit   -128 ~ 128
short 2byte 16bit   -32,768 ~ 32,768
char 2byte 16bit   0 ~ 65535 (유니코드)
int 4byte 32bit   -2,147,483,648 ~
2,147,483,647
long 8byte 64bit   -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

 

1byte = 8bit, bit는 0과 1이 저장되는 단위를 말함.

 

각 타입에 저장되는 값의 허용 범위를 모두 외울 필요는 없지만 메모리 할당 크기는 알고 있는 것이 좋다.

종류 byte short int long
크기 (단위 bit) 8 16 32 64

 

다음 예제는 byte 타입 변수에 허용 범위를 초과한 값을 대입했을 경우 컴파일 오류가 발생하는 것을 보여준다.

package ch02.sec02;

public class ByteExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		byte var1 = -128;
		byte var2 = -30;
		byte var3 = 0;
		byte var4 = 30;
		byte var5 = 127;
		byte var6 = 128; // 컴파일 에러(Type mismatch: cannot convert from int to byte

		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var3);
		System.out.println(var4);
		System.out.println(var5);
		System.out.println(var6);

	}

}

 

long 타입은 수치가 큰 데이터를 다루는 프로그램에서 사용 됨. 은행이나 과학 분야에서 사용되는 프로그램들임. 기본적으로 컴파일러는 정수 리터럴을 int 타입 값으로 간주하기 때문에, int 타입의 허용 범위 ( -2,147,483,648 ~  -2,147,483,647)를 초과하는 리터럴(코드에서 프로그래머가 직접 입력한 값을 리터럴이라고 함.)은 뒤에 소문자 'l' 이나 대문자 'L'을 붙여 long 타입 값임을 컴파일러에게 알려줘야 한다.

package ch02.sec02;

public class LongExample {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		long var1 = 10;
		long var2 = 20L;
		long var3 = 1000000000000; // 컴파일러는 int로 간주하기 때문에 에러 발생
		long var4 = 1000000000000L;

		System.out.println(var1);
		System.out.println(var2);
		System.out.println(var4);

	}

}

 


2.3 문자 타입

하나의 문자를 작은 따옴표(')로 감싼 것을 문자 리터럴이라고 한다. 문자 리터럴은 유니코드로 변환 되어 저장하는데, 유니코드는 세계 각국의 문자를 0~65535 숫자로 매핑한 국제 표준 규약이다. 자바는 이러한 유니코드를 저장할 수 있도록 char 타입을 제공한다.

 

'자바 > 이것이 자바다' 카테고리의 다른 글

7. 상속  (1) 2023.11.14
6. 클래스  (0) 2023.11.12
5. 참조 타입  (0) 2023.11.10
4. 조건문과 반복문  (0) 2023.11.10
3. 연산자  (0) 2023.11.10