[Java] 변수

Sun choi·2024년 7월 23일

NEW 지식

목록 보기
6/34

변수에 대한 (내가 잘 모르겠는) 모든 것 총정리!

  • 상수 : 변할 수 없는 저장공간, final 붙이면 상수
final int number = 10; //상수로 선언 (데이터 타입 앞에 final)

number = 11; //변수의 값을 바꾸려고하면 에러!
  • 변수
    기본형과 참조형 두개만 기억해
    기본형 - 숫자형, 문자형, boolean..등 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입
    참조형 - 뭔가 복잡한.. 한번에 저장하기 어려운 그런 것(어딘가에 별도로 저장 -> 그 주소를 참조하는 식), 객체나 클래스를 담을 수 있는 변수들도 모두 참조형이다.

🍄 기본형 변수

논리형 변수 : boolean
- True/False 값만 저장합니다.

문자형 변수 : char
문자(char)와 문자열(String)
가장 두드러진 차이는 문자 - 기본형 / 문자열 - 참조형
char alphabet = 'A'; //문자는 작은따음표 ''

정수형 변수 : byte, short, int, long
long 형은 숫자 뒤에 L 붙여야함

byte byteNumber = 127; // byte 는 -128 ~ 127 범위의 숫자만 저장 가능합니다.

short shortNumber = 32767; // short 는 -32,768~32,767 범위의 숫자만 저장 가능합니다.

int intNumber = 2147483647; // int 는 -21억~21억 범위의 숫자만 저장 가능합니다.

long longNumber = 2147483647L; // long 은 숫자뒤에 알파벳 L 을 붙여서 표기하며 매우 큰수를 저장 가능합니다.

실수형 변수 : float, double
0.123, 0.99999 와 같은 소수점 실숫값을 저장합니다.
floa형 뒤에 F 붙여야함

🍄 참조형 변수

다른 기본형 변수가 실제 값을 저장하는 저장 공간이라면 참조형 변수는 실제 값이 아닌 원본 값의 주솟값을 저장한다.
참조형 변수는 주솟값을 저장하는 '주소형 변수'라고 불러도 된다.

문자열 변수 : String
그 외 : Object, Array, List …
- 객체, 배열, 리스트와 같은 단일 저장공간에 담을 수 없는 값을 저장합니다.

저장공간으로 본 변수

  • 기본형 변수 : 원본 값이 Stack 영역에 있다.
  • 참조형 변수 : 원본 값이 Heap 영역에 있다.
    Heap 영역은 참조형 변수를 위한 별도공간!

Stack 영역 vs Heap 영역

  • Stack의 경우에는 정적으로 할당된 메모리 영역입니다.
    • 그래서, 크기가 몇 byte 인지 정해져 있는 기본형 변수를 저장합니다.
    • 추가로, 크기가 정해져 있는 참조형 변수의 주솟값도 저장합니다.
  • Heap의 경우에는 동적으로 할당된 메모리 영역입니다.
    • 그래서, 크기가 계속 늘어날 수 있는 참조형 변수의 원본을 저장합니다.

정적은 항상 크기가 몇바이트인지 정해져있을 때! 동적은 알수없을 때!!
기본형은 선언과 동시에 크기가 정해진다. 정적!
참조형은 변수의 값이 변하고, 생성되는 배열의 크기도 달라질 수 있다. 이런 것을 동적 메모리 할당이

🍄 그 외 변수와 관련된 것들

래퍼 클래스(Wrapper Class) 기본형 변수를 클래스로 한번 랩핑(감싸는) 변수
왜, 굳이 래퍼 클래스를 사용하는 건가?
클래스는 객체지향 언어인 Java의 핵심 기능. 그렇기 때문에 클래스로 변수를 관리하면 객체지향의 많은 기능을 사용할 수 있게 된다.

// 박싱 VS 언박싱

// 박싱
// Integer 래퍼 클래스 num 에 21 의 값을 저장
int number = 21;
Integer num = new Integet(number);

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


숫자와 문자 저장

저장 공간에 저장하는 값은 0,1을 통한 숫자 값을 저장.
문자는 어떻게 숫자로 저장? -> 숫자(int)를 문자(char)로 매핑해서(짝을 지어서) 표현


[아스키코드]
알파벳 A는 65, a는 97, 문자 ”0”은 80

숫자 -> 문자

// 숫자 -> 문자
import java.util.Scanner;

public class Main {

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

		int asciiNumber = sc.nextInt();
		char ch = (char)asciiNumber; // 문자로 형변환을 해주면 숫자에 맞는 문자로 표현됩니다.

		System.out.println(ch);
	}

}

// 입력
97

// 출력
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 asciiNumber = (int)letter; // 숫자로 형변환을 해주면 저장되어있던 아스키 숫자값으로 표현됩니다.

		System.out.println(asciiNumber);
	}

}

// 입력
a

// 출력
97
profile
풀스택 개발자의 공부기록 📖

0개의 댓글