본문 바로가기
[JAVA]/JAVA 기본

[JAVA] 변수와 타입

by 팡펑퐁 2022. 8. 30.
728x90

변수

메모리 공간에 값이 변할 수 있는 데이터를 저장하는 수단
public class Main {
    public static void main(String[] args) {
        int num1; // 변수 선언
        num1 = 1; // 값 할당(초기화)
        num1 = 2; // 값 할당(재할당)
        int num2 = 1; // 선언과 동시에 초기화

 

변수표기법

int camelCase; // 변수명을 소문자로 쓰며, 띄어쓰기 및 단어 구분만 대문자로 표현
int snake_case; // 변수명을 소문자로 쓰며, 띄어쓰기 및 단어 구분은 '_'(언더바)로 표현
int PascalCase; // 단어의 첫글자를 대문자로 씀
int kebab-case; // 변수명을 소문자로 쓰며, 띄어쓰기 및 단어 구분만 '-'(하이픈)로 표현

 

기타

  • 숫자로 시작하는 변수명은 사용할 수 없다.
  • 자바에서 사용중인 예약어(reserved word)를 변수명으로 사용할 수 없다.

 

상수

final double CALCULATOR_PI = 3.14; // 상수 키워드 final을 사용하여 재할당 금지
상수는 재할당이 금지된 변수이다. 대소문자로 모두 작성이 가능하지만 관례적으로 대문자로만 작성한다.

상수의 기능

  • 프로그램이 실행되면서 값이 변하면 안될 때 사용하면 좋다.
  • 상수명으로 값을 사용하여 코드의 가독성을 높일 수 있다.
  • 변경 사항이 있을 때 상수의 할당 값만 변경하면 되므로 코드 유지관리를 쉽게할 수 있다.

리터럴(Literal)

문자가 가리키는 값 그 자체

 

타입

기본 타입(primitive type) : 실제 값이 저장되는 타입
참조 타입(reference type) : 어떤 값이 저장된 주소를 값으로 갖는 타입

 

정수 타입

타입 메모리 표현 범위
byte 1byte -128(-2^7) ~ 127(2^7-1)
short 2byte -2^15 ~ 2^15-1
int 4byte -2^31 ~ 2^31-1
long 8bye -2^63 ~ 2^63-1

 

long longNum = 12345678910L; // long 타입 리터럴은 리터럴 뒤에 접미사 L을 붙여준다.

정수형의 오버플로우 

자료형이 표현할 수 있는 범위를 넘어서는 값을 표현하는 경우에 발생한다.
최대값이 넘어가면 해당 자료형의 최소값으로 돌아가기 때문에 byte형에서 127 + 1은 -128이 된다.

 

정수형의 언더플로우

자료형이 표현할 수 있는 범위보다 작은 값을 표현하는 경우에 발생한다.
최소값보다 작아지면 해당 자료형의 최대값을 돌아가기 때문에 byte형에서 -128 - 1 은 127이다.

 

실수 타입

타입  메모리
float 4byte
double 8byte
float num = 3.14f; // float형 리터럴에는 반드시 접미사 f를 붙여야 한다.

실수형의 오버플로우

값이 음의 최소 범위나 양의 최대 범위를 넘어가게 되면 무한대가 된다.

실수형의 언더플로우

값이 음의 최대 범위나 양의 최소 범위를 넘어가게 되면 0이 된다.

 

논리타입

boolean 형

참 또는 거짓을 데이터로 저장할 수 있으며, JVM이 다룰 수 있는 데이처의 최소 크기가 1byte이므로 1byte의 크기를 가진다.

 

문자 타입

char 형

문자형 리터럴은 반드시 (' ') 작은 따옴표를 사용해야 한다. 큰 따옴표는 문자열 리터럴로 인식되기 때문이다.
char letter 65;
System.out.print(letter); 
// 출력 결과 : A

int에서 char로 변환
result = (char)(9 + '0') // '0'은 자바에서 ASCII 코드 48로 저장하게 된다. 결과는 57
(char)57이므로 ASCII 코드 57을 문자형으로 바꾸면 '9'
 자바는 유니코드로 문자를 저장하기 때문에  char letter1 = 'a'와 같이 문자형 리터럴은 letter1에 영문자 a의 유니코드 숫자값이 저장된다. 반대로 변수 값을 읽어올 때는 변수가 저장하고 있는 숫자값을 유니코드로 인식하여 해당 숫자와 일치한 코드를 가진 문자를 가져온다.

 

자동 타입 변환

byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)
// float이 long보다 뒤에 있는 이유는 float이 표현 가능한 값이 모든 정수형보다 정밀하기 때문이다.

수동 타입 변환

수동으로 타입을 변환하기 위해서는 캐스팅연산자()를 사용해야 한다.
int intNum = 10;
byte byteNum = (byte)intNum;

 

문자열 타입

String 형

참조타입으로, (" ")큰따옴표를 사용한다.
String str1, str2, str3, str4; // string 타입 변수명 선언
str1 = "hello!"; //문자열 리터럴을 할당
str2 = "hello!"; //문자열 리터럴을 할당
str3 = new String("hello!"); // String 클래스의 인스턴스를 생성하여 할당
str4 = new String("hello!"); // String 클래스의 인스턴스를 생성하여 할당


str =(의) 메모리 주소는 -> "hello!"가 들어있는 메모리주소를 참조


== : 등가비교 연산자로, 좌항과 우항의 리터럴을 비교
boolean comparison1 = str1 == "hello!" // true
boolean comparison2 = str1 == str2 // true
boolean comparison3 = str1 == str3 // false str1은 문자열 리터럴을 할당받은 변수, str3는 별개의 인스턴스에 저장됨
boolean comparison4 = str3 == str4 // str3과 str4는 별개의 인스턴스에 저장됨

변수명.equals() : 메서드로, 저장하고 있는 문자열의 내용을 비교
boolean comparison1 = str1.equals("hello!") // true
boolean comparison1 = str1.equals(str3) // true
boolean comparison1 = str1.equals(str4) // true

 

728x90

'[JAVA] > JAVA 기본' 카테고리의 다른 글

[JAVA] 클래스와 객체  (0) 2022.09.02
[JAVA] 입출력  (0) 2022.08.30
[JAVA] 연산자  (1) 2022.08.30
JAVA의 기본  (0) 2022.08.30
프로그래밍 관련 용어 정리  (0) 2022.08.22