삽질저장소

자바 데이터 타입, 변수 그리고 배열

2020-12-26whiteship-live-study

whiteship/live-study 2주차 정리

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

  • 프리미티브(Primitive) 타입: 기본형이라고도 하며, 논리형(boolean), 문자형(char), 정수형(byte, short, int, long), 실수형(float, double) 모두 8개의 타입이 있다.
  • 기본형 크기(byte) 저장 가능한 범위 기본값
    boolean 1 false,true false
    char 2 ‘\u0000’ ~ ‘\uffff’ (0 ~ 65535) ‘\u0000’
    byte 1 -128 ~ 127 0
    short 2 -32,768 ~ 32767 0
    int 4 -2,147,483,648 ~ 2,147,483,647 0
    long 8 -9,223,372,036,854,775,828 ~ 9,223,372,036,854,775,807 0L
    float 4 1.4E-45 ~ 3.4E38 (1.4 x 10^-45 ~ 3.4 x 10^38) 0F
    double 8 4.9E-324 ~ 1.8E308 (4.9 x 10^-324 ~ 1.8 x 10^308) 0

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

  • 레퍼런스(reference) 타입: 객체의 번지를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입을 말한다.
  • 프리미티브 타입은 크기가 정해져 있고 실제 값을 저장하는 반면, 레퍼런스 타입은 크기가 정해져 있지 않고 값이 저장되어 있는 주소를 가진다.
  • 프리미티브 타입은 스택 영역에 생성이 되고, 레퍼런스 타입은 힙 영역에 생성된다.
  • 레퍼런스 타입은 주소를 참조하기 때문에, 해당 레퍼런스 타입 변수의 값이 바뀌면 그 레퍼런스 타입을 참조하는 변수의 값또한 바뀐다. preference-type
  • 비교 연산에서 == 는 메모리값을 비교하는 것이며, equals 는 값 자체를 비교하는 것이다. 어떠한 클래스를 equals 로 비교할 때는 그 클래스에서 equals 를 오버라이드해서 구현해야 한다.

3. 리터럴

  • 리터럴: 그 자체로 값을 의미하는 것
  • 종류 리터럴
    논리형 true, false
    정수형 123, 100L, 0xff …
    실수형 3.14, 3.34f …
    문자형 ‘A’, ‘1’ …
    문자열형 “ABC”, “123” …
    기타 리터럴 null, _

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

  • 변수 선언: 데이터를 저장하기 위해 메모리를 할당하는 것

    int number;
    String text;
  • 초기화: 선언한 변수에 값을 넣는 것

    number = 10;
    text = "hello";
  • 선언과 동시에 초기화도 가능하다.

    int number = 10;
    String text = "hello";

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

  • 변수의 스코프란 변수에 대한 접근과 존재할 수 있는 영역을 의미하며, 자바에서 스코프에 따른 변수의 종류에는 클래스변수(static 변수), 인스턴스 변수, 지역변수 3가지로 나눌 수 있다.
  • 클래스 변수는 인스턴스 분수에 static 키워드를 붙여준 변수로, 클래스가 로딩 될 때 한번만 생성된다.

    • 종류 선언 위치 초기화 시점 변수의 스코프
      클래스변수 클래스 영역 클래스가 처음 로딩될 때 클래스 전역
      인스턴스 변수 클래스 영역 인스턴스가 생성될 때 각각의 인스턴스
      지역변수 메소드 영역 메소드 영역 변수 선언문이 수행됐을 때
  • 각 변수들의 라이프타임

    • 종류 라이프타입
      클래스 변수 프로그램 종료시까지
      인스턴스 변수 객체가 메모리에 존재하는 동안
      지역 변수 메소드 수행 완료시까지

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

  • 형변환 : 변수나 리터럴의 타입을 다른 타입으로 변환하는 것으로, 변수나 리터럴 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주면 된다.
  • 프리미티브 타입에서 boolean 을 제외한 나머지 타입들은 서로 형변환이 가능하다.

    • 변환 코드 결과
      int -> char char c = (char)65; ‘A’
      char -> int int n = ‘A’; 65
      float -> int int a = (int)1.4f; 1
      int -> float float f = 20; 20.0
  • 형변환의 종류에는 큰 메모리의 타입을 작은 타입으로 변환하는 캐스팅(강제 형변환), 작은 메모리 타입에서 큰 타입으로 변환하는 타입 프로모션(자동 형변환) 이 있다.
  • 큰 메모리 타입을 작은 타입으로 변환할 때는 값 손실이 발생할 수도 있다. 아래와 같이 float 형을 int 형으로 변환시 소수점 아래의 값이 손실된다.

    int number = (int)3.131f;

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

  • 배열 : 같은 타입의 여러 변수를 하나의 묶음으로 선언한 것.
  • 1차원 배열 선언과 초기화

    int[] score;
    int[] score = {1, 2, 3, 4, 5};
  • 2차원 배열 선언과 초기화

    // 3*3 2차원 배열 선언
    int[][] score = {
        {1, 2, 3}, {1, 2, 2}, {3, 5, 7}
    };

8. 타입 추론, var

  • 타입 추론 : 코드에 타입을 선언하지 않아도 컴파일러가 스스로 타입을 유추하는 것으로, 자바 10부터 var 라는 키워드로 사용할 수 있다.
  • var 키워드는 초기화한 값을 보고 타입을 유추하기 때문에 반드시 선언과 동시에 초기화를 해야 한다.

    var text = "Hello";

사용한 테스트 코드 저장소

  • Thank You for Visiting My Blog, Have a Good Day 😆
    © 2021 Developer shPark, Powered By Gatsby.