2020-11-21 백기선님 스터디 2주차

기본형

  • 자바에서는 int, long, float, dobule, boolean, char, byte, short 총 8가지의 기본형 타입이 있다.

  • 기본형은 기본값이 있기때문에 null을 허용하지 않고 stack 영역에 저장된다.

  • 논리형

    • booelan : 1byte, 기본값 false
  • 정수형

    • byte: 1byte, 기본값 0, 1바이트가 8비트이기 때문에 표현 가능한 범위 -128~127
    • short : 2byte, 기본값0, 표현범위 -32768~32767
    • int : 4byte, 기본값0, 표현범위 -21억~21억
    • long: 8byte, 기본값 0L
  • 실수형

    • float : 4byte, 기본값 0.0F, 범위 : 3.4*10^-38~3.4*10^38
    • double: 8byte, 기본값 0.0, 범위 : 1.7*10^-308~1.7*10^308
  • 문자형

    • char: 2byte, 기본값 : \u0000, 범위 0~65535

기본형과 레퍼런스 타입

  • 기본타입을 제외한 나머지는 레퍼런스 타입이다. 레퍼런스 타입은 java.lang.object를 상속하는 모든 클래스를 지칭하고 기본값과 달리 null을 허용한다.
  • new 키워드를 통해 생성되는 객체들은 JVM의 Heap영역에 저장되고, GC에 의해 관리된다.
  • 클래스, 인터페이스, 열거형, 배열타입이 존재한다.
  • 런타임 예외가 발생한다.

기본값과 레퍼런스 타입은 언제사용되나?

  • primitive의 경우 사용할떄 반드시 갑이 할당되야되서 상수에서 많이 활용한다. Optinal이 지원된다 하더라도 primitive는 기본적으로 null을 허용하지 않기때문에 더 괜찮다고 생각된다.
  • Wrapper의 경우 빌트인 메서드를 활용하거나 Collections나 제네릭에서 많이 활용된다.

리터럴

  • 리터럴이란 변수에 넣는 변하지 않는 데이터를 의미한다.

    • int a = 100;
      boolean check = true;
      
    • 위의 코드에서 a, check는 변수이고, 100, true는 리터럴이다. 리터럴이란 변수에 담겨있는 변하지 않는 데이터를 의미한다.

변수 선언 및 초기화 방법

  • 프로그래밍에서 변수란 특정타입의 데이터를 담는 그릇이다.

  • type varName = value;
    type varName2;
    varName2 = value;
    final int SUM = 10; // 상수선언
    
  • 자바에서 변수를 선언하기 위해서는 자료형 변수이름 = 값 형태로 변수선언과 동시에 할당하는 방법과 변수만 선언하고 할당은 나중에 하는 방식이 있다.

  • 변수는 값이 변할 수 있지만 final 키워드를 붙여서 변하지 않는 상수로 만들수도 있다. 상수는 선언과 동시에 할당이 되어야한다.

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

  • 변수의 스코프란 변수가 적용되는 범위를 지칭한다. 자바에서는 {}단위로 블록스코프를 사용하고 선언된 위치에 따라 클래스변수, 인스턴스변수, 지역변수가 존재한다.

  • public class Person {
      static int totalPeople = 10; // 클래스변수
      int age = 26; // 인스턴스 변수
    
      private int sum(int a, int b) {
      int sum = a + b; // 지역변수
      return sum;
    }
    }
    
    
    • static키워드가 클래스 변수로 사용되고, 전역변수로 사용될 수 있다. 해당 변수는 1개만 존재한다.
    • 인스턴스 변수는 클래스영역에 선언되고 인스턴스가 생성될때 사용된다.
    • sum 메서드 안에 있는 int sum은 지역변수이다. 지역변수는 해당 함수가 실행될때 메모리에 할당된다.

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

1차 및 2차 배열 선언

  • 배열은 논리적 저장순서와 물리적 저장순서가 일치한 자료구조를 지칭한다. 따라서 인덱스(index)로 원소에 접근. 원소의 인덱스를 알고있으면 Big-O(1)에 접근가능하다.

  • 배열의 선언

    • int [] arr = new int [5];
      int [] arr2 = {1, 3, 5, 7, 9};
      int [] arr3;
      
      arr3 = new int[10];
      arr3[0]= 1;
      
    • 배열을 선언하기 위해서는 type [] varName = new int [size]형태로 배열의 크기를 지정하고, 추후 할당하는 방법과 int [] arr2 = {1,3,5,7,8}와 같이 선언과 동시에 할당하는 방법이 존재한다.

    • 배열은 크기를 할당하면 크기를 변화하지 못하기 때문에 ArrayList를 많이 사용한다. 하지만 ArrayList 내부역시도 배열형태로 되어있고 크기가 초과되면 ArrayList는 내부적으로 기존 데이터를 복사하고, 사이즈의 2배만큼 키워서 새로 선언하는 방식이다.

타입 추론, var

  • 자바10부터 var 키워드가 등장했다.

부족한 부분은 얼른 채우겠습니다….

Written on November 21, 2020