자바에서의 변수(Variable)
변수란?
내용을 어딘가에 담아두어야 할 때 사용되는 것을 "변수(variable)"라고 부른다.
변수의 종류
- 지역 변수 local variables : 중괄호 내에서 선언된 변수
- 매개 변수 parameters : 메소드에 넘겨주는 변수
- 인스턴스 변수 instance variables : - 메소드 밖에 , 클래스 안에 선언된 변수. 앞에는 static이라는 예약어가 없어야 한다.
- 클래스 변수 class variables : 인스턴스 변수처럼 메소드 밖에, 클래스 안에 선언된 변수 중에서 타입선언 앞에 static이라는 예약어가 있는 변수
public class VariableTypes{
int instanceVariable;
static int classVariable;
public static void main(String[] parameter) {
int localVariable;
}
}
위의 코드에서 instanceVariable
는 인스턴스 변수다.
타입선언 앞에 static
가 붙어있는 classVariable
은 클래스 변수이다.
main메소드명 옆에 매개변수자리에 있는 parameter
는 매개변수, main메소드 안에 선언되어있는 변수 localVariable
은 지역변수이다.
각 변수는 생명주기가 다르기 때문에 이름을 다르게 부르는 것이다. 각 변수의 생명주기를 정리해보자.
- 지역 변수 : 지역변수를 선언한 중괄호 내에서만 유효하다. {} 내에서만 유효
- 매개 변수 : 메소드가 호출될 때 생명이 시작되고, 메소드가 끝나면 소멸된다.
- 인스턴스 변수 : 객체가 생성될 때 생명이 시작되고, 그 객체를 참조하고 있는 다른 객체가 없으면 소멸된다.
- 클래스 변수 : 클래스가 처음 호출될 때 생명이 시작되고, 자바 프로그램이 끝났을 때 소멸된다.
왜 이렇게 복잡하게 변수의 종류를 나눈걸까? 정답은 각각의 용도가 다르기 때문이다.
참고 C++이나 C언어에서는 할당한 변수에 어떤 값을 지정했으면 개발자가 "이제 더이상 필요 없어"라고 지정할 수 있다. 그러면 바로 메모리에서 사라진다. 하지만 자바는 개발자가 임의로 "이제 필요없어요 지워주세요"를 할 수가 없다. 왜냐면 자바는 가비지 콜렉터(Garbage collector)라는 것이 때가 되면 알아서 메모리를 청소해주기 때문이다. 자세한 내용은 추후에 다시 정리해보겠다.
변수 명명규칙
변수는 명명규칙이 있다. 기본적인 규칙은 아래와 같다.
- 길이의 제한은 없다.
- 첫 문자는 유니코드 문자, 알파벳, $, _(언더코드), 만 올 수 있다. 하지만 보통 $나_는 사용하지 않는다.
- 두번째 문자부터는 유니코드 문자, 알파벳, 숫자, $,_ 중 아무거나 사용할 수 있다.
- 보통은 메소드 이름처럼 지정해서 사용하면 된다. 첫 문자는 소문자로 시작하는 단어이고, 두번째 단어의 첫 문자만 대문자로 시작하면 된다.
- 상수의 경우에는 모두 대문자로 지정하며, 단어와 단어 사이에는 _로 구분한다.
(상수는 절대 변하지 않는 값을 이야기한다. 따라서 계속해서 변하는 일반적인 변수에는 _를 붙이지 않는게 좋다.)
자바의 자료형(Data type)
- 기본 자료형 Primitive data type
- 참조 자료형 Reference data type
참조 자료형은 내 마음대로 만들 수 있지만 기본 자료형은 정해져 있다. 참조 자료형은 new라는 예약어를 사용해 초기화를 해야하지만 기본 자료형은 바로 값을 입력해 초기화가 가능하다.
초기화란? 어떤 변수든 값을 저장하기 위해서 만든다. 저장할 값이 정해져 있다면, 그 값을 지정해주면 되겠지만, 항상 저장할 값이 정해져 있지는 않다. 그래서, 변수를 선언할 때에는 초기화를 해 줘야 변수가 사용할 수 있는 상황이 된다고 할 수 있다.
위에서 기본 자료형은 정해져있다고 말했다. 그렇다면 기본 자료형은 어떤 것들이 있을까?
위의 그림에 나와있듯이 기본자료형은 총 8개로 나열해보면 아래와 같다.
- 정수형 : byte, short, int , long
- 실수형 : float, double
- 논리형 : boolean
- 문자형 : char
정수형과 실수형은 범위가 정해져 있다. 아래의 그림을 참고하여 해당하는 참조형의 범위를 알아보자.
일반적인 웹 어플리케이션에서는 int
와 long
을 많이 쓴다. 보통은 int
를 많이 사용하지만 int
로 표현되기에 부족한 부분은 long
을 사용한다. long을 사용하는 경우 선언할 때 L
을 붙여 주는 것이 좋다. 붙이지 않을 경우 int로 인식되기 때문이다.
소수점 처리방식
float
와 double
은 모두 소수점을 처리하기 위해서 사용된다. float는 32비트 double
은 64비트로 표현된다. 이 두가지 소수점은 간단한 계산에서는 사용해도 무방하지만, 돈 계산과 같이 중요한 부분에서는 이 타입들을 사용해선 안된다.
왜냐하면, float
와 double
은 32비트와 64비트로 제공할 수 있는 범위를 넘어서면 그 값의 정확성을 보장하지 않는다. 때문에 자바에서는 돈 계산과 같이 정확한 계산이 요구될 때 BigDecimal
이라는 클래스를 사용해야만 한다.
char에 대해서
char는 캐릭터character라고 읽는다. char의 범위는 0~65,535이다. 정수형으로 속하기도 하는 문자형 char는 int보다 좁은 범위에 속해있다. 때문에 아래의 코드를 실행했을 때 형변환이 가능해야 한다. 형변환에 대해서는 상속을 정리한 내용을 참고하기 바란다.
public class PrimitiveTypes{
public static void main(String[] args){
PrimitiveTypes types = new PrimitiveTypes();
types.checkChar();
}
public void checkOtherTypes(){
short shortMax = 32767;
int intMax = 2147483647;
long longMax = 9223372036854775807L;
}
public void checkChar(){
char charMin = '\u0000';
char charMax = '\uffff';
System.out.println("charMin=["+charMin+"]");
System.out.println("charMax=["+charMax+"]");
int intValue = 'a';
System.out.println("intValue = ["+intValue+"]");
}
}
위 코드의 결과값은 아래와 같이 나온다.
charMin=[ ] //(1)
charMax=[?]
intValue = [97] //(2)
(1) \u0000은 16진수로 \u뒤에 16진수의 수를 붙인 것이다. 아무것도 출력이 안된 것 처럼 보이지만 사실은 빈 공백이 출력된 것이다.
(2) a를 입력했는데 값이 97이 나오는 이유는 ASCII코드의 코드번호 97이 a이기 때문이다.
출처 : 자바의 신
'Language > Java' 카테고리의 다른 글
[Java] JAVA 8 특징 (0) | 2021.08.18 |
---|---|
[Java] 다형성(polymorphism)이란? (0) | 2021.08.15 |
[Java] 상속(Inheritance)에 대해서 (0) | 2021.08.14 |
[Java] 오버라이딩(Overriding)과 오버로딩(Overloading)의 차이점 (0) | 2021.08.11 |
[Java] 삼항연산자 알아보기 (0) | 2020.11.25 |
댓글