www.notion.so/77b364c091ea4d81a74042331b26dc1e

 

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

목표

www.notion.so

 

목표

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

학습할것

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

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

  • 프리미티브 타입의 종류
    • 자바에는 8가지의 타입이 있으며 논리형, 문자형, 정수형, 실수형으로 나뉘어져있다.
      1. 논리형

        • boolean
          • true와 false중 하나를 값으로 가진다.
          • 나머지 타입들과 연산이 불가능함.
          • 크기는 1byte
          • 값의 범위는 false, true
          • 기본값은 false
      2. 문자형

        • char
          • 문자를 저장한다.
          • 변수에 하나의 문자만 저장가능
          • 다만 내부적으로 유니코드 ( 정수 ) 로 저장하기 때문에 정수형과 별반 다르지 않다.
          • 그렇기에 정수형 또는 실수형과 연산이 가능하다.
          • 크기는 2byte
          • 값의 범위는 '\u0000' ~ '\uffff'
          • 기본값은 \'u0000'
      3. 정수형

        • byte, short, int, long
          • 정수를 저장함
          • int를 주로 사용하며 ( 기본 자료형 )
            • 크기는 4byte
            • 값의 범위는 -2,147,483,648 ~ 2,147,483,647
            • 기본값은 0
          • byte는 이진데이터를 사용할때 쓰고
            • 크기는 1byte
            • 값의 범위는 -128 ~ 127
            • 기본값은 0
          • short는 C언어와의 호환을 위해 사용
            • 크기는 2byte
            • 값의 범위는 -32,768 ~ 32767
            • 기본값은 0
          • long은 int 이상의 범위가 필요할때 사용
            • 크기는 8byte
            • 값의 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
            • 기본값은 0L
      4. 실수형

        • 실수를 저장하는데 사용 주로 double ( 기본 자료형 ) 을 사용한다.
          • double
            • 크기는 double은 8byte 다.
            • 값의 범위는 4.9E-324 ~ 1.8E308
            • 기본값은 0.0
          • float
            • 크기는 float은 4byte
            • 값의 범위는 1.4E-45 ~ 3.4E38
            • 기본값은 0.0F

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

  • 프리미티브 타입
    • 실제 값을 저장한다.
    • 프리미티브 타입도 객체로 사용할때가 있다.
      • Boxing을 통해 프리미티브 타입을 감싼다고해서 Wrapper Class 라고 불린다.
        • 프리미티브 타입과 달리 주소를 값으로 가지고 있기 때문에
        • Null을 컨트롤 할수 있다.
  • 레퍼런스 타입
    • 값이 저장되어 있는 주소를 값으로 저장한다.
    • 위에서 본 8개의 프리미티브 타입을 제외한 나머지 타입

리터럴

  • 변수와 상수는 값을 저장할수 있는 공간을 의미

  • 하지만 상수는 변경이 불가능하다.

  • 상수는 변경이 불가능하므로 그자체로 값이라고 볼수 있다.

  • 그래서 상수의 다른이름은 리터럴

  • 리터럴은 값 그자체를 일컫기 때문이다.

  • 보통 String과 같은 불변 클래스들은 값의 변경이 가능하다.

  • 하지만 불변클래스는 값이 변할수 없는 클래스인데 어떻게 가능한 것일까 ?

    • 불변 클래스는 값이 불변이기 때문에 변경할수가 없다.
    • 그래서 새로운 스택을 만들어서 그곳에 새로 변경된 값을 저장한후
    • 불변클래스는 담고있는 주소의 값을 새로만든 스택의 주소로 바꾼다.
    • 이렇게해서 값을 변경시킨다.

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

  • 변수 선언

    • 변수의 타입과 이름을 적는다.
    • 예) int count; // int 는 변수타입 count는 변수의 이름
    • 변수타입은 변수에 저장될 값이 어떤 타입인지 정하는 것이고
    • 변수이름은 변수에 붙인 이름이다.
  • 변수 초기화

    • 예) int count = 10; // int타입의 변수를 count란 이름으로 명명하고 10으로 초기화

    • 보통 선언과 초기화를 동시에 한다.

    • 생략하는 경우도 있지만 사용하기 전에 적절한 값으로 초기화 하는것이 좋다.

    • 명시적 초기화

      • 위와 같은 설명이 바로 명시적 초기화다.
    • 초기화 블럭

      • statc 초기화 블럭이나 인스턴스 초기화 블럭에서 초기화를 하면 된다.
      • 생성자보다 인스턴스 초기화 블럭이 먼저 수행된다.
    • 생성자 초기화

      • 변수를 선언만 해놓고 초기화는 하지 않고 생성자에서 초기화 하는 방법.

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

  • 클래스 변수, 인스턴스 변수, 지역 변수 총 3가지가 있다.
    1. 클래스 변수

      • 선언 위치는 클래스 영역
      • 생성시기는 클래스가 메모리에 올라갈 때
      • 타입 앞에 static이 붙는다.
      • 클래스는 독립적인 저장공간을 갖지 않으므로 모든 인스턴스는 같은 값을 가진다.
    2. 인스턴스 변수

      • 선언 위치는 클래스 영역
      • 생성시기는 인스턴스가 생성되었을 때
      • 클래스 변수와 다르게 static이 붙지는 않는다.
      • 인스턴스는 독립적이므로 항상 다른값을 가질수 있다.
    3. 지역 변수

      • 선언 위치는 클래스 영역이 아닌 ( 메소드,생성자,초기화 블랙 내부 ) 이다.
      • 생성시기는 변수 선언문이 수행되었을 때
      • 인스턴스 변수와 마찬가지로 static이 붙지 않는다.
      • 메소드 블럭을 벗어나면 소멸한다.

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

  • 타입 변환

    • 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
  • 캐스팅

    double d = 99.9; int count = (int)d;
    • 캐스팅은 이렇게 명시적으로 변경해준다.
  • 타입 프로모션

    • 조건이 맞으면 컴파일러가 자동으로 형변환을 시켜준다.
    • 조건
      • 그 값이 형변환할 타입의 값을 초과하지 않는 것
      • 그리고 서로 연산이 가능한 타입이어야 한다는 것이다.
      • 프리미티브타입과 레퍼런스타입은 서로간에 타입 변환이 안된다.
      • 값의 범위가 작은 타입에서 큰 타입으로 변경할때도 가능

1차 및 2차배열 선언하기

  • 1차 배열 선언

    • 타입[] 변수이름; // 선언
    • 변수이름 = new 타입[길이]; // 생성
    int[] count; count = new int[10]; // 또는 int[] count = {1,2,3,4,5};
    • 선언만 했을경우 아직 메모리에 저장되지 않는다 왜냐면 길이가 정해지지 않았기 때문이다.
    • new에 의해 생성되거나 아예 선언과 동시에 생성할 경우에 메모리에 저장될 공간이 생성된다.
    • 그리고 각 값들은 int의 기본값인 0으로 초기화되고 ( new로 생성까지만 했을 경우 )
    • 그 이후나 값을 넣어주거나 선언과 동시에 값을 넣을 경우에는 배열에 그 값이 담긴 메모리 주소가 저장된다.
    • 배열의 길이에는 0도 포함된다.
  • 2차 배열 선언

    • 타입[][] 변수이름;
    //선언 방식은 3가지 int[][] count; //또는 int count[][]; // 또는 int[] count[]; //할당 방식은 1차배열과 비슷함 int[][] count; count = new int[10][10]; //또는 int[][] count = {{1,2},{2,3},{3,4},{1,4}}
    • 2차배열은 배열에 각각 배열의 주소가 담긴다.

타입추론, var

  • 타입 추론

    • 코드 작성당시 정해지지 않은 타입을 컴파일러가 유추하는 것
    • java 9버전 이하에서는 generic과 lambda를 사용할때 쓰이고
    • java 10버전부터 var이라는 local variable한 키워드가 추가되었다.
    • 이러한 타입추론 덕분에 제네릭타입에 타입을 명시하지 않아도 된다.
  • var

    • 지역변수로서만 사용가능하다.
    • 선언과 동시에 초기화가 필수
    • 다이아몬드 연산자와 같이 사용할수 없다
    • java 10버전 이상부터 사용가능하며 그 이하버전은 lombok 설치시 사용가능.
    • 예 )
    var message = "ganadaramabasa"; ~~var message = new ArrayList<>();~~

참조

'백선생님 온라인스터디' 카테고리의 다른 글

6주차 상속  (0) 2021.01.10
4주차 - 제어문  (0) 2021.01.09
3주차 연산자  (0) 2021.01.07
연산자  (0) 2020.11.28
스터디 1주차 - JVM  (0) 2020.11.15

+ Recent posts