나의 IT일지
변수와 상수 본문
우리가 데이터 값을 다루게 될 때, 해당 데이터 값을 다른 명령어에 사용하는 경우나 명령어들의 같은 데이터 값을 한번에 변형해야 하는 경우가 생기게 된다. 이럴 경우에 데이터 값을 메모리에 저장해야 하는데, 이때, 사용하는 저장공간이 변수이다.
만약 사용하려는 데이터 값을 저장해 놓지 않는다면, 일일히 데이터 값을 명령어에 대입해야하고, 일일히 찾아서 데이터값을 수정해야 한다. 그래서 우리는 데이터 값을 저장하는 방법을 알아야 한다.
변수
변수란 데이터 값을 저장하는 공간으로, 데이터 값에 의미를 부여하거나, 데이터 값을 한번에 수정하거나, 다른 명령어에 사용하기 위해서 사용한다.
변수 이름 지정
변수를 생성할 때, 변수명을 정해야 하는데, 변수 이름은 명명 규칙이 존재한다.
- 숫자로 시작 불가
- "$","_" 외 특수문자 사용이 불가능
- 대소문자 구분
- 예약어는 사용 불가
예약어란 프로그래밍 언어에서 의미를 가지고 사용하는 단어로, 변수 이름으로 사용이 불가능한 단어들이다.
예약어 분류 | 예약어 |
기본 타입 | boolean, byte, char, short, int, long, float, double |
접근 제한자 | private, protected, public |
클래스 관련 | class, abstract, interface, extends, implements, enum |
객체 관련 | new, instanceof, this, super, null |
메소드 관련 | void, return |
제어문, 반복문 | if, else, switch, case, default, for, do, while, break, continue |
논리값 | true, false |
예외 처리 | try, catch, finally, throw, throws |
기타 | package, import, synchronizes, final, static |
이러한 규칙으로 인해 개발자들은 주로 사용하는 변수 이름 작명하는 방법이 3가지 만들었으며, 헝가리안 표기법, 카멜 표기법, 파스칼 표기법이 있다.
- 헝가리안 표기법 : 변수에 자료형을 구분할 수 있는 접두사 달아 표기 ex)int num; -> int iNum;
- 카멜 표기법 : 두개 이상의 단어가 사용될 경우, 두번째 단어의 시작은 대문자 ex) int newName
- 파스칼 표기법 : 클래스명 작성 시, 모든 단어의 첫 글자를 대문자 ex) class MyClass
변수 선언(생성)
이렇게 변수명을 정했으면, 변수에 어떤 형태의 데이터를 저장할지 결정해야 한다. 변수는 다양한 타입의 값을 저장할 수 없기 때문에 변수를 생성할 때, 자료형을 통해 저장할 데이터의 형태를 정해야 한다.
타입 변수명;
위의 구조는 변수를 선언하는 구조로, 메모리 카드의 주소를 할당 받아 자료형에 해당하는 저장공간을 생성한다. 이때 타입이란 변수가 가질 수 있는 데이터의 형식으로, 정수,문자,실수,논리 등의 형식이 있다.
타입 | 저장가능 데이터 형태 | 저장 공간 | 허용 가능 리터널 범위 | 형식 지정자 |
int | 정수형 | 4byte (32bit) | -2^31 ~ 2^31 -1 | %d |
short | 정수형 | 2byte (16bit) | -2^15 ~ 2^15 -1 | %d |
long | 정수형 | 8byte (64bit) | -2^63 ~ 2^63 -1 | %d |
float | 실수형 (소수점 7자리) | 4byte (32bit) | 1.4*10^-45 ~ 3.4*10^38 | %f |
double | 실수형(소수점 15자리) | 8byte (64bit) | 4.9*10^-324 ~ 1.8*10^308 | %f |
char | 문자형 | 2byte (16bit) | %c | |
String | 문자열 | 문자 갯수 | %s | |
boolean | 논리형 | 1byte (4bit) | true , false | %b |
같은 형태를 가진 자료형이라도 저장공간이 다르다는 것을 알 수 있으며, 그로 인해 리터널 범위도 다르다는 것을 알 수 있다. 리터널이란 프로그래머에 의해 직접 입력되어서 저장된 값을 말한다.
변수 저장과 초기화
변수를 생성되었으면, 이제 변수에 데이터를 저장해야 하는데, "="연산자를 이용해서 저장한다. "="연산자는 수학에서는 등호의 의미이지만, 프로그래밍에서는 왼쪽의 값을 오른쪽의 변수에 저장한다는 뜻을 가지고 있다.
변수명 = 리터널 값
package pack1;
public class Code1 {
public static void main(String[] args) {
//정수형
int a = 100;
//실수형
float f = 3.14f;
double d = 3.14;
//문자형
char c = 'a';
//문자열
String s = "hello";
//논리형
boolean b = true;
System.out.println(a);
System.out.println(f);
System.out.println(d);
System.out.println(c);
System.out.println(s);
System.out.println(b);
}
}
위의 코드를 보면, "="연산자를 이용해서 변수에 값을 저장하는 것을 볼 수 있다. 그런데 저장하는 시점이 변수를 만드는 시점인 것을 확인 할 수 있는데, 변수를 만들면서 값을 저장하는 것을 초기화라고 한다.
타입 변수명 = 리터널 값;
변수에 데이터를 저장할 때 주의사항이 있는데, 먼저 float형은 저장하는 데이터값에 "f"붙혀서 컴파일러가 float타입이라는 것을 알게 해야 한다. 그리고 문자형은 홀따옴표(' ')를 사용하며, 문자열은 쌍따옴표(" ")를 사용하여 문자형인지 문자열인지 알게 해야 한다.
타입 변환
변수의 타입이 동일할 경우, 두 변수만으로 값을 복사해서 사용할 수 있다. 그렇다면 두 변수의 타입이 다르지만 값을 복사해야 하는 경우 어떻게 해야할까?
변수의 타입을 변환하는 방법은 자동 형변환 방법과 강제 형변환 방법이 있다.
자동 형변환 방법은 자동으로 타입이 변환되는 방법으로, 값의 허용범위가 작은 타입이 허용범위가 큰 타입으로 저장될 때 발생한다.
큰 허용 범위 타입 변수 = 작은 허용 범위 타입 변수
강제 형변환 방법은 강제로 타입을 변환하는 방법으로, 값의 허용범위가 큰 타입이 허용범위가 작은 타입으로 저장할 때 사용하는 방법이다. 이때 강제로 타입을 변환하는 것이기에, 데이터의 손실이 발생하게 된다.
작은 허용 범위 타입 변수 = (작은 허용 범위 자료형)큰 허용 범위 타입 변수
package pack1;
public class Code2 {
public static void main(String[] args) {
int a =65;
float f = a; //자동 형변환
System.out.println(f);
char c = (char)a; //명시적 형변환
System.out.println(c);
}
}
상수
상수란 변하지 않는 데이터, 항상 유지되는 데이터으로, 상수의 범위가 숫자데이터만 있는것이 아니라 변수나, 객체, 클래스가 될 수도 있다. 그런데 변수는 데이터를 저장하는 공간이며, 저장값은 변경이 가능하다. 그렇다면 변수에 저장된 값을 변경하지 않게 상수처럼 만들 수 있다는 것이며, 이를 변수의 상수화라고 한다.
final 클래스or 객체or 자료형 변수명 = 초기값
package pack1;
public class Code3 {
public static void main(String[] args) {
int a=3;
a=4;
System.out.println(a);
final double PI =3.14;
PI = 3.152
System.out.println(PI);
}
}
위의 코드는 에러가 발생하는 코드이며, 실행이 되지 않는다. 왜냐하면, "PI"변수는 상수화가 되어 있는데 상수화가 된 변수의 값을 변경하려고 했기 때문이다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
연산자 (논리, 비트) (1) | 2023.03.17 |
---|---|
연산자(산술, 단항, 비교) (0) | 2023.03.16 |
Java 프로그래밍의 이해 (0) | 2023.03.14 |
JDK와 Eclipse 설치 (0) | 2023.03.11 |
프로그래밍과 Java (0) | 2023.03.10 |