02. JAVA 변수(Variable) 및 데이터 유형(Data Type)

2021. 5. 10. 22:05Java/Tutorial

 

1. Java 변수와 상수


1) 변수(Variable)

  • 단 하나의 값을 저장할 수 있는 메모리 공간
  • 값 변경이 가능하며 가장 마지막에 수정한 값이 변수의 값이 된다.

 

※ 명명규칙

(필수 규칙)
1. 대소문자 구분 및 길이 제한이 없음
ex) number `< ->` Number는 서로 다른 변수임
2. 예약어나 키워드로 지정된 이름 단독으로 사용할 수 없음
ex) class (x) , classObejct (o)
3. 숫자로 시작할 수 없음
ex) 1num (x), num1(o)
4. 특수문자는 `_` 와 `$` 만 사용 가능
ex) java&Study (x), java$Study (o)

(암묵적 규칙)
1. 클래스 이름의 첫 글자는 대문자로, 변수나 메서드 이름의 첫 글자는 소문자로 한다.
ex) Class ClassName, void method(), int value
2. 여러 단어로 이루어져 있는 이름은 이어지는 단어의 첫 글자를 대문자로 한다.
ex) javaStudy, loveActualy, meetTime
3. 한글로도 작성 가능하나, 영어를 기본원칙으로 한다.

2) 상수(Literal)

  • 처음에 정해놓은 값이 바뀌지 않고 끝까지 가는 값
  • 정수형 (3, 3.14...)와 문자열 ("A", "B", "ABC"), 논리 (true/false) 등등
  • 숫자나 문자, 논리 값이 그대로의 형으로 취급되는 것
  • 보통 상수 선언 시 final 키워드를 사용하여 선언하고, 선언 이후는 값 변경 불가.
  • 선언할 때 초기화하지 않았다면 단 한 번 정할 수 있다.
static final int CONST_VALUE ;
static {
  CONST_VALUE = 1;
}

 

※ 명명규칙 (상수의 경우 필수 규칙은 변수와 동일하지만 보통 암묵적으로 규칙을 따른다)

(암묵적 규칙)
모두 대문자로 지정하며, 단어와 단어 사이는 `_` 로 구분합니다.
ex) DAY_TO_MONDAY, JAVA_VERSION, APPLE...

 

2. Java 변수의 구분


1) Data Type에 따른 구분

1-1) 기본 자료형 변수 (Primitive Data Type)

  • 메모리 상의 일정 공간을 할당하여 데이터를 저장
  • 선언과 동시에 초기화할 수도 있으며 선언한 이후에 언제든지 초기화 및 변경이 가능하다.
int number1 = 1;  //선언과 동시에 초기화
int number2;
public void sum(){
    number1 = 2;  //언제든 변경가능
    number2 = 3;  //선언 이후 초기화
}

※ 정수형 자료형

Java에서 정수의 기본 데이터는 int 로서 byte 나 short의 모든 연산은 int로 변환되어 연산됨.
정수는 2진수로 변환되어 메모리에 저장되며 해당 자료형의 Byte 크기는 표현할 수 있는 자릿수를 뜻하는데 각 자료형의 처음 1bit는 부호를 결정하는 MSB(Most Sigificant Bit - 양수 0, 음수 1) 이기 때문에 자료형 크기의 2(n-1) 만 큼만 표현한다.

 

프로그램에서 음수 표현 방식

프로그램에서 음수는 어떻게 표현하는 걸까? 프로그램에서 모든 연산은 2진수로 이루어진다. 이 때문에 2진수에서 음수를 나타내는 방법으로 부호를 나타내는 최상위 비트(MSB : Most Significant Bi

lovelettee01.tistory.com

* 표현 범위 - bit 단위(1byte는 8bit)로 표현 ( -2(n-1) ~ 2(n-1)-1 )

ex) byte (-2(8-1) ~ 2(8-1) - 1 => -128 ~ 127), short (-2(16-1) ~ 2(16-1) - 1 => -32768 ~ 32767)

자료형 메모리(Bit 구성) 정수 표현 범위
byte 1 Byte
(부호(1bit) + 지수(7bit) = 8 bit)
-128 ~ 127
short 2 Byte
(부호(1bit) + 지수(15bit) = 16 bit)
-32768 ~ 32767
int 4 Byte
(부호(1bit) + 지수(31bit) = 32 bit)
-2147483648 ~ 2147483647
long 8 Byte
(부호(1bit) + 지수(63bit) = 64 bit)
-922337036854775808 ~ 9223372036854775807

 

※ 실수형 자료형

실수는 정수를 표현하는 지수부와 소수를 표현하는 가수부로 나뉘는데 가수 부분은 무한대이기 때문에 한정된 메모리의 저장 공간 내에서 무한대 값을 저장해야 하기 때문에 이를 표현하기 위한 부동 소수점 규칙을 사용하는데 이는 IEEE 754 표준에 정의되어 있습니다.

이 때문에 각 자료형의 Bit를 넘어서는 순간 오차가 발생하며, 값의 정확성을 보장하지 못하기 때문에 이점을 인지하고 사용에 유의해야 한다.

자료형 메모리(Bit 구성) 실수표현 범위
float 4 Byte
(부호(1bit) + 지수(8bit) + 가수(23bit) = 32 bit)
1.40239846E-45f ~ 3.40282347E+38f
double 8 Byte
(부호(1bit) + 지수(11bit) + 가수(52bit) = 64 bit)
4.94065645841246544E-324 ~ 1.79769313486231570E+308

 

※ 문자형 자료형

부호가 존재하지 않는 자료형으로 0 ~ 2n -1 범위의 문자를 표현

ASCII 코드 또는 유니코드 (UTF-8) 문자열 표현

( *유니코드 란, 초창기 사용하던 ASCII 코드(7bit)의 표현 범위의 확장 버전으로 2Byte(16bit) 공간에 할당 )

public void Character(){
    char charMax = '\uffff'; //'?' - Unicode 문자열 저장
    char charA   = 97;       //'a' - ASCII코드 문자열 저장
}
자료형 메모리 문자 표현 범위
char 2Byte \u0000 ~ \uFFFF

 

※ 논리형 자료형

참 / 거짓을 판별하는 자료형

주로 조건문에서 분기 처리를 위해 사용

자료형 메모리 표현 방식
boolean 1Byte true / false

 

1-2) 참조 자료형 변수 (Reference Data Type)

  • Class를 자료형을 참조하여 생성하기에 Class타입의 자료형이라고 불린다.
  • new 예약어를 이용한 메모리 참조를 하며 Class에 따라 메모리의 크기가 정해진다.
Class c = new Class();
  • String은 예외로 값을 초기화할 때 값을 직접 할당할 수도 있고 참조형으로 선언할 수도 있음
String str = "Hello";
String str = new String("Hello");

 

2) 생명주기(Life Cycle)에 따른 구분

2-1) 지역변수(Local Variable)

  • 중괄호 `{ }` 내에 선언된 변수
  • 중괄호 시작 `{` 에서 `}` 종료되는 시점까지만 사용 가능한 변수
public void local() { 	// `{` 시작
    int num = 1;
} 			// `}` 종료
num = 1; 		//에러발생 - 시작과 종료 사이에서만 사용
  • 변수 초기화가 이뤄지지 않으면 에러 발생함
public void local() {
    int num;
    num++;  		//에러발생
}

2-2) 매개변수(Parameter Variable)

  • 보통 파라미터라고 불린다.
  • 생성자 또는 메서드 내에 선언되어 외부에서 전달받는 변수로서 해당 항목에 종속된 지역변수이므로 지역변수와 동일한 특성을 가진다.
setInt(0); //매개변수 전달
public void setInt(int param) {
    System.out.println(param); //0 - 지역변수로서의 매개변수
}

 

2-3) 인스턴트 변수(instance Variable)

  • 지역변수를 제외한 클래스 안에 선언된 변수로 클래스 내에서 어디서든 사용 가능
  • 객체 생성 시 초기화되며, 객체를 참조하는 다른 객체가 존재하지 않는 경우 소멸된다.
  • 각각의 생성된 인스턴스 변수마다 각기 다른 참조 값을 가질 수 있다.
  • 기본 자료형 변수의 경우 Defalut 값이 존재하여 초기화하지 않을 경우 Default 값으로 초기화된다. (지역변수와의 차이점)
class DefaultVariable{
    byte defByte;       //0
    short defShort;     //0
    int defInt;         //0
    long defLong;       //0l
    float defFloat;     //0.0f
    double defDouble;   //0.0

    char defChar;       //\u0000 '공백'
    boolean defBoolean; //false
}
  • 지역변수와 동일한 이름의 변수명을 지정할 수 있으며 지역변수 내에서 변수명 사용 시 지역변수를 우선한다.
  • 인스턴스 변수를 지역변수에서 사용할 시에는 인스턴스 변수 자신을 지칭할 수 있는 this 키워드를 이용하여 접근 가능하다.
int sameInt;
public void local() {
  int sameInt = 1;                  //인스턴스 변수와 동일한 이름으로 선언가능
  System.out.println(sameInt);      //1 - 지역변수가 우선
  System.out.println(this.sameInt); //0 - 인스턴스 변수 지정
}

 

2-4) 클래스 변수(Class Variable)

  • 인스턴스 변수 앞에 static을 붙임으로써 선언
  • 인스턴스 변수는 각각의 인스턴스마다 참조 값을 가지는 반면 클래스 변수는 값을 공유하는 변수
  • 클래스 로딩 시 생성되어 클래스 명으로 접근이 가능함.
  • 인스턴스 클래스와 동일하게 Default 값으로 초기화된다.
public class ClassVariable {
  static int shareInt;         //0
  public static void main(String ar[]){
	//0 - 클래스명.변수명 으로 접근가능
	System.out.println( ClassVariable.shareInt );
  }
}

'Java > Tutorial' 카테고리의 다른 글

01. Java 버전별 특징  (0) 2021.05.09