자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.
아래의 표를 이용해서 각 타입의 명칭, 크기, 기본값, 범위를 알아보자.
기본값이 있는 자료형으로 null이 존재하지 않는다. null 값을 가질려면 래퍼 클래스를 이용해야한다.
총 8가지의 기본형 타입이 존재한다.
기본형 타입은 스택(Stack)
메모리에 그 값이 저장된다.
각 타입은 할당되는 메모리 크기가 있는데 그에 따라 값의 범위가 정해진다.
기본형 타입을 제외한 타입들이 모두 참조형 타입이다.
값을 할당하지 않으면 기본값이 존재하지 않아 null이 할당된다.
힙 영역에 참조형 타입의 변수들이 생성된다. 이 변수들은 실제 데이터가 아니다. 실제 데이터는 힙 영역에 생성되고 그 주소를 참조하는 변수이다.
ex) 배열, 클래스등이 있다.
리터럴은 데이터 그 자체를 뜻한다. 그리고 변수의 값이 변하지 않는 데이터를 의미한다.
int num = 10;
num 변수에 할당된 10이 리터럴이다.
10이 리터럴인건 알겠다. 그럼 num은? 변수와 상수에 대해서도 알아보겠다.
우선 num은 변수이다. 변수는 그 값이 계속 변할 수 있다. 하지만 상수는
final이라는 예약어를 붙여서 그 값이 절대 불변하게 사용할 수 있다.
final int fi = 3.14;
변수의 선언은 자료형 변수명;
과 같은 형식으로 선언하면 된다.
//변수의 선언
int i;
double d;
char c;
초기화는 변수의 값을 할당하는 것을 말한다. 각 자료형을 초기화 해보자
정수 리터럴은 int타입이 기본 값으로 사용되기에 long타입은 L을 붙여준다.
int i = 10;
long l = 100L;
실수 리터럴은 double 타입이 기본 값으로 사용되기에 float에는 F를 붙여준다. double 타입에도 D를 붙여줄 수 있다.
double d1 = 1.01;
double d2 = 1.02D;
float f = 1.03F;
true 또는 false 또는 조건식으로 값을 할당할 수 있다.
boolean b1 = true;
boolean b2 = false;
boolean b3 = 4 < 9;
작은 따옴표로 문자를 표현하거나 '\u' 다음에 유니코드 값을 입력할 수 있다.
char c1 = 'A';
char c2 = '\uac00'; //'가'라는 문자 표현
큰 따옴표를 이용하여 할당할 수 있다.
String str = "String";
스코프는 영역을 의미한다.
Java에서 사용하는 변수들은 모두 사용 가능한 범위가 지정된다.
종류에 따른 변수의 스코프를 알아보자
public class ValableScope {
static int staticVal = 7; // 스태틱 변수
int globalScope = 10; // 전역변수, 인스턴스 변수
public void scopeTest(int value) {
int localScope = 10; // 지역변수
System.outprintln(localScope); // 오류 X
}
public static void main(String[] args) {
System.outprintln(globalScope); // 오류발생
System.outprintln(localScope); // 오류발생
System.outprintln(staticVal); // 사용가능
}
}
변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 말한다.
int i = 100;
long l = i;
float f = l;
자동으로 형변환이 되고 컴파일 에러가 나지 않는다.
long l = 1000L;
int a = (int) l;
배열
은 선형 자료구조 중 하나로 동일한 타입의 데이터를 연속적으로 저장하여 하나의 변수로 묶어서 관리하기 위한 자료구조이다.
//크기 할당 & 초기화 없이 배열 참조변수만 선언
int[] arr;
int arr[];
// 선언과 동시에 배열 크기 할당
int[] arr = new int[5];
String[] arr = new String[5];
// 기존 배열의 참조 변수에 초기화 할당하기
int[] arr;
arr = new int[5]; //5의 크기를 가지고 초기값 0으로 채워진 배열 생성
// 선언과 동시에 배열의 크기 지정 및 값 초기화
int[] arr = {1,2,3,4,5};
int[] arr = new int[] {1,3,5,2,4};
int[] odds = {1,3,5,7,9};
String[] weeks = {"월","화","수","목","금","토","일"};
// 2차원 배열 선언
int[][] arr = new int[4][3]; //3의 크기의 배열을 4개 가질 수 있는 2차원 배열 할당
int[][] arr9 = { {2, 5, 3}, {4, 4, 1}, {1, 7, 3}, {3, 4, 5}};
//arr[0] >> {2, 5, 3};
//arr[1] >> {4, 4, 1};
//arr[2] >> {1, 7, 3};
//arr[3] >> {3, 4, 5};
들어가기 앞서 해당 기능은 Java 10버전부터 사용가능한 방법이다.
변수의 타입을 명시적으로 작성하지 않아도 컴파일러가 컴파일시 리터럴 값을
확인하여 해당 데이터에 맞는 타입을 추론해주는 것을 말한다.
public static void main(String[] args) {
// String str = "Hello"; 기존 선언 방법
var str = "Hello";
// str = 10; String으로 추론 이미됨 불가능!
if (str instanceof String) {
System.out.println("String입니다.");
}
}
var는 지역변수, 메소드 파라미터, 리턴 타입으로 사용 못하고 변수 선언시 초기화 값이 있을 경우 사용 가능하다.
위에 코드처럼 str이 String으로 타입 추론이 되고 나면 다른 자료형의 데이터를 할당하는 것은 불가능하다.
사실 다른 자료형을 직접 써주지 굳이 사용할 필요가 있을까싶다...