-
변수(Variable) - 기본형Java 2022. 9. 4. 00:13
변수란?
값을 저장할 수 있는 메모리 공간을 확보하고, 사람이 식별할 수 있는 이름을 붙인 것
메모리
- 메모리셀의 집합체
- 각 메모리셀에 데이터를 저장할 수 있다.
- 각 메모리셀을 가르키는 주소가 있다(예: 0x38d2a6c)
위의 예시처럼 주소를 만들 경우의 문제점
1. 저장해야할 값이 많을 때, 사람이 식별하기 어렵다
2. 시스템 운영에 꼭 필요한 데이터를 실수로 덮어쓸 가능성이 있다.
-> 이를 해결해주는 것이 '변수' !
class StaticExample{ int num1 = 10; //static키워드가 없는 참조변수 num1 static int num2 = -10; // static키워드가 있는 참조변수 num2 }위 예제에서의 int는 데이터 타입으로 정수형을 의미한다. 위 예제에서 num1과 num2은 각각 10, -10을 의미한다. num1과 num2가 변수를 말한다.
변수 선언
- 저장하고자 하는 값의 데이터 타입과 변수 이름 작성
- 변수를 선언하면 컴퓨터는 값을 저장할 저장공간을 확보하고, 사용자가 정한 변수 이름으로 이름을 붙인다.
- int num을 선언할 경우, int 형 값을 저장할 것이며 해당 데이터 타입의 크기인 4byte메모리 공간을 확보하며 해당 공간에 num 이라고 이름을 붙일 것이라는 걸 알 수 있다.
값 할당
- 변수에 값을 넣는 과정
class calculator { public static void main(String[] args) { int num1; //변수 할당 num1 = 1; //값 할당 } }- 대입 연산자를 활용하여 값을 할당한다.
- 좌항(변수) = 우항(값)
- 우항의 값이 좌항의 변수에 할당
- 초기화 : 변수 선언 후 처음으로 값을 할당하는 것
- 재할당 : 초기화 이후 다시 값을 할당하는 것
class calculator { public static void main(String[] args) { int num1; //변수 할당 num1 = 1; //값 할당(초기화) num1 = 5; //값 할당(재할당) -> 재할당 값으로 저장된다. } }class calculator { public static void main(String[] args) { int num1 = 10 // 선언과 동시에 초기화 } }변수 명명 규칙
1. 카멜 케이스(camelCase) -> 두 번째 단어부터 대문자로 시작
2. 영문자, 숫자, _ , $ 를 사용할 수 있다. 대소문자 구분(다르게 인식함)
3. 숫자로 시작x
4. 이미 사용중인 예약어(reserved word) 사용x (ex. double, for, if, class, char 등)
5. 사용 목적에 맞는 변수명
상수(Constant)
- 변하지 말아야할 데이터를 임시로 저장하기 위한 수단
- 재할당 금지된 변수
- final 키워드를 사용해 선언
- SCREAMING_SNAKE_CASE 사용(대문자에 언더바(_)를 넣어 구분
final double NUM_WEIGHT = 49.5; 상수를 사용하는 이유
1. 프로그램 실행 시 값이 변하면 안되는 경우
2. 코드 가독성 높이기
3. 코드 유지관리 유용성
타입
- 어떤 값의 유형 및 종류 -> 타입에 따라 값이 차지하는 메모리 공간의 크기와 값이 저장되는 방식 결정
1. 값이 차지하는 메모리 공간의 크기
2. 값이 저장되는 방식
○ 기본타입 & 참조타입
기본 타입과 참조 타입 (값이 저장되는 방식)
■ 기본 타입(primitive type)
- 실제 값 저장
- 정수타입, 실수 타입, 문자 타입, 논리 타입
■ 참조 타입(referenca type)
- 데이터가 저장된 곳을 나타내는 주소값 저장
- 기본형을 제외한 나머지 타입
- 출력할 경우, 객체의 주소값이 @0x38d2a6c와 같은 형식으로 출력
리터럴(Literal)
- 문자가 가르키는 값
- '값'이라는 표현대신 리터럴이라는 표현 사용
- 변수 또는 상수에 할당
기본 타입 - 정수 타입
타입 메모리 표현 범위 기타 byte 1byte -128(-27) ~ 127(27 - 1) short 2byte -32,768(-215) ~ 32,767(215 - 1) int 4byte -2,147,483,648(-231) ~ 2,147,483,647(231 - 1) 일반적으로 많이 사용 long 8byte -9,223,372,036,854,775,808(-263) ~ 9,223,372,036,854,775,807(263 - 1) 뒤에 대문자 L을 붙인다. ■ 오버플로우
- 표현 범위 중 최대값을 넘어서는 값이 될 경우 오버플로우가 발생한다.
- 최대값을 넘어가면 최소값으로 값이 순환
■ 언더플로우
- 표현 범위 중 최소값을 넘어서는 값이 될 경우 언더플로우가 발생한다.
- 최소값을 넘어가면 최대값으로 값이 순환
기본 타입 - 실수 타입
실수 : 소수점을 가지는 값
타입 메모리 표현 범위 정밀도 기타 float 4byte 음수 : -3.4 * 10³⁸ ~ 1.4 * 10⁻⁴⁵
양수 : 1.4 * 10⁻⁴⁵ ~ 3.4 * 10³⁸7자리 반드시 접미사 f를 붙여야 한다.
float num1 = 3.14f;double 8byte 음수 : -1.8 * 10³⁰⁸ ~ -4.9 * 10⁻³²⁴
양수 : 4.9 * 10⁻³²⁴ ~ 1.8 * 10³⁰⁸15자리 접미사 d는 선택사항
double형은 float형보다 정밀도가 더 높다.■ double형은 float형보다 더 큰 실수를 저장할 수 있으며 더 정확하게 저장할 수 있다.
■ 오버 플로우
- 값이 음의 최소 범위 또는 양의 최대 범위를 넘어섰을 때 발생하며, 이때 값이 무한대가 된다.
■ 언더 플로우
- 값이 음의 최대 범위 또는 양의 최소 범위를 넘어섰을 때 발생하며, 이때 값이 0이 된다.
기본 타입 - 논리 타입
■ boolean형
- 참 또는 거짓을 저장할 수 있는 데이터 타입
- true 혹은 false를 값으로 가진다.
- 1byte(8bit) 크기
- 조건문과 함께 사용
기본 타입 - 문자 타입
■ char형
- 2byte 크기
- 해당 변수에 하나의 문자형 리터럴 만을 저장
- 작은따옴표( ' ' )를 사용
- 큰 따옴표는 문자열 리터럴로 인식! -> 문자열과 문자형은 다름
char character1 = 'a'; char character2 = 'ab'; // error: 하나의 문자만 할당해야한다. char character3 = "a"; // error : 작은 따옴표를 사용해야한다.■ 어떻게 저장? -> 유니코드
- 각 문자에 숫자 코드 번호를 부여
- 문자형 리터럴을 문자형 변수에 할당하면 해당 영문자의 유니코드 숫자값이 저장된다.
- 숫자를 문자형 변수에 할당할 수 있다.
char character = 65; System.out.print(character); // 출력 결과 : A타입 변환
■ 자동 타입 변환
- 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때 ( byte -> int )
- 덜 정밀한 타입에서 더 정밀한 타입으로 변환할 때 ( float -> double )
byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)- float이 표현할 수 있는 값이 모든 정수형 보다 더 정밀하기 때문에 int와 long보다 더 뒤쪽에 있다.
■ 수동 타입 변환
- 더 큰 타입에서 작은 타입으로는 자동으로 타입 변환이 되지 않는다.
- 수동으로 타입을 변환하는 것을 캐스팅(casting)이라고 한다.
- 캐스팅 연산자 ()를 사용하여, 괄호 안에 변환하고자 하는 타입을 적어준다.
int intNum = 128; byte byteNum = (byte)intNum; System.out.println(byteNum);형변환
■ char 을 int 형으로
< 1 > 0 빼주기
아스키 코드 표 상에서 문자 0~9는 48~57의 순서로 되어있다.
문자 '1'의 아스키 코드에서 문자 '0'의 아스키 코드를 빼주면 원하는 숫자 1을 얻을 수 있다.
char c = '1'; int n = c - '0' // int n = (int)c - '0' -> 49 - 48 = 1 System.out.println(n) // 1< 2 > Character.getNumericValue()
char c = '1'; int n = Charicter.getNumericValue(c); System.out.println(n) // 1■ char형을 int형으로
< 1 > 문자 '0' 더하기
- 숫자 0 ~ 9 사이인 경우
int n = 4; char c = (char)(n + '0') // 4 + 48(아스키 코드 문자 '0') = 52 -> '4' (아스키 코드 변환) System.out.println(c); //'4'int n = 8 char c = (char)(n + '0') // 8 + 48(아스키 코드 문자 '0') = 56 -> '8' (아스키 코드 변환) System.out.println(c); // '8'< 2 > Character.forDigit(int digit, ind radix)
- 지정된 기수의 특정 숫자에 대한 '문자'표현을 결정한다.
- 기수 또는 숫자 값이 유효하지 않으면 null 값을 반환한다.
- 10진수 16진수 표현과 관련된 메서드
int n = 2; int radix = 10; // 10진수로 표현할지 16진수를 표현할지 설정 result = Character.forDigit(n, radix); //10진법에서 2번째 숫자를 문자로 리턴 return result; //'2''Java' 카테고리의 다른 글
제어문 (0) 2023.04.26 Java 연산자 (0) 2023.04.07 변수(Variable) - String (0) 2023.04.04 JAVA의 매서드 (0) 2023.03.28