본문 바로가기
스터디/2209_자바의정석

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

by Jeong.dev 2022. 9. 15.

📌 프리미티브 타입(기본형)과 레퍼런스 타입(참조형)

- 변수란 : 하나의 값을 저장할 수 있는 기억공간

- 기본형 : 총 8개, 실제 값을 저장

- 참조형 : 기본형을 제외한 나머지, 객체의 주소를 저장

 

 

 

📌 프리미티브 타입 종류와 값의 범위 그리고 기본 값

종류 값의 범위 기본값
논리형 boolean true, false false
문자형 char 0 ~ 2^16 -1 (0~65535) ‘\u0000'
숫자형 정수형 byte -2^7 ~ 2^7-1 (-128~127) 0
short -2^15 ~ 2^15-1 0
int -2^31 ~ 2^31-1 0
long -2^63 ~ 2^63-1 0L
실수형 float 1.4*10^-45 ~ 3.4*10^38 0.0f
double 4.9*10^-324 ~ 1.8*10^308 0.0d 또는 0.0

- 문자형 (char) : 변수 당 하나의 문자만 저장

- 정수형의 범위 : -2(^n-1) ~ 2(^n-1) -1 (*n은 bit 수)

 

 

 

📌 리터럴

- 변수 : 하나의 값을 저장하기 위한 공간

- 상수 : 값을 한번만 저장할 수 있는 공간

- 리터럴 : 그 자체로 값을 의미하는 것

 

* 변수는 하나의 값을 저장하는 공간이고, 상수는 그 값을 한 번 저장하면 변경할 수 없는 공간이다.

우리가 기존에 알고 있던 '상수'의 개념을 (12, 3.14 등)을 프로그래밍에서는 리터럴이라는 용어를 사용한다.

 

 

 

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

// 변수 선언
int  age; // age 이름의 변수 선언

// 변수 초기화
int age = 25;

 

변수 선언

- 타입 변수명;

- 변수 선언하면, 메모리의 빈 공간에 '변수타입' 크기의 저장공간 확보되고, '변수명'을 통해 사용할 수 있다.

 

변수 초기화

- 변수를 사용하기 전 변수에 처음으로 값을 저장하는 것

- 전역 변수(인스턴스 변수, 클래스 변수)는 초기화하지 않을 경우, 기본값으로 자동 초기화된다.

  지역변수는 자동 초기화되지 않기 때문에 사용하기 전 반드시 초기화해야 한다.

 

 

 

📌 변수의 스코프와 라이프타임

- 변수의 선언 위치가 변수의 종류와 범위(scope)를 결정한다.

class Variables{
	int iv;		// 인스턴스변수
    static int cv;	// 클래스변수(static 변수)
    
    static void method(){
    	int lv;		// 지역변수
    }
}

 

변수의 종류 스코프 라이프타임 선언위치
클래스변수 클래스 전체 클래스가 메모리에 올라갈 때 생성,
프로그램 종료될 때 소멸
클래스 영역
인스턴스변수 static method 제외한 클래스 전체 인스턴스 생성 할 때 생성되고,
참조변수가 없을 때 GC에 의해 자동 제거
지역변수 선언된 메서드 내 변수 선언문 수행 시 생성,
메서드 종료 또는 블럭({}) 벗어나면 소멸
메서드 영역

 

 

 

📌 타입 변환, 캐스팅 그리고 타입 프로모션

캐스팅(형변환)

- 값의 타입을 다른 타입으로 변환하는 것

- boolean을 제외한 7개의 기본형은 서로 형변환 가능

- btye 크기가 큰 타입에서 작은 타입으로 변환할 경우 값 손실 발생할 수 있음.

- 방법 : (변경할 타입) 피연산자

double d = 85.4;
int score = (int)d; // scorre = 85

 

타입 프로모션(자동 형변환)

- btye 크기가 작은 타입에서 큰 타입으로 변환할 경우 형변환 생략 가능하다.(컴파일러가 자동으로 해줌)

- 자동 형변환의 기준 : 기존의 값을 최대한 보존 할 수 있은 타입으로 형변환

기본형의 자동 형변환이 가능한 방향

int d = 85;
double score = d; // scorre = 85.0

 

 

 

📌 1차 및 2차 배열 선언하기

- 배열이란 : 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것

- 배열 선언 : 생성된 배열 다루는 데 사용할 참조변수 선언

- 배열 생성 : 값을 저장할 수 있는 공간  생성

- 배열 초기화 : 생성된 배열에 처음으로 값을 저장하는 것

 

1차 배열

// 1차 배열 선언
int score[]; // int[] score;과 동일

// 1차 배열 생성
score = new int[3]; // int score[] = new int[3]; 선언과 생성 동시에 가능

// 1차 배열 초기화
score[0] = 100;
score[1] = 200;
score[2] = 300;

int score[] = {100, 200, 300}; // ok
int score[] = new int[]{100, 200, 300}; // ok
int score[];
score[] = new int[]{100, 200, 300}; // ok
int score[];
score[] = {100, 200, 300}; // error

 

2차 배열

// 2차 배열 선언
int score[][]; // int[][] score;과 동일

// 2차 배열 생성
score = new int[3][2]; // 3행 2열의 2차원 배열 생성

// int score[][] = new int[3][2]; 선언과 생성 동시에 가능

// 2차 배열 초기화
score[0][0] = 1;
score[0][1] = 2;
score[1][0] = 3;
score[1][1] = 4;
score[2][0] = 5;
score[2][1] = 6;

// 선언, 생성, 초기화 동시에
int score[][] = new int[][]{ {1, 2}, {3, 4}, {5, 6} }; // ok
int score[][] = 
    {
    	{1, 2},
        {3, 4},
        {5, 6}
    };

 

 

 

📌 타입 추론, var

- 타입추론(type-inference)

  : 변수의 타입을 적지 않아도, 컴파일러가 알아서 변수의 타입을 대입된 리터럴로 추론하는 것

- 자바 10부터 가능

- var는 초기화 값이 있는 지역변수로만 선언이 가능하다.(멤버변수, 메소드의 매개값, 리턴 타입으로 사용 불가)

- var타입 변수에 null 값 대입 안됨

var no1 = "hello"; // String으로 추론
var no2 = 2; // int로 추론
var no3 = List.of(1,2,3) // List로 추론

 

 

 

[참고]

- 자바의정석

- https://velog.io/@jaden_94/2%EC%A3%BC%EC%B0%A8-%ED%95%AD%ED%95%B4%EC%9D%BC%EC%A7%80

- https://catch-me-java.tistory.com/19 

- https://tgyun615.com/165

댓글