일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- abstract
- array
- ArrayList
- Class
- collection
- database
- db
- DDL
- default
- DML
- Exception
- Generic
- HashSet
- Interface
- Java
- Java 입문
- java 자료형
- java 클래스
- JavaBean
- javabeans
- JAVA의 특징
- LinkedList
- linkedset
- list
- mariadb
- Private
- protected
- public
- RuntimeException
- set
- Today
- Total
GeehDev
[Java] 변수 선언과 기본 자료형 본문
변수 선언
//선언만
자료형 변수명;
//선언과 동시에 할당
자료형 변수명 = 값;
Java에서의 변수선언도 JS와 유사하게 선언하지만, 차이점은 예약어가 Java에서 정해놓은 자료형으로 입력해서 사용한다는 점에서 차이가 있습니다.
💡 변수 선언 후 할당을 안하면?
변수 선언 시 선언과 동시에 값을 할당할 수도 있지만, 선언만 해놓고 값 할당은 나중에 할 수도 있습니다. 이럴 경우 값이 할당되기 전까지 해당 변수의 값은 null 상태입니다.
이러한 null의 경우 어떠한 연산을 해도 null이 나오기 때문에 논리적 오류에 주의해야합니다.![]()
위 이미지 처럼 변수 선언 후 할당을 안한채 사용하려하면 에러가 표시됩니다.
변수 네이밍 규칙
필수사항
- 식별자는 첫 시작은 글자, 달러기호($), 밑줄기호(_)로 시작해야 함 (숫자로 시작할 수 없음)
- 식별자에는 글자, 숫자, 달러기호($), 밀줄기호(_)만 사용할 수 있음
- Java 자체에서 이미 사용중인 키워드는 사용 불가
- 띄어쓰기불가
권고사항
- 한글 사용을 지양합니다. 되도록 영어로 작성하도록 합니다.
- 카멜(camel) 케이스 사용 권장
변수의 생존기간(life cycle)
변수의 생존기간이란, 변수가 만들어진 후 사라지기까지의 기간을 의미합니다.
사용자가 변수를 선언해서 사용 후 JVM에서 일정 기준 이후 메모리에서 삭제 처리 합니다.
이 기준을 변수의 생존기간
이라 합니다. 이러한 기간은 아래의 문제 때문에 생기게 되었습니다.
- 보안이슈 - 외부에서 해당 변수 접근 문제
- 메모리 충돌 방지
{
int a = 2; //변수 a 생성시점
{
int b = 3; //변수 b 생성시점
System.out.println(b);
} //변수 b 사라지는 시점
System.out.println(a);
} //변수 a 사라지는 시점
변수의 생존기간은 해당 변수가 만들어진 {}
안에서만 존재한다.
💡 변수의 생존기간
변수의 생존기간은의 기준은 변수의 할당시점이 아니라 변수의 선언시점 부터 시작한다는 점을 주의하자!
자료형
자료형의 경우 기본 자료형
과 참조 자료형
두 가지로 구분이 됩니다.
기본 자료형의 경우 스택 영역에 저장이 되며, 참조 자료형은 힙(주소는 스택) 영역에 저장 됩니다.
기본자료형의 경우 변수명을 소문자로 시작, 참조자료형의 경우 변수명을 대문자로 시작하는 방식이 권고됩니다. (필수X)
💡 자바의 메모리 구조
자바의 메모리는 크게 3가지로 나눠집니다.(사실 4개지만....여튼 3개로 주로 구분한다 함...)
- class, static, final, 메서드 영역
- stack 영역
- heap 영역
기본 자료형
Primitive Type
으로 실제 값으로 받은 데이터 자체를 저장하는 자료형입니다.
해당 데이터는 스택 영역에 저장됩니다.
자료형 | 키워드 | 자료의 크기 | 값의 범위 |
부울대수 | boolean |
1byte | true, false |
정수 | byte |
1byte | (-2^7) ~ (2^7)-1 |
short |
2byte | (-2^15) ~ (2^15)-1 | |
int |
4byte | (-2^31) ~ (2^31)-1 | |
long |
8byte | (-2^63) ~ (2^63)-1 | |
실수 | float |
4byte | ±(1.40 x (10^-45) ~ 3.40 x (10^38)) |
double |
8byte | ±(4.94 x (10^-324) ~ 1.79 x (10^308)) | |
문자(정수) | char |
2byte | 유니코드 문자(0 ~ (2^16)-1) |
💡 값의 범위가 어떤 의미인지 확인하기
byte 자료형을 예시로 보면 -128 ~ 127까지를 표현할 수 있는 자료형이다. 그런데 이런 자료형에 해당 값을 초과하는 숫자를 넣게 되면 어떻게 될까?
byte test = (byte) 566;
byte test1 = (byte) 128;
System.out.println(test); //54 출력됨
System.out.println(test1); //-128이 출력됨
위 예시 처럼 넣은 값과 영 다른 엉뚱한 값이 나오는 것 처럼 보인다. 하지만 사실상 -128 ~ 127까지의 값 범위에서 127을 초과하면 다시 가장 낮은 값으로 돌아와서 -128이 표시되는 방식 입니다.
부울대수
- boolean
참(true), 거짓(false) 값만 저장하는 자료형 입니다.
이 자료형의 경우 1bit를 사용하지만 Java의 자료처리 최소 단위가 1byte이기 때문에 1byte가 할당 됩니다.
정수
- byte
- short
- int
- long
💡 자바에서의 정수값 표현
- 10진수 : 숫자
- 2진수 : 0b + 숫자
- 8진수 : 0 + 숫자
- 16진수 : 0x + 숫자
실수
- float
- double
문자
- char
💡 문자 저장/출력 방식
- 문자의 저장 방식
: 문자 값 또는 정수가 입력되었을 경우 문자로 입력된 경우 최종적으로 유니코드 표에 따른 정수값으로 메모리에 저장됩니다.
\u로 시작하는 유니코드 정수 자체로 저장할 수도 있습니다.- 문자의 출력 방식
: 메모리에 할당되어있는 정수값을 유니코드 표에 따른 문자로 출력합니다.
기본 자료형 간 타입 변환
Java에서 기본 자료형의 경우 =
을 기준으로 선언한 자료 타입과 갑의 자료 타입을 맞춰서 입력해줘야합니다. 기본적으로 입력된 값이 해당 자료형 내에 포함될 경우 자동 형변환으로 자동으로 맞춰지지만, 입력된 값이 해당 자료형의 크기보다 클 경우 수동으로 형변환을 해줘야합니다.
boolean을 제외한 기본 자료형 7개는 자료형 끼리 서로 변환할 수 있습니다.
💡 자료의 크기 순서
boolean < byte < short < char < int < long < float < double
여기서 자료형의 크기는 자료형의 바이트 순이 아니라 저장하는 값의 범위 기준입니다.
이러한 자료형 변환을 Type Casting
이라고 하며 2가지 방법으로 할 수 있습니다.
- 캐스팅 방법 1 : (자료형) 표기
//사용법
자료형 변수명 = (자료형) 값;
//사용예시
byte test;
test = (byte)560;
- 캐스팅 방법 2 : 실수리터럴 단위문자 표기
//사용법
long 변수명 = 값L;
float 변수명 = 값F;
//사용예시
long test;
test = 16L;
실수의 경우 해당 단위문자를 이용할 수 있는데, L = long / F = float 으로 값 뒤에 표기합니다.
사실 L, F는 l, f로도 쓸수 있지만 되도록 대문자 L, F로 쓰는걸 권장합니다.
💡 명시적 형변환
Java의 경우 자동 형변환이 이뤄지기는 하지만, 코드를 짤 때 가능한 명시적으로 형변환하는 방식으로 작성하는 것을 권장합니다.
기본 자료형 간의 연산
자료형 간의 연산을 할 경우 CPU에서 연산 최소 단위가 int
이므로 int
보다 작은 단위의 자료형 끼리의 연산에서도 결과는 int
형으로 나오게 됩니다.
또한, 다른 자료형 끼리의 연산의 경우 더 큰 자료형으로 자동형변환하여 연산된다는 점도 참고해야합니다.
기본 자료형의 초기값
기본 자료형, 참조 자료형 모두 선언 후 할당을 안 한 상태에서 출력하려하면 스택 메모리에 할당된 값이 없기 때문에 오류가 발생합니다.
따라서 각 자료형에 맞는 초기값을 설정해줘야할 경우 아래 초기값으로 설정합니다.
boolean
: false정수형
: 0실수형
: 0.0
참고
Do it! 진짜 개발자가 되는 Java 프로그램 입분서 자바 완전 정복 - 김동형
위 책을 공부하며 작성하고 있습니다!
'Study > Java' 카테고리의 다른 글
[Java] 클래스의 상속과 다형성 (0) | 2024.09.15 |
---|---|
[Java] 클래스의 기본구조 (0) | 2024.09.15 |
[Java] 참조 자료형 - 배열, 문자열(String) (0) | 2024.09.15 |
[Java] 연산자와 제어문 (1) | 2024.09.08 |
[Java] Java의 기본 개요 (1) | 2024.09.08 |