■ 변수
변수란 ( Variable )?
- 타입이 종류라면, 변수는 데이터의 저장 공간을 의미한다.
- 예 ) String name1 = "헬로"; 에 사용한 name1 이 변수이다
- 변수를 사용하는 이유에는 다음과 같이 있다.
- 메모리에 데이터의 저장 공간을 확보하기 위해.
- 다른 개발자와 협업 시 데이터의 이름(변수명)을 붙여 소통한다.
- 데이터를 재사용한다.
■ 변수의 선언과 할당.
자바 프로그램을 사전에 비유하면, 사전에 등록된 단어만 프로그램에서 사용할 수 있다. 만약 사전에 등록되지 않은 단어를 사용하려고 한다면, 직접 사전에 등록해 주어야 한다. 이를 변수를 선언하고 할당한다고 말한다. 즉, 변수를 선언하는 것은 데이터를 저장하기 위한 공간을 메모리상에 확보하는 것을 의미하며, 변수의 값을 할당하는 것은 선언을 통해 확보한 메모리 공간에 값을 저장하는 것을 의미한다.
코드를 통해 변수를 사용하는 방법을 구체적으로 봐보자.
int number; // 정수 타입 변수명
// 변수를 선언.
number = 6;
// 선언한 변수에 값을 할당.
int number = 6;
// 선언과 할당을 동시에 할 수 있다.
// 이처럼 선언과 할당을 동시에 하는 것을 '초기화'라고 한다.
// 즉, '정수형 변수 number를 선언하고, 6으로 초기화한다'고 할 수 있다.
여기서 주의할 점은, 대입 연산자인 '='이다.
이는 수학에서 말하는 동등하다는 의미가 아닌, 오른쪽의 값을 왼쪽으로 저장한다는 의미이다.
변수는 말 그대로 "변하는 수" 이기 때문에 재할당이 가능하다.
int NUmber = 6;
System.out.print(Number) // 6출력
Number = 9;
System.out.print(Number) // 9출력
■ 변수명 짓기
변수명은 영문자(대문자, 소문자)나 숫자, _를 사용할 수 있다. 자바에서 변수명은 일반적으로 카멜 케이스 (camelCase)를 사용한다. 카멜 케이스란 낙타 등 모양을 닮았다고 해서 붙여진 이름으로, 두 번째 단어부터 대문자로 시작해 구분한다.
int camelCase
■ 사용할 수 없는 변수명
1. 숫자로 시작하는 변수명
int 10Number = 10;
2. 자바에서 이미 사용 중인 예약어 ( reserved word )
int byte;
int float;
// 등등
■ 상수
상수( constant ) 변하지 않는 수이면서, 프로그램에서 변하면 안 되는 수, 즉 고정값이다. 일반적으로 고정된 값 ( 특정 인물의 생년월일, 성별 등 ) 이 될 수도 있고, 프로그래머가 생각하기에 변하지 않아야 하는 값이 될 수도 있다. 예를 들어 계산기를 만든다고 할 때 원주율의 값 즉 pi를 곱하는 연산을 한다면 매번 pi를 새로 쓰기보다는 상수로 선언해서 사용하는 것이 좋다. 숫자를 잘못 입력하는 실수도 방지할 수 있으며, 코드 가독성도 높일 수 있기 때문이다.
자바에서는 상수는 최종을 의미하는 fianl 예악 어를 사용해 선언한다.
final double CALCULATOER_PI = 3.14;
상수는 일반적으로 대문자에 언더스코어(_)를 넣어 구분하는 SCREAMING_SNAKE_CASE를 사용한다.
■ 상수를 쓰는 이유
- 오타로 인한 에러방지
- 변경하는 안 되는 값의 보존
- 데이터의 재사용
■ 리터럴
사전적 의미로 리터럴 ( LIteral ) 은 "문자 그대로"라는 뜻을 가지고 있다. 프로그래밍 언어에서의 리터럴이란 문자가 가리키는 그 값 자체를 의미한다. 엄밀힌 말하면 리터럴은 값과 동일한 개념은 아니다. 값은 리터럴이 평가되어 만들어진 일종의 결과이기 때문이다. 예를 들어, 20이라는 정수형 리터럴은 컴퓨터 내부에 20이라는 값을 생성한다. 즉, " 리터럴은 평가되어 리터럴이 가르키는 문자 그대로 값을 생성하니, 리터럴은 곧 값 그 자체다 "라고 할 수 있다.
리터럴을 통해 생성된 값은 변수 또는 상수에 할당할 수 있다.
// 정수형 리터럴 20을 정수형 변수 currentAge에 할당
int currentAge = 20;
// 실수형 리터럴 3.14159를 실수형 변수 pi에 할당
double pi = 3.14159;
// 논리형 리터럴 true를 논리형 변수 boolean에 할당
boolean isGenius = true;
// 문자형 리터럴 'A'를 문자형 변수 firstAlphabet에 할당
char firstAlphabet = 'A';
// 문자열 리터럴 "CodeStates"를 문자열 타입 변수 learnedAt에 할당
String learnedAt = "CodeStates";
리터럴을 사용할 때 알아두어야 할 사항 두 가지가 있다.
1. Float 타입 변수에 실수형 리터럴을 할당할 시 에는, 접미사 [f]를 붙여주어야 한다.
2. long 타입의 변수에 정수형 리터럴 타입을 할당할 시 에는, [L]을 붙여주어야 한다.
- 소문자 L을 붙여도 되지만, 숫자와에 혼동을 방지하기 위해 보통 대문자 L을 사용한다.
float weight = 85.5f
float long ANITHING_NUMBER = 133214.123334L
■ 타입 변환
boolean을 제외한 기본 타입 7개는 서로 타입을 변환할 수 있다.
자동 타입 변환
아래의 두 경우에는 타입이 자동으로 변환된다.
1. 바이트 크기가 작은 타입에서 큰 타입으로 변환할 때
2. 덜 정밀한 타입에서 더 정밀한 타읍으로 변활 할 때 ( Ex. 정수 -> 실수 )
byte(1) -> short(2)/char(2) -> int(4) -> long(8) -> float(4) -> double(8)
// 타입변환 순서
// 괄호 안의 숫자는 바이트의 크기를 나타낸다
위에서 float은 4byte임에도 불구하고 int와 long보다 더 뒤쪽에 있다. float이 표현할 수 있는 값이 더 정밀하기 때문
long longValue = 12345L;
float floatValue = longValue;
// float이 long보다 정밀하므로, 자동으로 타입이 변환.
System.out.println(floatValue);
// 12345.0이 출력.
수동 타입 변환
메모리 용량이 더 큰 타입에서 작은 탑으로는 자동으로 타입이 변환되지 않는다. 이때 더 큰 데이터 타입을 작은 데이터 타입의 변수로 저장할 수 있다. 이를 캐스팅 ( casting )이라고 한다.
캐스팅 연산자인 ()를 사용하고, 연산자 안에는 변환하고자 하는 타입을 적어주면 된다.
int intValue = 128;
byte byteValue = (byte)intValue;
//int 타입으로 선언된 변수 intValue를 더 작은 단위인 byte로 변환.
System.out.println(byteValue);
//출력값은 byte의 최대 표현 값인 127이 아니라 -128.
//표현 범위를 넘으면 한 바퀴를 돌아 음수로 출력하기 때문.
'Programming > Cs' 카테고리의 다른 글
[지식] 클래스 (Class) 와 객체 (Object) (2) | 2022.05.10 |
---|---|
[OOP] 객체지향 프로그래밍 (OOP, Object oriented Programming) (2) | 2022.05.10 |
[지식] String (0) | 2022.05.04 |
[지식] Linux 기초 (0) | 2022.05.02 |
[지식] 컴퓨터와 프로그래밍의 이해 (2) | 2022.04.26 |