[Java의 정석] ch2. variable

llunaB·2022년 2월 19일
0

java의 정석

목록 보기
1/2

1. 변수

  • 변수란? : 값을 저장할 수 있는 메모리 공간

2. 변수의 타입

  • 기본형 변수는 실제 값을 저장한다.
  • 참조형 변수는 어떤 값이 저장되어 있는 주소를 값으로 가진다.

2.1 기본형(primitive type)

  • 8개의 타입(자료형)
  • 종류와 크기
크기1바이트2바이트4바이트8바이트
논리형boolean
문자형char
정수형byteshortintlong
실수형floatdouble
  • 각 타입의 변수가 저장할 수 있는 값의 범위
    정수형의 경우 n이 bit 수일 때 2n-2^n ~ 2n12^n-1
    int 형의 경우 32bit(4byte)이므로 232-2^{32} ~ 23212^{32}-1 , 약 10자리 수의 값을 저장

2.2 상수와 리터럴(constant & literal)

  • 상수는 선언과 동시에 초기화해야 한다.
    final int MAX_VALUE = 100;

  • 리터럴 타입의 접미사

    • 정수형 L
    • 실수형 f
  • 리터럴 타입은 저장될 변수의 타입과 일치하는 것이 보통이지만, 타입이 달라도 저장 범위가 넓은 타입에 좁은 타입의 값을 저장할 수 있다.

    int i = 'A'; // 문자 'A'의 유니코드인 65가 변수 i에 저장된다.
    long l = 123; // int보다 long 타입의 범위가 더 넓다.
    double d = 3.14f; // float보다 double 타입의 범위가 더 넓다.
  • 문자열 리터럴은 빈 문자열을 허용한다.

    string str =""; // 내용이 없는 빈 문자열

2.3 형식화된 출력(printf())

  • 지시자를 통해 변수의 값을 여러 형식으로 변환하여 출력한다.
  • 지시자의 순서가 일치해야 한다.
  • 줄바꿈을 하려면 지시자 %n 을 따로 넣어줘야 한다.
지시자설명
%b불리언(boolean) 형식으로 출력
%d10진(decimal) 정수 형식으로 출력
%o8진(octal) 정수 형식으로 출력
%x16진(hexa-decimal) 정수 형식으로 출력
%f부동 소수점(floating-point) 형식으로 출력
%e지수(exponent) 표현식 형식으로 출력
%c문자(character)로 출력
%s문자열(string)로 출력

2.4 화면에서 입력받기 Scanner

// String 은 비교불가, char 는 가능
// 입력받은 하나의 문자가 숫자인지 영문자인지 확인한다.
public class OperatorEx25 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.println("문자를 입력하세요. >");

        String input = scanner.nextLine();
        char ch = input.charAt(0);

        // 입력문자가 숫자인 경우
        if ('0' <= ch && ch <= '9') {
            System.out.println("숫자입니다.");
        }
        // 입력문자가 문자인 경우
        if (('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'Z')) {
            System.out.println("문자입니다.");
        }
    }
}

3. 진법

3.1 10진법과 2진법

3.2 비트와 바이트

  • 비트 : 한 자리수의 2진수로, 1비트는 컴퓨터가 값을 저장할 수 있는 최소 단위
  • 바이트 : 8 비트 = 1 바이트
  • 워드 : CPU가 한 번에 처리할 수 있는 데이터의 크기 (32비트 CPU의 경우 1워드는 32비트이다.)

n비트로는 2n2^n 개의 값을 표현할 수 있다.

3.3 8진법과 16진법

  • 8진수는 2진수 3자리를 한 자리로 표현한다.
  • 16진수는 2진수 4자리를 한 자리로 표현한다.

3.4 정수의 진법 변환

3.5 실수의 진법 변환

3.6 음수의 2진 표현 - 음의 보수법

10진수 -5 를 2진수로 표현하려면 어떻게 해야 할까?
-5의 2의 보수를 구하면 된다.

왜? 5의 2진수 0101 과 2의 보수 1011 을 더하면 10000이 되고, 4비트를 넘는 값은 버려지므로 0이 되기 때문이다!

  1. -5 의 절댓값 5를 구하고 2.이를 2진수 0101로 바꾼 후 3. 2의 보수 1011로 바꾸어주면 된다.

2의 보수 구하기

2의 보수 = 1의 보수 + 1

1의 보수는 0을 1로, 1을 0으로 바꾸기만 하면 된다.

1. 음수의 절대값을 2진수로 변환한다.
  • -5의 절대값인 5을 2진수로 변환한다. 10진수 5를 2진수로 변환하면 '0101'이다.
2. 1에서 구한 2진수의 1을 0으로, 0을 1로 바꾼다. (1의 보수를 구한다.)
  • '0101' 이 '1010'이 된다.
3. 2의 결과에 1을 더한다.
  • '1010'에 1을 더하면 '1011' 이 되고, 이것이 -5의 2진 표현이다.

4. 기본형(primitive type)

4.1 논리형 - boolean

  • 자바에서는 데이터를 다루는 최소 단위가 byte이기 때문에 boolean 의 크기는 1bit이다.

4.2 문자형 - char

  • char ch = "A"
  • 문자 "A"를 char 타입의 변수 ch 에 저장한다.

인코딩과 디코딩

  • 문자를 코드로 변환 : 인코딩
  • 코드를 문자로 변환 : 디코딩
  • 자바에서는 UTF-16 을 사용한다.

4.3 정수형 - byte, short, int, long

정수형의 선택 기준

  • byte, short 보다는 int를 선택하자. 이유는 다음과 같다.
  1. byte, short 는 값의 저장범위가 작아 연산시 잘못된 결과를 얻기 쉽다.
  2. JVM 의 피연산자 스택(operand stack)이 피연산자를 4byte 단위로 저장하기 때문에, 그보다 작은 자료형의 경우 4byte로 변환하므로 int를 처음부터 사용하는 것이 더 효율적이다.

    정수형 변수를 선언할 때는 int 타입으로 하고, int 의 범위를 넘어서는 수를 다룰 때는 long 을 사용하다.

정수형의 오버플로우

  • 오버플로우란 ? 타입이 표현할 수 있는 값의 범위를 넘어서는 것

4.4 실수형 - float, double

실수형의 저장 방식

  • 부동소수점수 형태로 저장한다.
  • 부호(Sign) + 지수(Exponent) + 가수(Mantissa)

    ± M * 2E2^E

5. 형변환(casting)

  • 형변환이란, 변수 또는 상수의 타입을 다른 타입으로 변환하는 것
  • 더 작은 타입으로 변환시 값 손실이 발생한다.
  • 더 큰 타입으로 변환시 빈 공간을 양수의 경우 0으로, 음수의 경우 1로 채운다.
  • 실수형을 정수형으로 변환하면 소수점 이하 값은 버려진다.(다 버림)
  • 자동 형변환의 경우 기존의 값을 최대한 보존할 수 있는 타입으로 변환한다.
profile
안녕하세요. 성장하는 주니어 개발자입니다. :-)

0개의 댓글