본문 바로가기

🌈 Java/Back to Basic 101

2주차 : 자바 데이터 타입, 변수 그리고 배열

🌈 목표

자바의 프리미티브 타입, 변수 그리고 배열을 사용하는 방법을 익힙니다.

🌈 학습할 것

  • 프리미티브 타입 종류와 값의 범위 그리고 기본 값
  • 프리미티브 타입과 레퍼런스 타입
  • 리터럴
  • 변수 선언 및 초기화하는 방법
  • 변수의 스코프와 라이프타임
  • 타입 변환, 캐스팅 그리고 타입 프로모션
  • 1차 및 2차 배열 선언하기
  • 타입 추론, var

✔️ Primitive Type & Reference Type

 

Primitive Type (기본 자료형) - 총 8 개  

  • 정수형 : byte, short, int long, char

  • 소수형 : float , double

  • boolean 

구분 기본 자료형 메모리 크기 기본 값 표현 범위
논리형 boolean 1 byte false true, false
정수형 byte 1 byte 0 -128 ~ 127
short 2 byte 0 -32,768 ~ 32767
int 4 byte 0 -2^{31} ~ 2^{31}-1
long 8 byte 0L -2^{63} ~ 2^{63}-1
실수형 float 4 byte 0.0F

single-precision 32-bit

double 8 byte 0.0

double-precision 64-bit

문자형 char 2 byte (unicode) '\u000'

'\u0000' ~ '\uffff'

 

  • Byte ( = 8bit) 의 구조 

 

Reference Type (참조 자료형) 

  • class, interface, enum, array, String type
  • 종류는 무한하다.
  • 실제 값이 지정되어 있는 곳의 위치를 주소 값
    • JVM runtime data area 중 가비지 컬렉터 heap 영역에 할당되는데, 참조 변수는 heap 영역에 할당된 주소값 저장 (실제 값이 아니다)

✔️ 리터럴

: 실제로 저장되는 값 그 자체로 메모리에 저장되어 변하지 않는 고정된 값

 - 컴파일 타임에 프로그램 안에 정의되어 있는 그 자체로 해석되는 값

 

constant value (상수) :  변하지 않는 변수 

  • 변수의 종류 :
    • local variable (지역변수)
    • parameter (매개변수)
    • instance variable (인스턴스) - static X
    • class variable - static 

✔️  변수 선언 및 초기화하는 방법

public class Variable_init{
	public static void main(String[] args){
    	// 정수형 변수 선언
    	int value; 
        // 여러개 한번에 선언 
        int value1, value2,value3;
        
        // 선언과 동시에 초기화
        int value4 = 10;
        
        // 선언 다음 초기화
        int value5;
        value5 = 10;
    }
}
  • Declaration : 변수 선언/ 저장공간을 확보 
  • Initialization : 변수 초기화 / 저장공간에 원하는 값을 저장 

✔️ 변수의 스코프와 라이프타임 

Variable Scope ?

  • 해당 변수를 사용할수 있는 영역 범위

Lifetime 

  • 해당 변수가 메모리에 언제까지 살아있는지 의미
변수 특징 scope lifetime
local variable instance, class가 아닌 모든 변수
중괄호 안에 선언된 변수 
변수 선언 block 내부 (메서드) 지역변수를 선언한 중괄호 내에서만 유효
instance variable 클래스 안 선언, 어떤 메서드나 블락 안에 선언되지 않으며 static X static method 제외 클래스 전체 객체가 생성될때 생명, 객체를 참조하고 있는 다른 객체가 없으면 소멸 / 인스턴스화한 객체가 메모리에서 사라질 때 까지
class variable 클래스 안 선언, 어떤 메서드나 블락 안에 선언되지 않은 static 선언 변수 클래스 전체 클래스 처음 호출시 생명, 프로그램 종료 시 소멸  
public class Scope{
	static final int DAYS_IN_WEEK = 7; // constant variable
	int instanceVariable;
    static int classVariable;
    
	public static void main(String[] args){
    	int localVariable;
    }
}	

 

✔️  타입 변환 - 캐스팅 & 타입 프로모션

Type Casting

: 크기가 더 큰 자료형을 크기가 더 작은 자료형에 대입하는 것 의미 

  - 데이터 크기가 더 크기 때문에 변환과정에서 데이터 손실이나 변형 올 수있다. 

 

Type Promotion

: 타입 캐스팅 반대로 크기가 더 작은 자료형을 더 큰 자료형에 대입하는것 

 - 데이터 손실이나, 변형이 오지 않으며 자동으로 변환 가능

 - 자동으로 byte, short, char 연산을 int 로 변환 

public class CastingType{
	public static void main(String[] args){
    	CastingType operator = new CastingType();
        operator.casting();
    }
    
    public void casting() {
    	byte byteVal = 127;
        // Type Promotion : byte -> short
        short shortVal = byteVal;
        
        shortVal++;
        System.out.println(shortVal); //128
        
        // Type Casting : short -> byte
        byteVal = (byte)shortVal;
        System.out.println(byteVal); //-128
    }
}

short -> byte 형 변환

 

✔️  1차 및 2차 배열 선언하기

Array?

배열이란 동일한 타입의 데이터를 연속된 공간에 저장하기 위한 자료구조

 

 - 1 차 배열 

int[] numArray = new int[5];

int[] numArray = {1,3,8,23,99};

 

 

 

 

 

- 2차 배열 

// 선언 : new int[세로][가로]

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

 

 ** 쓰이는 경우 :

  - dynamic programming

  - 그래프 > 인접 행렬 

 

 

 

 

 

 

✔️ 타입 추론, var

Type Inference 

: 값을 보고 컴파일러가 데이터 타입이 무엇인지 추론한다. 

 - int, long, boolean, char 등의 데이터 타입을 명시하지 않고 사용 

 

  • Generic 에서 타입 추론 사용
public class Generic{
	public static void main(String[] agrs){
    	HashMap<Integer, Integer> hp = new HashMap<>();
    }
}

 : 객체를 할당할때 HashMap<Integer, Integer> 을 사용하지 않아도 변수에 담길 데이터 타입을 추론해 낼수 있다. 

 

  • Java 10 부터 var 구문 사용 
var list = {1,2,3,4,5};
for(var index : list) {
	System.out.println(list[index]);
}

 : var 키워드를 이용한다고 해도 Java 는 여전히 정적 언어이며 지역 변수 타입을 추론하기에 충분한 정보가 없다면 컴파일 오류가 발생 할수 있다.