본문 바로가기
언어/JAVA

[변수]

by 코딩맛집 2023. 1. 13.

변수란 (Variable)?

하나의 값과 타입을 저장할 수 있는 메모리의 공간. 수시로 값이 변동될 수 있다.

 

변수의 선언

프로그램은 변수 이름을 통해서 메모리 주소에 접근하고, 그곳에 값을 저장하거나 값을 읽는다.

//1. 정수 값을 저장할 수 있는 age 변수 선언
int age;
//2. 같은 타입의 변수는 콤마(,)를 이용해서 한꺼번에 선언할 수 있다.
double x, y, z;

 

변수 명명 규칙

1. 첫 번째 글자는 문자이거나 '$','_'이어야 하고 숫자로 시작할 수 없다. (필수)

2. 영어 대소문자가 구분된다. (필수)

3. 자바 예약어는 사용할 수 없다. (필수)

4. 첫 문자는 영어 소문자로 시작하되, 다른 단어가 붙을 경우 첫 문자를 대문자로 한다.(관례)

5. 한글은 포함하지 않는다. 문자 수의 제한은 없다. 길이가 프로그램 실행과는 무관하다.(관례)

6. 변수가 어떤 값을 저장하고 있는지 쉽게 알 수 있도록 의미 있는 변수 이름을 지어주는 것이 좋다.

 

분류 예약어
기본 데이터 타입 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
기타 transient, volatile, package, import, synchronized, native, final, static, strictfp, assert

* instanceof()

- 객체 타입을 확인하는 연산자

- 형변환 가능 여부를 확인하며 true/false로 결과를 반환

- 주로 상속 관계에서 부모 객체인지 자식 객체인지 확인하는 데 사용된다. (자신의 집이 맞는지)

- 객체 instanceof 클래스

class Parent{}
class Child extends Parent{}

public class InstanceofTest {
    public static void main(String[] args){
        Parent parent = new Parent();
        Child child = new Child();

        System.out.println(parent instanceof Parent); //true
        System.out.println(child instanceof Parent); //true
        System.out.println(parent instanceof Child); //false
        System.out.println(child instanceof Child); //true
        

    }
}

 

변수의 초기화

변수를 선언하고 처음 값을 저장할 경우, 이러한 값을 초기값이라고 한다.

변수에 최초로 값이 대입될 때, 메모리에 할당되어 값이 저장된다.

// 첫번째 방법
int score;
score = 90;

// 두번째 방법
int score = 90;

 

리터럴?

코드에서 직접 입력된 변수의 초기값.

사실, 리터럴은 상수와 같은 의미이지만, 프로그램에서는 상수를 "값을 한 번 저장하면 변경할 수 없는 변수"로 정의하기 때문에 이와 구분하기 위해 "리터럴"이라는 용어를 사용한다.

 

리터럴 타입  
정수 byte, char, short, long, int  
실수 float, double  
문자 char 작은 따옴표(')로 묶은 텍스트
: 역슬래쉬(/)가 붙은 리터럴은 이스케이프 문자라고도 한다.
문자열 String 큰 따옴표(")로 묶은 텍스트
: 큰 따옴표 안에는 텍스트가 없어도 문자열 리터럴로 간주된다
논리 boolean  

 

변수값 읽기

변수는 초기화가 되어야 읽을 수 있다. 초기화되지 않으면 컴파일에러가 발생한다.

 

변수의 사용 범위

변수는 중괄호 {} 블록 내에서 선언되고 사용된다. 중괄호 블록을 사용하는 곳은 클래스, 생성자, 메소드이다.

메소드 블록 내에서 선언된 변수를 로컬 변수라고 부른다. 기본적으로 변수는 선언된 블록 내에서만 사용이 가능하다.

if, for, while을 제어문이라고 하는데, 제어문 블록에서 선언된 변수는 해당 제어문 블록 내에서만 사용이 가능하다.

 

어떤 위치에서건 사용할 수 있도록 한려면 메소드 블록 첫머리에 선언하는 것이 좋다.

public static void main(String[] args) {
int var1;

if(){
	int var2;
	//var1과 var2 사용 가능
}

	//var1만 사용가능
}

데이터 타입

byte 타입

색상 정보 및 파일 또는 이미지 등의 이진(바이너리) 데이터를 처리할 때 주로 사용된다.

 

int 타입

정수를 저장할 떄는 일반적으로 int 타입을 사용한다. 자바에서 정수 연산을 하기 위한 기본 타입이다. 쉽게 설명하면 byte타입 또는 short 타입의 변수를 +연산하면 int 타입으로 변환된 후 연산되고 연산의 결과 역시 int 타입이 된다. 이것은 자바에서 정수 연산을 4byte로 처리하기 때문이다.

 

char 타입

  • 유니코드?

자바는 모든 문자를 유니코드로 처리한다.

유니코드는 세계 각국의 문자들을 코드값으로 매핑한 국제 표준 규약이다.

자바는 하나의 유니티코드를 저장하기 위해 2byte 크기인 char 타입을 제공한다. 유니코드는 음수가 없기 때문에 char 타입의 변수에는 음수 값을 저장할 수 없다. char 타입에 저장할 수 있는 값은 0~65535까지 2^16개이다. 

char 타입 변수에 작은 따옴표로 감싼 문자를 대입하면 해당 문자의 유니코드가 저장된다.

char var1 = 'A'; //유니코드: 0x0041 -> 2진수: 00000000 01000001

char 변수에 직접 유니코드 정수값을 저장할 수도 있다.

char c = 65; //10진수
char c = '\u0041' //16진수

 

유니코드는 0 ~ 65535 범위의 2byte 크기를 가진 정수값이다.

0~127까지는 아스키 문자 (특수기호 및 영어 알파벳)가 할당되어 있고

44032~55203까지는 한글 11172자가 할당되어 있다.

 

유니코드 얻기

char c = 'A';

int uni = c;
System.out.println(uni)

//출력 : 65

short 타입

C언어와 호환을 위해 사용되며 비교적 자바에서는 잘 사용되지 않는 타입이다.

 

long 타입

수치가 큰 데터를 다루는 프로그램에서는 long 타입이 필수적으로 사용된다. 대표적인 예가 은행 및 우주와 관련된 프로그램이다. int 타입의 저장 범위를 넘어서는 큰 정수는 반드시 소문자 'l' 이나 대문자 'L'을 정수값 뒤에 붙여야 한다. 그렇지 않으면 컴파일 에러가 난다. 일반적으로 소문자 'l' 은 숫자 '1'과 비슷해 혼돈하기 쉬우므로  대문자 'L'을 사용한다.

long var1 = 1000000000000L;

 

float 타입, double 타입

float, double의 메모리 사용 크기는 각각 int와 long의 크기와 같지만, 정수 타입과는 다른 저장 방식 때문에 정수 타입보다 훨씬 더 큰 범위의 값을 저장할 수 있다. 실수는 부동 소수점 방식으로 저장된다.

예를 들어 실수 1.2345는 부동 소수점 방식으로 표현하면 0.12345 x 10^1이며, 가수는 0.12345이고 지수는 1이 된다.

float 타입과 double 타입은 가수와 지수를 저장하기 위해 전체 bit를 나누어 사용한다.  

정밀도를 요구하는 계산에서는 double을 사용해야 한다. 자바는 실수 리터럴의 기본 타입을 double로 간주한다. 이 말은 실수 리터럴을 float 타입 변수에 저장하려면 리터럴 뒤에 소문자 'f'나 대문자 'F'를 붙여야 한다.

double var1 = 3.14;
float var2 = 3.14f;
float var3 = 3.14F;

 

boolean 타입

두 가지 상태값을 저장할 필요성이 있을 경우에 사용된다.