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

yunu·2022년 4월 9일
1
post-thumbnail

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

목표

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

학습할 것

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

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


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

프리미티브 타입(Primitive type)

  • 기본값이 있기 때문에 Null이 존재하지 않음, 만약 기본형 타입에 Null을 넣고 싶다면 래퍼(Wrapper) 클래스를 활용
  • 실제 값을 저장하는 공간으로 스택 메모리에 저장, 심볼릭 레퍼런스 X
  • 컴파일 시점에 타입의 범위를 벗어난 데이터로 초기화되려고 하면 컴파일 에러 발생
  • 자바의 특성에 의해 어떤 플랫폼에서든지 같은 메모리 크기가 할당

레퍼런스 타입(Reference type)

  • 프리미티브 타입을 제외한 모든 타입
  • 할당되는 메모리 크기 항상 4byte
  • 빈 객체를 의미하는 Null이 존재
  • 실제 값이 저장되지 않고 실제 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 스택 메모리에 저장되고 실제 값은 힙 메모리에 저장
  • 문법 상으로는 에러가 없지만 실행시켰을 대 에러가 나는 런타임 에러 발생 (ex. NullPointException)

리터럴

  • 변하지 않는 데이터 = 데이터 그 자체
  • 프리미티브 타입 + 문자열(String) 이므로 스택과 힙에 저장 = 정수형, 실수형, 논리형, 문자형, 문자열, null
  • 리터럴 타입 접미사(literal type suffix) : L or l -> long, F or f -> float, D or d -> double(생략가능), 0x -> 16진수, 0b -> 2진수
  • 타입 접미사를 통해 long형 변수에 int형 데이터가 범위에 맞게 변환, float과 double도 마찬가지
  • 객체 리터럴(불변 클래스) : 인스턴스 안의 값의 불변성이 보장된 객체, ex) Java.lang.String, java.awt.Color..
  • String은 리터럴를 이용하여 생성(String Contstant Pool) 또는 new 연산자를 이용하여 생성(Heap) -> 서로 다른 공간에 저장
  • String은 왜 불변일까?

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

(primitive type) (변수명); // 기본값으로 초기화
(primitive type) (변수명) = (primitive type data);
(reference type) (변수명) = new (reference type)(data);

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

  • 클래스 변수는 항상 인스턴스 변수보다 먼저 생성 및 초기화됨

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

  • 변환할 변수나 리터럴 앞에 타입을 괄호와 붙여주어 형변환
  • 프리미티브 변수는 boolean을 제외한 나머지 타입은 서로 형변환 가능
  • (A type) (변수) = (B type)
  • 자동 형변환(프로모션) : A type의 범위가 B type보다 클 경우 자동 형변환
  • 명시적 형변환(캐스팅) : A type의 범위가 B type보다 작은 경우 (A type) (변수) = (A type) (B type)처럼 명시적 형변환
  • 자동 형변환이 이루어지는 방향

1차 및 2차 배열 선언하기

// int형 1차원 배열
int[] array;
int[] array = new int[3];
array[0] = 1;
array[1] = 2;
array[2] = 3;
int[] array = new int[]{1,2,3};
int[] array = {1,2,3};

// int형 2차원 배열
int[][] array;
int[][] array = new int[3][3];
array[0][0] = 1;
array[0][1] = 2;
array[0][2] = 3;
int[][] array = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
int[][] array = {{1,2,3},{4,5,6},{7,8,9}};

타입 추론, var

  • 타입이 안 정해진 변수타입을 컴파일러에게 타입추론 책임을 위임, 자바 10부터 가능해짐
  • 지역변수이면서 선언과 동시에 초기화가 되어야 함, null로 초기화하면 작동하지 않음
  • 람다 표현식에선 사용할 수 없지만 함수형 인터페이스에는 가능, 자바 11부터는 람다 표현식에도 var 사용 가능해짐
  • 제네릭 타입은 Object 타입으로 정해짐

출처 :
https://gbsb.tistory.com/6
https://readystory.tistory.com/139
http://www.tcpschool.com/java/java_datatype_constant
https://2018-start.tistory.com/44
https://catsbi.oopy.io/6541026f-1e19-4117-8fef-aea145e4fc1b

profile
rip

0개의 댓글