본문 바로가기

프로그래밍/JAVA

[ JAVA ] 기본형

1. 논리형 - boolean

  • boolean형 변수에는 truefalse 중 하나를 저장할 수 있으며, 기본값은 false
  • 주로 대답(yes/no), 스위치(on/off)등의 논리구현에 사용
  •  boolean의 크기는 1byte
  • 자바에서는 대소문자가 구별되기 때문에 true != TRUE

2. 문자형 - char

- 문자를 저장하기 위한 변수를 선언할 때 사용. 단 하나의 문자만을 저장할 수 있다.

- 문자의 유니코드(정수)가 저장되므로  char ch = 'A'; char ch = 65; 는 동일한 결과를 얻는다. (문자 'A'의 유니코드는 10진수로 65)

- char형 변수에 저장된 값을 정수형(int)으로 변환하면 유니코드를 알 수 있다.
  ex) char ch = 'A';   ===> int code = (int) ch;

  • 특수 문자 다루기
특수 문자 문자 리터럴
tab \t
backspace \b
form feed \f
new line \n
carriage return \r
역슬래쉬(\) \\
작은따옴표 \'
큰따옴표 \"
유니코드(16진수)문자 \u유니코드 (ex: char a='\u0041')

                                      <특수문자를 표현하는 방법>

  • char타입의 표현형식
    - char타입의 크기는 2byte(=16 bit)이며, 65536(2^16)개의 코드를 사용할 수 있다.
    - char타입에 저장되는 값인 유니코드는 모두 양수(0포함)이므로 '0~65535'의 범위를 가진다.
  • 인코딩과 디코딩(encoding & decoding)
    - 문자 인코딩 : 문자를 코드로 변환하는 것
    - 문자 디코딩 : 코드를 문자로 변환하는 것
  • 아스키(ASCII)
    - 'American Standard Code for Information Interchange'의 약어로 정보교환을 위한 미국 표준 코드
    - 128(2^7)개의 문자 집합을 제공하는 7bit 부호, 기호와 숫자, 영대소문자로 이루어져 있다.
    - 숫자 '0~9', 영문자(A~Z, a~z)가 연속적으로 배치되어 있다.
  • 확장 아스키(Extended ASCII)와 한글
    - 문자를 표현할 때, 8bit를 사용함으로써 추가적인 문자를 표현함
    - 한글을 표현하는 방법은 조합형과 완성형이 있으며, 현재 한글 윈도우에서 작성된 문서는 기본적으로 확장 완성형(CP 949)로 인코딩되어 저장됨
  • 코드 페이지(code page, cp)
    - 확장 아스키의 256개의 문자를 어떤 숫자로 변환할 것인지 적어놓은 '문자 코드표(code page)'
  • 유니코드(Unicode)
    - 전 세계의 모든 문자를 하나의 통일된 문자집합으로 표현함
    - 유니코드 인코딩에는 UTF-8, UTF-16, UTF-32 등 여러 종류가 있으며 자바에서는 UTF-16을 사용함
    - UTF-16은 모든 문자를 2byte의 고정크기로 표현하고, UTF-8은 하나의 문자를 1~4byte의 가변크기로 표현함

3. 정수형 - byte, short, int, long

- 정수형에는 byte, short, int, long이 있으며, 크기순으로는 byte(1byte) < short(2byte) < int(4byte) < long(8byte)
- 기본 자료형은 int이다.

  • 정수형의 표현형식과 범위

       - 범위의 최대값에서 1을 빼는 이유는 범위에 0이 포함되기 때문

정수형의 표현범위

  • 정수형의 선택기준
    - 정수형 변수를 선언할 때는 int타입으로 하고, int의 범위(약 ±20억)를 넘어서는 수를 다뤄야할 때 long을 사용
      > byte, short는 메모리를 조금 더 절약할 수 있지만, 저장할 수 있는 값의 범위가 작은 편이기 때문에 연산 시에 범위를 넘어서 잘못된 결과를 얻기 쉬움
  • 정수형의 오버플로우
    - 타입이 표현할 수 있는 값의 범위를 넘어서는 것
    - 정수형 타입이 표현할 수 있는 최대값에 1을 더하면 최소값이 되고, 최소값에서 1을 빼면 최대값이 됨
      (최대값 + 1 -> 최소값,  최소값 -1 -> 최대값)
      ex) 4bit  2진수의 최대값인 '1111'에 1을 더하면 '10000'이 되지만, 4bit는 4자리의 2진수만 저장할 수 있기 때문에 '0000'이 됨.
            4bit  2진수의 최소값인 '0000'에서 1을 감소시키면 0에서 1을 뺄 수 없으므로 앞에 저장되지 않는 1이 있다고 가정하고 뺼셈을 하면 '1111'이 됨.
  • 부호있는 정수의 오버플로우
    - 부호있는 정수는 부호비트가 0에서 1이 될 때 오버플로우가 발생한다.

부호없는 정수와 부호있는 정수의 오버플로우

4. 실수형 - float, double

  • 실수형의 범위와 정밀도
    - 실수형은 실수를 저장하기 위한 타입으로 float, double이 있다.

실수형의 범위와 정밀도

      - float타입의 표현범위는 '-3.4x10^38 ~ 3.4x10^38'이지만, '-1.4x10^(-45) ~ 1.4x10^(-45)범위(0은 제외)의 값은 표현할 수 없다.

float타입으로 표현할 수 있는 값의 범위

      - 실수형에서 오버플로우가 발생하면 변수의 값은 '무한대'가 된다.
      - 언더플로우(underflow) : 실수형으로 표현할 수 없는 아주 작은 값, 즉 양의 최소값보다 작은 값이 되는 경우를 말함. 이 때 변수의 값은 0이 된다.
      - 연산속도의 향상이나 메모리를 절약하려면 float, 더 큰 값의 범위나 더 높은 정밀도를 필요로 하면 double을 선택해야 한다.

  • 실수형의 저장형식
    - 실수형은 값을 부동소수점수(floating-point)의 형태로 저장한다.
    - 부동소수점수 : 실수를 '±M x 2^E'와 같은 형태로 표현하는 것으로 부호(Sign), 지수(Exponent), 가수(Mantissa) 세 부분으로 이루어져 있다.

float와 double의 표현형식
실수 표현형식의 구성요소

  • 부동소수점의 오차
    - 실수 중에는 '파이(π=3.141592...)와 같은 무한소수가 존재하므로, 정수와 달리 실수를 저장할 때는 오차가 발생할 수 있음.

'프로그래밍 > JAVA' 카테고리의 다른 글

[ JAVA ] 오버라이딩(overriding)  (0) 2022.10.09
[ JAVA ] 상속(inheritance)  (0) 2022.10.09
[ JAVA ] 자바의 형변환  (0) 2022.10.08
[ JAVA ] 변수와 메서드  (0) 2022.09.20
[ JAVA ] 진법  (0) 2022.08.27