본문 바로가기

언어/Java

자료형

 변수 : 변할 수 있는 값이 저장된 메모리 공간
               javascript는 대입되는 값에 따라 자료형*이 바뀜
               java는 변수의 자료형을 미리 결정한다. ex) int i = 1; 정수만 가능

 

* 자료형

직접 값을 갖는 구조

    - 기본형(primitive date type) : 직접 값을 갖는 구조, 자료형에 따라 1~4byte

                                                    기본 자료형 예약어가 8개(숫자, 문자, 논리형)
        · 숫자형

형변환

        ▷ 정수형 : byte(1 byte 메모리, 숫자 127까지), short(2 byte 메모리), int(4 byte 메모리), long(8 byte 메모리 확보)

                          뒤로 갈수록 더 큰 값 표현, 작은 자료형은 큰 자료형으로 자동 형변환된다. 거꾸로는 강제 형변환 해야함.

                          강제형변환(casting)은 s=(short) i; 이 연산자를 cast 연산자라고 함.
                          롱타입은 long l = 12만 쓰면 int로 인식해서 long l = 12L/12l 로 써줘야함
         실수형 : float(4 byte 메모리), double (8 byte 메모리 확보), 뒤로 갈수록 더 큰 값 표현
                           float f = i, i = (int) f; 강제형변환
                           float f1 = 12.3 double 타입이기 때문에 float f1=12.3F/12.3f로 써야함.
                           float f = i; 더 작은 메모리공간이지만 long 타입은 float로 자동형변환 가능, 
                           float은 실수(지수)를 사용해서 정수보다 큰 값 표현 가능
                           float f = i; f=l; l=(long)f;
                           float는 long 타입으로 자동형변환 불가능.
                           ex) s o p(123); 컴파일러는 123을 int로 인식 = 연산을 할 때 4byte는 있어야함, 정수형은 int가 default다
                           ex) s o p(123.4); 컴파일러는 123.4을 double로 인식 = 실수는 double이 default다

                                 s o p(System.out.println)


       · 문자형
         char : 'A', '1', '' 안에 들어가면 문자 charcter라고 읽지X charcter는 따로 있음, 2byte메모리, 16비트 유니코드 체계


           ■ 문자조합
              - ASCII (1byte)
                  : 키보드로 입력해서 컴퓨터로 보낸 값을 1byte(8bit) 메모리로 기억을 시킴, 영문자, 숫자형문자, 특수문자
              - Multi byte CharSet (2byte) 체계의 문자조합  
                  : EUC-KR 2byte 국가차원에서 만든 문자조합
                  : SHIFT-JIS 2byte 일본어 국가차원에서 만든 문자조합
                  : MS949 2byte 마이크로소프트에서 만든 문자조합
                    → 다양한 Multi byte CharSet을 표준화한게 UNICODE
              - UNICODE (2byte)
                  : 다국적언어를 처리하는 표준화된 문자조합
                  : 영어 1byte도 가능한데 굳이 2byte로 처리하다 보니 1byte 메모리 낭비하는 문제점 발생
                  : Java는 기본 유니코드 체계를 채택
              - UTF-8 (1~3byte)
                  : 유니코드 텍스트 포맷(유니코드의 한 종류)
                  : 영어의 경우 1byte만 사용
                  : 다국적언어의 경우 최대 3byte까지 사용

           ※ 안드로이드앱 - 자바 웹 서버
               안드로이드앱에서 UTF-8로 '가' 3byte, 'A' 1byte

               이걸 UNICODE 쓰는 자바웹서버로 보내면 2글자라 4byte로 보내야하는데 이미 안드로이드 앱의

               3byte '가' 1byte 모자라서 깨짐, 앞에서 모자란 1byte가 뒤로 와서 'A'도 깨짐

                처음부터 맞춰주던가 encoding을 해서 맞춰줘야 글씨가 안깨짐

           ■ 아스키 코드표
              - enter : 아스키코드에선 10 LF(LineFid), 아스키코드에선 13 CH, 10+13 합쳐진 형태 3개 중 하나를 사용
              - 0 : 아스키코드에선 48
              - 1 : 아스키코드에선 49
              - A : 아스키코드에선 65
              - a : 아스키코드에선 97

int와 string 같이 출력할 때 차이점

 

 

 

       · 논리형
         boolean : 1byte 메모리, TRUE/FALSE 예약어만 사용 가능, 다른 자료형과 형변환 불가능함

    - 참조형 : 기본형을 제외한 모든 자료형, 4바이트의 메모리 확보, 주소값을 받음

참조자료형 hi라는 객체의 정보값을 갖고있다. C의 포인터와 같은 개념

 

'언어 > Java' 카테고리의 다른 글

if 조건문, Math.random() 함수  (0) 2023.07.25
IDE 아닌 방법으로 Java 사용할 때 경로 지정하기  (0) 2023.07.25
연산자  (0) 2023.07.24
IDE 아닌 방법으로 Java 사용해보기  (0) 2023.07.24
Java란?  (0) 2023.07.24