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

놀아·2020년 12월 15일
0

자바 스터디

목록 보기
2/7

목표

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

학습할 것

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

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

  • 프리미티브 타입(Primitive type) 출저 : https://gbsb.tistory.com/6

    총 8가지의 기본형 타입(Primitive type)을 미리 정의하여 제공한다.
    기본값이 있기 때문에 Null이 존재하지 않는다. 만약 기본형 타입에 Null을 넣고 싶다면 래퍼 클래스를 활용한다.
    실제 값을 저장하는 공간으로 스택(Stack) 메모리에 저장된다.
    만약 컴파일 시점에 담을 수 있는 크기를 벗어나면 에러를 발생시키는 컴파일 에러가 발생한다.
    주로 문법상의 에러가 많다. 예를 들어 ;을 안붙였다는 이유로 빨간 줄이 쳐지는 경우

TypeContainsDefaultSizeRange
booleantrue or falsefalse1 bitNA
charUnicode character\u000016 bits\u0000 to \uFFFF
byteSigned integer08 bits–128 to 127
shortSigned integer016 bits–32768 to 32767
intSigned integer032 bits–2147483648 to 2147483647 약 21억
longSigned integer064 bits–9223372036854775808 to 9223372036854775807
floatIEEE 754 floating point0.032 bits1.4E–45 to 3.4028235E+38
doubleIEEE 754 floating point0.064 bits4.9E–324 to 1.7976931348623157E+308

출저 : https://velog.io/@youngerjesus

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

1. 프리미티브 타입(Primitive type)

위에서 정리를 하였습니다.

2. 레퍼런스 타입 (출저 : https://gbsb.tistory.com/6)

  1. 기본형 타입을 제외한 타입들이 모두 참조형 타입(Reference type)이다.
  2. 빈 객체를 의미하는 Null이 존재한다.
  3. 값이 저장되어 있는 곳의 주소값을 저장하는 공간으로 힙(Heap) 메모리에 저장된다.
  4. 문법상으로는 에러가 없지만 실행시켰을 때 에러가 나는 런타임 에러가 발생한다. 예를 들어 객체나 배열을 Null 값으로 받으면 NullPointException이 발생하므로 변수값을 넣어야 한다.

3. 리터럴

  • 상수란 값을 가지는 변수이나 그 값을 바꿀 수 없는 변수입니다.
  • 즉, 한번 메모리에 변수를 지정하고 그 변수에 값을 초기화하고 난 그 이후에는 값을 바꿀 수 없는 변수를 상수라고 일컫습니다. 다음과 같은 경우, PI가 상수가 되겠죠.

4. 변수 선언 및 초기화하는 방법 (출저 : https://doublesprogramming.tistory.com/73)

변수 초기화

변수를 선언하고 처음으로 값을 저장하는 것을 변수 초기화 라고 한다. 변수의 초기화는 경우에 따라 필수적일수도 선택적일수도 있지만 가능하면 선언과 동시에 적절한 값으로 초기화하는 것이 바람직하다. 멤버변수는 초기화를 하지 않아도 변수의 타입에 맞는 기본값으로 초기화가 이루어지지만 지역변수는 사용하기 전에 반드시 초기화가 이루어져야 한다. 출저 : https://doublesprogramming.tistory.com/73

5. 변수의 스코프와 라이프타임 (출저 : https://league-cat.tistory.com/411)

1. 변수의 스코프(영역)이란?

변수에 접근하거나 접근할 수 있는 유효 범위/영역
개발자는 자신이 선언한 또는 선언된 변수에 접근할 수 있는 영역에 대해서 이해해야한다.
일반적인 규칙은 변수가 선언된 블록내에서만 액세스 할 수 있다는 것이다.
블록은 왼쪽 중괄호 {로 시작하고 오른쪽 줄괄호 }로 끝난다.

2. 변수(variable)의 라이프타임(lifetime)?

변수가 메모리에서 살아있는 기간

3. Instacne Variables

정의
클래스 내부와 모든 메소드 및 블록 외부에서 선언된 변수
scope
정적 메서드를 제외한 클래스 전체
라이프타임
객체가 메모리에 남아있을 때까지.
예시
x와 y의 scope

public class AddTest {

    /* 인스턴스 변수 범위 */
    int x,y; 
    static int result;

    void add(int a, int b){
        x = a;
        y = b;
        int sum = x + y; //Sum
        System.out.println("Sum = "+sum);
    }
    /* 인스턴스 변수 범위 */

    public static void main(String[] args) {
        AddTest obj = new AddTest();
        obj.add(10,20);
    }
}

4. Class Variables

정의
클래스 내부, 모든 블록 외부에서 선언되고 static으로 표시된 변수
scope
클래스 전체
라이프타임
프로그램이 끝날때까지 또는 클래스가 메모리에 로드 되는 동안
예시
result(class variable)의 scope

public class AddTest {

    /* 클래스 변수 범위 */
    int x,y; 
    static int result;

    void add(int a, int b){
        x = a;
        y = b;
        int sum = x + y; //Sum
        System.out.println("Sum = "+sum);
    }

    public static void main(String[] args) {
        AddTest obj = new AddTest();
        obj.add(10,20);
    }
    /* 클래스 변수 범위*/
}

5. Local Variables

정의
인스턴스 및 클래스 변수가 아닌 모든 변수
scope
선언된 블록 내에 있음
라이프타임
컨트롤이 선언 된 블록을 떠날때까지
예시
a, b (local variable)의 scope

public class AddTest {

	
    int x,y; 
    static int result;

    void add(int a, int b){ //a와 b는 로컬변수
        x = a;
        y = b;
        int sum = x + y; //Sum
        System.out.println("Sum = "+sum);
    }

    public static void main(String[] args) {
        AddTest obj = new AddTest();
        obj.add(10,20);
    }
    
}

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

1. type 형변환?

변수 또는 상수의 타입을 다른 타입으로 변환
연산을 수행하는 코드에서는 같은 타입끼리만 가능하다. 그래서 연산을 수행하기 전에 같은 타입으로 만들어야 하는데
타입 변환을 하는 것을 형변환 이라고 한다.

2. 프로모션과 캐스팅?

  • 프로모션 (자동/묵시적 형변환) : 작은 데이터 타입에서 큰 데이터 타입으로 형 변환
  • 캐스팅(명시적 형 변환) : 큰 데이터 타입에서 작은 데이터 타입으로 형 변환

7. 1차 및 2차 배열 선언하기 (출저 : https://league-cat.tistory.com/413)

1. 배열이란?

동일 타입의 값을 여러개 취급할 수 있는 기능
인덱스라고 불리는 []로 감싼 0 부터 시작하는 정수를 사용하여 배열의 길이나 순서를 나타낼 수 있다.
배열도 결국은 타입에 따라 default value로 채워진다.
참조의 경우 null
int / short / byte / long의 경우 0
float / double 의 경우 0.0
bool의 경우 false
char의 경우 \u0000

2. 1차 배열 선언하기

int array = new int[10];

3. 2차 배열 선언하기

int array = new int[10][10];

8. 타입 추론, var

var
자바 10부터 타입 추론을 지원하는 var키워드가 추가되었다.
이 키워드는 local variable이면서 선언과 동시에 initializer가 필수적으로 요구된다.

예시

// java 9 이하
String message = "data";
// java 10 이상
var message = "the initializer present on the right-hand side";

참고

https://velog.io/@youngerjesus 프리미티브 타입 표
https://gbsb.tistory.com/6 프리미티브 및 레퍼런스 정의
https://doublesprogramming.tistory.com/73 변수 초기화
https://league-cat.tistory.com/411 변수의 스코프와 라이프타임
https://league-cat.tistory.com/413 1차 및 2차 배열 선언하기
https://velog.io/@bk_log 타입 추론, var

profile
머리가 나쁘기 때문에 메모와 정리를 한뒤에 찾아보기

0개의 댓글