Java 데이터 타입, 변수 및 배열에 대한 공부

Purple·2021년 7월 29일
0

JAVA

목록 보기
2/8

1. primitive type

프리미티브 타입. 원시형 기본형 타입이다.
type은 흔히들 자료형이라고도 한다.

이러한 자료형은, 컴퓨터의 관점에서 해당 코드들을 어떻게 메모리에서 다뤄야하는지 알려주기 위해서 필요하다.
Java의 8대 기본 자료형은 다음과 같다.

구분프리미티브 타입메모리 크기표현 범위
논리형boolean1bytetrue, false
정수형byte1byte-128 ~ 127
short2byte-32,768 ~ 32767
int4byte-2,147,483,648 ~ 2,147,483,647
long8byte-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수형float4byte(3.4 X 10^-38) ~ (3.4 X 10^38) 의 근사값
double8byte(1.7 X 10^-308) ~ (1.7 X 10^308) 의 근사값
문자형char2byte0 ~ 65,535

각 표현 범위를 벗어나게 되면 오버플로우가 발생한다.
int를 예시로 들면 다음과 같다.

2. reference type

값이 저장되어 있는 위치를 저장한 값, 즉 주소값을 참조 값이라고 한다.
기본 타입을 제외한 모든 타입을 참조 타입이라고 한다.
참조 타입의 종류에는 배열,enum, class, interface가 있다.

기본값은 실제 그 값 자체이다.
참조값은 메모리의 주소값이다.

기본 타입은 스택에 값이 존재한다.
참조 타입은 스택에는 참조값만 있고, 실제 값은 힙 메모리에 존재한다.

3. literal

리터럴은 실제로 저장되는 값을 말한다.
보통 대입 연산자를 기준으로, 우항의 값들을 리터럴이라고 생각하면 된다.

int val = 12;

에서 12

  • Integer Literlas
    long 타입은 L 또는 l로 끝나는 값
    이 외에 나머지 숫자는 int이다.
    16진수는 0x로 시작
    2진수는 0b로 시작
    int의 경우 다음과 같이 가시성을 높이기 위해 언더바를 사용할 수 있다.

  • Floating-Point Literals
    float 타입은 F 또는 f로 끝나는 값
    이 외에 나머지 숫자는 double이다.

  • Character and String Literals
    Unicode character,
    special escape chracter
    \b : 백스페이스
    \t : 탭
    \n : 개행
    \f : form feed
    \r : 캐리지 리턴
    \" : 큰 따옴표
    \' : 작은 따옴표
    \\ : 역슬래시

4. 변수 선언 및 초기화

변수 선언은, 사용하고자 하는 변수의 자료형 다음에 변수의 이름을 작성하면 된다.

int val;

물로 한번에 여러개도 작성이 가능하다.

int va1, va2, val3;

변수의 초기화는, 대임 연산자은 "="을 사용한다.
1. 선언과 동시에 초기화

int val = 10;
  1. 선언하고 난뒤의 초기화
int val;
val = 10;

5. 변수의 scope, lifetime

변수의 scope란, 해당 변수가 접근할 수 있는 범위라고 생각하면 된다.
프로그래밍 언어에서의 범위는 보통 {} 중괄호 블록을 통해 나눈다.

각 변수의 lifetime 또한, {} 중괄호 블록에 의존적이다.
결과적으로, 블록내에 선언된 변수는 블록이 종료될때 스택 영역에서 소멸한다.

  • 선언위치에 따라 달라지는 변수의 종류
변수선언 위치생성시기
인스턴스 변수클래스 영역인스턴스가 생성될 때
클래스 변수클래스 영역클래스가 메모리에 올라갈 때
지역 변수클래스 영역 이외의 영역변수 선언문이 수행될 때
  • 인스턴스 변수
    클래스의 인스턴스를 생성할 때 만들어진다.
    결과적으로, 인스턴스 변수 값을 사용하기 위해서는, 해당 클래스의 인스턴스를 먼저 생성해야 한다.

  • 클래스 변수
    static 키워드가 붙어있다.
    한 클래스의 모든 인스턴스가 값을 공유한다.
    클래스 변수는, 클래스가 메모리에 올라갔을때 만들어지기 때문에, 인스턴스를 생성하지 않고 바로 접근하여 사용이 가능하다.

  • 지역 변수
    메소드 내에 선언되어서, 메소드 내에서만 사용이 가능하다.

6. type casting , type promotion

  1. 타입 캐스팅 : 자신의 표현 범위를 벗어나는 데이터 타입으로의 변환
  2. 타입 프로모션 : 자신의 표현 범위 안에 있는 타입으로의 변환,

따라서 타입 캐스팅의 경우, 데이터의 손실이 발생할 수 있다.

출처 : https://league-cat.tistory.com/412

클래스에서도 타입 캐스팅이 존재한다.
두 클래스가 상속 관계인 경우에 타입 변환이 가능하다.
업캐스팅(UpCasting) : 서브 클래스의 객체가, 슈퍼 클래스 타입으로 형변환 되는 것을 말한다.
다운캐스팅(DownCasting) : 업캐스팅의 반대로, 서브 클래스의 객체를 다시 복구시켜준다고 생각하면 된다. 이때는 명시적 형변환이 필요하다.

7. 1차, 2차array의 선언

1차원 배열 선언의 종류는 다음과 같다.

1. int[] arr_type1;
2. int arr_type2[];

위의 두가지 방식에 차이는 없다.

1차원 배열에 값을 할당하는 방법은 다음과 같다.

1. int[] arr1 = new int[5];
2. int[] arr2 = {10, 20, 30, 40, 50}
3. int[] arr3 = new int[] {10, 20, 30, 40, 50};

2차원 배열 선언의 종류는 다음과 같다.

1. int[][] arr_type1;
2. int arr_type2[][];

2차원 배열에 값을 할당하는 방법은 다음과 같다.

int[][] arr1 = new int[2][3];
int[][] arr2 = {{2, 3},{4, 5, 6}};
int[][] arr3 = new int[][]{{1, 2}, {3, 4, 5}};

8. 타입추론과 var

타입추론이란, 변수의 값을 보고 컴파일러 자체적으로 변수의 데이터타입이 무엇인지 추론하는 것을 의미한다.
파이썬이나 자바스크립트등에서는 이와 같은 타입추론을 많이 허용하고 있는 것으로 알고 있다.

자바에서도 이와 같은 타입추론을 허용하고 있으며, 이는 var이라는 것을 이용하면 된다.
다만 var을 사용할때에는, 로컬 변수로만 사용해야 하며, 선언과 동시에 값이 할당이 되어야 한다.

profile
안녕하세요.

0개의 댓글