자바 스터디

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

삶은겨란 2022. 5. 17. 16:45

목표

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

목차

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

2. 프리미티브 타입과 레퍼런스 타입

3. 리터럴

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

5. 변수의 스코프와 라이프타임

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

7. 1차 및 2차 배열 선언하기

8. 타입 추론, var


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

  타입 이름 값의 범위 기본 값 크기
정수형 byte -128~127 0 1byte
short -32,768~32,767 0 2byte
int -2,147,483,648~2,147,483,647 0 4byte
long -9,223,372,036,854,775,808~9,223,372,036,854,775,807 0L 8byte
실수형 float (3.4 X 10-38)~(3.4 X 1038) 의 근사값 0.0F 4byte
double (1.7 X 10-308)~(1.7 X 10308) 의 근사값 0.0 8byte
문자형 char 0~65,535 '\u0000' 2byte
논리형 boolean true, false false 1byte

 

 

2. 프리미티브 타입과 레퍼런스 타입

(1) 프리미티브 타입(primitive type, 기본형 타입)

  • 값이 저장된다.
  • 기본값이 있어 null이 없다.
더보기

Wrapper Class

프리미티브 타입에 null을 넣거나 객체로 다루기 위해 사용

기본형을 클래스로 감싼다.

인스턴스 생성으로 상속 및 재사용 가능

  • 값이 할당되면서 JVM의 Runtime Data 영역에서 스택에 값이 저장된다.
  • 컴파일 에러

(2) 레퍼런스 타입(reference type, 참조형 타입)

  • 프리미티브 타입을 제외한 나머지 자료형
  • 주소값이 저장된다.
  • null 초기화가 가능하다.
  • heap 영역에 저장된다.
  • 런타임 에러
  • new 키워드를 사용해 객체를 생성
  • 종류: Array, Enum, Class, Interface 등

 

 

3. 리터럴(Literal)

변하지 않는 데이터

더보기

상수(Constant) vs 리터럴(Literal)

상수는 변하지 않는 변수를 의미한다. 상수에는 숫자가 들어갈 수 있지만 객체도 들어갈 수 있다. (메모리 위치)

리터럴은 데이터 자체를 의미한다. (메모리 위치 안의 값)

 

 

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

// 변수 선언
Long a; // 타입 변수이름;
Long a, b, c; // 다중 변수 선언

// 변수 초기화
a = 1;

// 선언과 초기화
Long a = 1;

(1) 변수명 짓는 규칙

  • 첫 글자는 문자, $, _ 이어야 하고, 숫자는 불가능
  • 영어 대소문자 구분
  • 첫 문자는 소문자로 쓰고 뒤에 붙는 단어는 대문자(helloJava)
  • 길이 제한 없음
  • 예약어 사용 불가

 

 

5. 변수의 스코프와 라이프타임

스코프(scope): 변수의 사용 범위. 해당 변수가 접근할 수 있는 변수, 객체, 함수의 집합

생명주기(life cycle): 변수가 메모리에 있는 기간

  scope life cycle
지역 변수(local variable) 선언된 블록 내 { }
매개 변수(parameters) 메소드 내 메소드 호출~메소드 종료
인스턴스 변수(instance variable) 클래스 내, private가 아니면 참조 변수로 다른 클래스에서 사용 가능 개체 생성~객체를 참조하는 다른 변수가 없을 때
클래스 변수(class variable) 클래스 내, private가 아니면 다른 클래스에서 사용 가능 클래스 호출~자바 프로그램 끝

 

 

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

타입 변환: 변수나 상수의 타입을 다른 타입으로 변환(같은 타입끼리만 연산이 가능하기 때문에 변환을 한다.)

 

프리미티브 타입에서 캐스팅과 프로모션이 발생

(1) 프로모션(자동/묵시적 형 변환): 작은 데이터 타입 → 큰 데이터 타입

프로그램 실행 중 자동으로 변환

 

(2) 캐스팅(명시적 형 변환): 큰 데이터 타입 → 작은 데이터 타입

데이터 타입을 적어서 변환

// 프로모션
byte byteA = 1
int intA = byteA

// 캐스팅
int intA = 1
byte byteA = (byte)intA

 

 

7. 1차 및 2차 배열 선언하기

(1) 1차원 배열

// 배열 선언
int[] arr;
int arr[];


// 초기화
int arr[];
arr = new int[5]; // 0으로 초기화 된다.


// 선언 및 초기화
int arr[] = new int[5];
int arr[] = {1, 2, 3};
int arr[] = new int[] {1, 2, 3};

 

(2) 2차원 배열

// 2차원 배열 선언
int[][] arr;


// 초기화
int[][] arr;
arr = new int[1][3];


// 선언 및 초기화
int[][] arr = new int[1][3];
int[][] arr2 = {{1, 2, 3}, {4, 5, 6}};

 

 

8. 타입 추론, var

변수의 타입을 명시하지 않아도 컴파일러가 대입된 리터럴로 변수의 타입을 추론한다.

  • 지역변수이면서 선언과 동시에 초기화가 필수
  • null 값 사용 불가
  • java10 이상에서 지원
// 타입 명시
String str = "Hello Java";

// 타입 추론
var str = "Hello Java";