코딩 공부/개념정리

Java 변수, 아스키 코드

챠나 2023. 4. 3. 23:41

[기본형 변수]

1. 선언

Int(Integer) : 저장공간 타입

number : 저장공간 이름

2. 변수 : 변하는 저장공간

int number = 10; // 1. 변수로 선언 및 초기화
number = 11; // 2. 변수의 값을 바꾼다. (덮어쓰기)

3. 상수 : 변하지 않는 저장공간

final int number = 10; // 1. 상수로 선언 (데이터 타입 앞에 final 을 붙이면 됨)
number = 11; // e2. 변수의 값을 바꾸려고 하면 에러가 남

  • 논리형 변수 : boolean
     - True/False 값만 저장
boolean flag = true; // 1 논리형 변수 boolean으로 선언 및 True 값으로 초기화
flag = false; // 2. False 값으로도 저장 가능.
  • 문자형 변수 : char
    - 'A','1'와 같은 문자 하나만 저장
char alphabet = 'A'; // 문자 하나를 저장
  • 정수형 변수 : byte, short, int, long
    - 0,1,2,99 와 같은 정수형 숫자값을 저장
       <정수형 변수 표현 범위>
    - byte : -128 ~ 127
    - short (2byte) : -32,768 ~ 32,767
    - int (4byte) : -21억 ~ 21억
    - long (8byte) : 9백경 정도의 매우 큰 수
byte byteNumber = 127; // byte는 -128 ~127 범위의 숫자만 저장가능
short shortNumber = 32767; // short는 -32,768 ~ 32,767 범위의 숫자만 저장 가능
int intNumber = 2147483647; // int는 -21억 ~ 21억 범위의 숫자만 저장 가능
long longNumber = 214783647L; // long은 숫자뒤에 알파벳 L을 붙여서 표기하며 매우 큰 수 저장가능
  • 실수형 변수 : float, double
    - 0.123, 0.9999와 같은 소수점 실수값을 저장
    - float (4byte) : 3.4 * -10^38 ~ 3.4 * 10^38(long 보다 큼)범위의 숫자 저장이 가능
    - double (8byte) : 1.7* -10^308 1.7 * 10^308(long 보다 큼)범위의 숫자 저장이 가능
    float 가 long 보다 더 넓은 범위를 표현하기 때문에 자동 형변환이 안됨.
long longNumber = 3.14f; // long < float 자동 형변환 불가
float floatNumber = 0.123f; // float 는 4byte 로 3.4 * 10^38 범위를 표현하는 실수값
double doubleNumber = 0.123123123; // double 은 8byte 로 1.7 * 10^308 범위를 표현하는 실수값

[참조형 변수]

  • 문자열 변수 : String
    - "Apple", "텍스트"와 같은 문장을 저장
String message = "Hello World"; // 문자열 저장
  • 그 외 : Object, Array, List ,,,
    - 객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장
List<int> alphabet = [0,1,2,3]; // 기본형 변수 여러개 저장

[래퍼 클래서 변수]

  • 박싱 : 기본 타입에서 래퍼 클래스 변수로 변수를 감싸는 것
  • 언박싱 : 래퍼 클래스 변수를 기본 타입 변수로 가져오는 것
// 박싱
// Integer 래퍼 클래스 num 에 21의 값을 저장
int number = 21;
Integer num = number;

// 언박싱
int n = num.intValue(); // 래퍼 클래스들은 inValue() 같은 언박싱 메서드들을 제공해줌.

[아스키 코드]

문자는 숫자(int)를 문자(char)로 매핑해서 표현

그 중 Java에서는 기본적으로 아스키 코드 라는 규칙으로 문자를 저장(표현)함.

아스키 코드 표

  • 숫자 → 문자
// 숫자 -> 문자
import java.util.Scanner; // java.util이라는 놈이 제공하는 것을 쓰겠다.
                         // Scanner : 입력한 값을 저장하게 하는 것

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int asciNumber = sc.nextInt(); // nextInt()로 읽은 그 값을 하나하나를 아스키 넘버로 저장
        char ch = (char)asciNumber; // 아스키넘버를 character로 바꾸는 작업

        System.out.println(ch);
    }

}

이렇게 입력하면 콘솔창에서 커서가 깜빡거리게 된다.

커서가 깜빡거리는 콘솔창
콘솔창에 '97'을 입력하니 'a'라는 결과값이 나옴

콘솔창의 'a'값은 System.out.println(ch);에 의해 나온 결과값이다.

( 97이라고 입력한 것을 sc.nextInt()로 인해서 읽어줘서 asciNumber로 할당 되었다. 그 값이 (char)에 의해서 char변수 타입으로 바뀌어서 a라는 값이 나왔다(아스키표에 의함))

  • 문자 → 숫자
// 문자 -> 숫자

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        char letter = sc.nextLine().charAt(0); // 첫번째 글자만 받아오기위해 charAt(0) 메서드를 사용합니다.
        int asciNumber = (int)letter; // 숫자로 형변환을 해주면 저장되어있던 아스키 숫자값으로 표현됩니다.

        System.out.println(asciNumber);
    }

}

위와 똑같이 커서가 깜빡거리는 콘솔창
위와 반대로 'a'를 입력후 '97'의 결과값 도출


[형변환]

// 실수 -> 정수(0.XXXX -> 0)
double doubleNumber = 10.101010;
float floatNumber = 10.1010f;

// 변환(int)
int intNumber;
intNumber = (int)doubleNumber; // dounle -> int
System.out.printle(dounleNumber); // 변환 전
System.out.printle(intNumber); // 변환 후

출력값

// 정수 -> 실수
int intNumber = 10;

double doubleNumber = (double)intNumber;
float floatnumber = (float)intNumber;

System.out.println("intNumber => " + intNumber);
System.out.println("doubleNumber => " + doubleNumber);
System.out.println("floatNumber => " + floatnumber);

출력값

📌 변수 타입별 크기 순서

byte(1) → short(2) → int(4) → long(8) → float(4) → double(8)