본문 바로가기
프로그래밍 언어/JAVA

[JAVA] 자료형, 배열, 상수, 형변환

by E145 2021. 1. 20.
반응형

자바의 타입 - 원시 타입 vs 참조 타입

 

 - 자바에서 변수를 선언할 때 두 가지 타입으로 구분된다.

 

 - 실제 값을 스택에 저장해서 사용하는 원시 타입.

 

 - 실제 값을 힙에 저장한 후, 그 값의 참조 값을 사용하는 참조 타입.

 

 - 원시 타입에는 boolean, char, byte, short, int, long, float, double 이 있다.

 

 - 참조 타입은 원시 타입을 제외한 모든 타입이다.

 

 - 원시 타입에서 ==, != 연산자는 값 그 자체를 비교한다.

 

 - 참조 타입에서 ==, != 연산자는 참조 값의 주소를 비교한다.(값을 비교하기 위해서는 별도의 선언이 필요)

 


 

원시 타입(Primitive Type)

 

원시 타입이란?

 

 - 실제 데이터 값이 저장되고, 그 값을 이용할 경우 사용.

 

 - 지역 변수, 매개 변수 등 스택 영역에 저장되는 타입.

 

 - 정수 자료형으로 byte, short, int, long 이 있다.

 

 - 실수 자료형으로 float, double 이 있다.

 

 - 문자 자료형으로 char 가 있다.

 

 - 논리 자료형으로 boolean 이 있다.

 

 

정수 자료형

 

 - 메모리적 측면에서 살펴보면, 1이라는 값을 저장하기 위해서는 int 자료형보다 short 자료형을 사용하는것이 효율적이다.

 

 - 하지만, CPU는 정수연산 시 int 단위로 계산하도록 설계되어 있기 때문에 자바는 정수형 연산(덧셈, 뺄셈 등)을 진행할 때 모든 피연산자를 int형으로 변환하는 과정을 거친다.

 

 - 즉, short형으로 선언된 1이라도 int형으로 변환하는 과정을 거친다. 

 

 - 반면, long형으로 선언된 정수는 int형으로 변환이 일어나지 않는다.(데이터의 손실이 발생할 수 있기 때문이다.)

 

 - byte나 short등의 int 보다 크기가 작은 연산자들은 연산보다 데이터의 표현이 중심이 되는 경우 사용한다.

 


 

실수 자료형

 

 - 실수 자료형을 선택하는 기준은 크기가 아니라, 정밀도로 판단하여야 한다.

 

 - 실수를 표현하는데 사용이 되는 바이트의 수가 많으면 오차가 발생할 확률이 낮아진다.

 

 - float은 6자리의 정밀도를 갖고, double은 15자리의 정밀도를 가진다.

 


문자 자료형

 

 - 자바는 유니코드를 기준으로 문자를 표현한다.

 

 - 유니코드는 2바이트로 표현하는 문자 체계로 세계 모든 언어를 표현할 수 있다.

 

 - char형은 문자의 표현을 위한 자료형이다.

 

 - 문자에 해당하는 값을 char형 변수에 넣어도, 해당 문자로 인식한다.

 

 - 문자는 작은 따옴표로 표현해야 한다.

 

 - 해당 국가의 폰트가 설치되어 있어야 정상적으로 문자가 출력된다.

 

public class test {
    public static void main(String[] args){

        char CharTest1='A';
        char CharTest2=65;

        System.out.println("문자 A 입력: "+CharTest1 );
        System.out.println("숫자 65 입력: "+CharTest2 );
    }
}

 

실행 결과

 


 

참조 타입(Reference Type)

 

참조 타입이란?

 

 - 배열, 열거, 클래스, 인터페이스 등 데이터를 힙에 할당한 후 참조 값을 이용하여 데이터에 접근하는 타입.

 

 - 변수에는 실제 값이 아닌, 참조 값을 가지고 있기 때문에 값을 비교하기 위해서는 == 연산자가 아니라, 별도의 연산이 필요하다.

 

 - 힙에 데이터를 할당하기 때문에, 데이터에 더 이상 참조하지 않는 경우 가비지 컬렉터가 자동으로 데이터를 처리한다.

 

 - 참조 변수 안에는 주소 값이 아니라, 참조 값이 들어가 있다.

 

 - 객체가 생성되면, 힙에 데이터를 할당한다. 그리고 JVM은 해당 데이터의 주소에 맞는 참조 값을 매핑시킨다.

   참조 변수에서 해당 참조 값을 저장한다.

 

 - 참조 변수가 데이터에 접근할 때 JVM에서 참조 값에 맞는 주소 값을 이용하여 데이터를 처리한다.

 


참조 타입 비교(예시)

 

public class start {

    public static void main(String[] args) {
        String s1="test";
        String s2="test";
        String s3=new String("test");

        System.out.println(s1==s2);
        System.out.println(s1==s3);
        System.out.println(s1.equals(s3));
    }
}

 


배열

 

 - 자바에서는 배열도 참조 타입니다.

 

 - new를 이용하여 객체를 생성한다.

 

 - 배열 선언 방법

   int[] arr = new int[4];

   int[] arr = new int[]{1,2,3};

   int[] arr = {1,2,3};

 

 - 2차원 배열을 선언할 때에는 앞 원소는 필수 값이다.

   int[][] arr = new int[필수][선택];

 

 - 배열도 참조 타입이기 때문에 데이터의 참조값이 들어가 있다.

 

 - int []arr; 만 선언하게 되면, null 값이 들어가게 된다.

 

 - int[][] arr = new int[3][]; 에서 arr[0], arr[1], arr[2]에 역시 참조 값이 들어가게 된다.

 

 

 

 

상수

 

상수의 저장

 

 - 상수도 변수처럼 메모리에 저장된다.

 

 - 상수는 이름이 존재하지 않고, 메모리에 저장된 값을 변경할 수 없다.

 

 - 상수도 자료형을 기반으로 저장된다.(정수인 경우 int, 실수인 경우 double)

 

 - 상수가 기본 자료형이 표현 가능한 범위를 넘는 경우 컴파일 에러가 발생한다.

 

 - 기본 자료형 범위를 넘는 경우 접미사를 붙여서 컴파일러에게 다른 형으로 변경해 달라고 요청해야 한다.

 

 - 정수에서 int형으로 표현이 불가능한 경우 l 또는 L을 붙여 long형으로 변경을 요청해야 한다.

 

int 이상의 값을 입력하는 경우 에러가 발생한다.

 

접미사 L을 붙이면 에러가 발생하지 않는다.

 

 - 실수인 경우 기본 자료형이 double이다. double인 값을 float으로 저장할 경우 데이터 손실이 일어날 수 있기 때문에 컴파일러는 에러를 발생시킨다.

 

 - 그러므로, float으로 변환시키겠다는 접미사 f 또는 F를 붙여 컴파일러에게 요청해야 한다.

 

 

 

 

 

 


 

 

형 변환

 

형 변환이 필요한 이유

 

 - 정수 1과 실수 1.0은 같은 값이지만, 다른 형을 가지고 있다. 

 

 - int형 정수 1과 float형 실수 1.0은 비트로 표현하는 경우 다른 값을 가진다.

 

 - int 형 정수 1 : 00000000 00000000 00000000 00000001

 

 - float 형 실수 1.0 : 00111111 10000000 00000000 00000000

 

 - 형 변환이란 값의 표현 방식을 변경하는 것이다.

 


 

자동 형 변환

 

 - 별도의 형 변환을 요청하지 않아도 자동으로 형 변환이 발생하는 경우

 

 - 데이터 손실이 발생하지 않는 경우 자동으로 형 변환이 가능하다.

 

자동 형 변환 가능 규칙

 - 연산에서 서로 다른 피연산자들이 있는 경우 자동으로 형 변환이 가능한 형으로 변환된다.

 

 - 크가가 작은 float이 long보다 상위인 이유는 크기가 아니라 표현 범위를 기준으로 정의되었기 때문이다.

 

 

 


 

명시적 형 변환

 

 - 자동 형 변환이 일어나지 않을 때 명시적 형 변환을 이용하면 형 변환이 가능하다.

 

 - 형 변환 과정에서 데이터 손실이 발생할 수 있다.

 

 - 형 변환 하려는 값 앞에 해당 형을 붙여준다.

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

댓글