개발저장소

[Java] 변수와 타입 본문

Programming Language/Java

[Java] 변수와 타입

개발소 2024. 3. 29. 22:59

1. 변수 (Variable)

변수는 하나의 값을 저장할 수 있는 메모리 주소에 붙여진 이름이다. 이름처럼 가변적으로 값을 담는 저장 공간이다.

 

자바의 변수는 한 가지 타입만 저장할 수 있다. 그리고 변수를 사용하기 위해서는 변수 선언이 필요하다.

변수 선언은 변수에 저장될 데이터 타입과 변수의 이름을 정하는 것이다.

 

int	age;
double	value;
타입	  이름

 

변수가 선언되었다면 대입 연산자(=)를 사용해 값을 저장할 수 있다. 오른쪽의 값을 왼쪽 변수에 대입한다.

변수에 최초로 값을 대입하는 것을 초기화라고 하고, 이때 값을 초기값이라고 한다. 초기화는 선언과 동시에 가능하다.

 

변수는 초기화될 때 메모리에 할당되고, 값이 저장된다. 즉, 변수를 사용하기 위해서는 선언 후 꼭 초기화가 필요하다.

 

 

2. 타입 (Type)

자바의 데이터 타입은 크게 기본 타입(primitive type)참조 타입(reference type)으로 분류된다.

 

기본 타입은 다음과 같다.

  • 정수형: btye, short, int, long
  • 실수형: float, double
  • 논리형: boolean
  • 문자형: char

참조 타입은 기본 타입을 제외한 모든 타입이다. 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입이 있다.

기본 타입과 참조 타입의 다른 점은 변수에 저장되는 값이다. 기본 타입 변수는 값 자체를 저장하지만, 참조 타입 변수는 객체가 생성된 메모리 주소를 저장한다.

 

변수는 일단 스택 영역에 생성된다. 기본 타입 변수인 price와 age는 값을 저장하고 있지만 참조 타입 변수인 name과 hobby는 힙 영역의 String 객체의 주소를 저장하고 있고, 이 주소를 통해 참조한다.

 

빈 객체를 의미하는 null 값도 가질 수 있다. 만약 어떤 변수가 한 객체를 참조하고 있다가 null로 바뀐다면, 참조되었던 객체는 더 이상 쓸모가 없어진다. 이 객체는 자바의 가비지 컬렉터가 자동으로 제거한다.

 

 

문자열(String) 타입

자바의 문자열은 String 객체로 생성된다. String은 new 연산자와 문자열 리터럴 두 가지 방법으로 선언할 수 있다.

String str1 = new String("자바");
String str2 = new String("자바");
String str3 = "자바";
String str4 = "자바";

 

new 연산자를 이용해서 String 객체를 생성하고 대입한 str1과 str2, 문자열 리터럴을 이용해서 선언한 str3와 str4가 있다.

new 연산자를 이용한 경우, 문자열이 같더라도 힙 영역의 다른 위치에 저장된다. 그렇게 때문에 str1과 str2는 다른 문자열이다.

 

하지만 문자열 리터럴을 이용한 경우, 문자열이 동일하다면 String 객체를 공유하도록 설계되어 있다. 힙 메모리 영역 내에 위치한 문자열 상수 풀(String Constant Pool)이라는 특수한 공간에 저장되어 문자열 리터럴이 중복해서 생성될 경우 문자열이 문자열 상수 풀에 이미 존재하는지 확인하고, 존재한다면 기존에 생성된 문자열을 가리키도록 한다.

 

그렇기 때문에 단순히 문자열 값만 비교하기 위해서는 == 연산자보단 String 객체의 equals() 메서드를 사용하는 것이 좋다.

 

 

3. 타입 변환

자바에는 자동 타입 변환(promotion)강제 타입 변환(casting)이 존재한다.

 

자동 타입 변환(promotion)

값의 허용 범위가 작은 타입이 큰 타입으로 대입될 때 자동으로 발생한다.

 

※ 기본 타입 크기 순서

byte (1) < short, char (2) < int (4) < long (8) < float (4) < double (8)

 

강제 타입 변환(casting)

값의 허용 범위가 큰 타입을 작은 타입으로 쪼개어 저장하는 것을 말한다.

연산자로 괄호 ()를 사용하고 괄호 안의 타입이 작은 허용 범위의 타입이다.

int intValue = 65;
char charValue = (char) intValue;
System.out.println(charValue); // 유니코드 65에 해당하는'A' 출력

double doubleValue = 3.14;
int intValue = (int) doubleValue; // 정수부분인 3만 저장

 

 

문자열 ↔ 기본 타입 변환

 

문자열을 기본 타입으로 변환하는 방법은 다음과 같다. 비슷한 방법으로 모든 기본 타입으로 변환이 가능하다.

  • String → int :  Integer.parseInt(str)
  • String → double :  Double.parseDouble(str)
  • String → boolean :  Boolean.parseBoolean(str)

기본 타입을 문자열로 변환하는 방법은 String.valueOf() 메서드를 사용하면 된다.

 

 

4. 배열(Array) 타입

배열은 연속된 공간에 값을 나열시키고, 각 값에 인덱스를 부여한 자료구조이다.배열은 같은 타입의 값만 관리하고, 배열의 길이는 생성과 동시에 고정된다.

// 값 목록으로 배열 선언
int[] intArray = { 1, 2, 3, 4, 5};

// new 연산자로 배열 생성
int[] newArray = new int[5];

// 배열의 길이
intArray.length;

 

다차원 배열이나 객체를 참조하는 배열 또한 비슷한 방식으로 사용할 수 있다. 배열 속에 배열이 존재한다고 생각하면 쉽게 이해할 수 있다.

int[][] intArray = new int[3][4];

intArray[0][0] = 0;
intArray[0][1] = 1;
intArray[0][2] = 2;
intArray[0][3] = 3;

intArray[1][0] = 4;
intArray[1][1] = 5;
intArray[1][2] = 6;
intArray[1][3] = 7;

intArray[2][0] = 8;
intArray[2][1] = 9;
intArray[2][2] = 10;
intArray[2][3] = 11;

 

 

5. 열거(Enum) 타입

한정된 값을 가지는 타입을 열거 타입이라고 한다.

7개의 요일, 사계절, 12개월 등을 예로 들 수 있다.

public enum Week {
	MONDAY,
	TUESDAY,
	WEDNESDAY,
	THURSDAY,
	FRIDAY,
	SATURDAY,
	SUNDAY
}

// 선언 방법
Week today = Week.SUNDAY;
Week birthday = null;

 

'Programming Language > Java' 카테고리의 다른 글

[Java] 클래스 - 2  (0) 2024.04.30
[Java] 클래스 - 1  (0) 2024.04.26
[Java] 제어문  (0) 2024.04.10
[Java] 연산자  (0) 2024.04.10
[Java] Java란?  (0) 2024.01.22