카테고리 없음

변수와 자료형

casylm 2024. 6. 30. 19:33

변수란?

프로그래밍을 할 때, 내용을 담아둘 저장공간이 필요하다. 이때, 데이터를 저장하는 저장공간을 변수라고 한다.

 

변수는 왜 필요할까?

마트에서 10% 할인 과일들을 20%로 할인률을 높여 판매한다고 가정해보자.

변수가 없다면 다음과 같이 모든 항목을 일일히 수정해야 한다.

package Variable;

public class variableMain {
    public static void main(String[] args) {
        // 할인률 10%
        System.out.println("apple:" + (1000 * 0.1));
        System.out.println("pineApple:" + (5600 * 0.1));
        System.out.println("melon:" + (6000 * 0.1));
        System.out.println("banana:" + (2500 * 0.1));
        System.out.println("watermelon:" + (20000 * 0.1));

        // 할인률 20%
        System.out.println("apple:" + (1000 * 0.2));
        System.out.println("pineApple:" + (5600 * 0.2));
        System.out.println("melon:" + (6000 * 0.2));
        System.out.println("banana:" + (2500 * 0.2));
        System.out.println("watermelon:" + (20000 * 0.2));
    }
}

 

5개의 항목을 수정 할 때는 시간이 얼마 걸리지 않지만, 만약 마트의 모든 물품을 할인한다면? 새로 가격을 지정하는데 많은 시간이 소요될 것이다.

 

혹은, 마트에서 오늘 판매한 수익을 한달 뒤의 수익과 비교하고 싶다고 해보자. 오늘 수익을 저장해두지 않는다면 한달 후 금액 비교를 할 수 없을 것이다.

 

이와 같이 변수는 코드의 유지/보수와 재사용 위해 사용된다. 

 

변수의 종류

자바에서는 변수의 종류를 크게 네가지로 나눌 수 있다.

- 지역변수(local variable)
중괄호 내에 선언된 변수
- 매개변수(parameters)
메소드를 호출 할 때 넘겨주는 변수
- 인스턴스 변수(instance variable)
클래스 안, 메소드 밖에 선언된 변수
- 클래스 변수(class variable)
인스턴스 변수와 선언 위치는 같지만, 변수명 앞에 static이 붙은 변수

 

코드 내 변수의 위치는 다음과 같다.

package Variable;

public class variableMain {
    int instanceVariable; // 인스턴스 변수
    static int classVariable; // 클래스 변수
    
    public static void main(String[] args) {
        variableMain v = new variableMain();
    }
    
    public void variableType(int parameter){ // 매개변수
        int localvariable; // 지역변수
    }
}

 

변수 종류는 어떤 기준으로 나눌 수 있을까? 생명 주기에 따라

생명주기란, 변수가 생성되어 소멸되기 전까지의 기간을 의미한다. 4가지의 변수는 다음과 같은 생명주기를 같는다.

변수 TYPE 생성 소멸
지역변수 중괄호 시작 중괄호 끝
매개변수 메소드 시작 메소드 끝
인스턴스변수 객체 생성 객체의 참조가 없을 때
클래스변수 클래스 호출 시 자바 프로그램 종료 시

 

변수의 선언과 초기화

변수가 무었인지 알아봤으니, 이 변수를 사용하는 방법에 대하여 알아보자. 변수 선언은 다음과 같은 과정을 통해 이루어진다.

public class variableMain {
    public static void main(String[] args) {
        int variableTest; // 변수 선언
    }
}

변수에 담을 데이터의 타입을 가장 먼저 작성 한 후, 뒤에 변수의 이름을 정한다. 이때, 변수 이름은 추후 변수 안 데이터의 값에 접근 할 때 사용되어진다.

 

변수를 선언 할 때 자바는 메모리 임의의 영역에 데이터 저장 공간을 할당하고, 데이터를 저장한다. 이때, 할당된 데이터 공간에 이전에 사용흔적(ex. 데이터 값)이 있다면 출력시 어떤 값이 나올까? 이전 프로그램에 의해 사용된 남은 값(쓰레기 값)이 출력되어 의도와 다르게 동작 할 수 있다. 문제를 방지하기 위해 변수 선언과 동시에 값을 할당하는 과정을 초기화라고 한다.

 

초기화 방법은 다음과 같다.

public class variableMain {
    public static void main(String[] args) {
        int variableTest = 10;
        
        System.out.println(variableTest);
    }
}

변수 선언 후 '=' 오른쪽에 자료형에 맞는 값을 할당한다.

 

※ IDE(ex. 인텔리제이)에서는 이를 방지하기 위해, 지역 변수 선언 시 초기화를 하지 않으면 오류를 출력한다.

클래스 변수, 인스턴스 변수는 생성 시 초기화를 하지 않으면 자동으로 자료형의 기본 값이 할당된다.

 

자료형이란?

변수에 담을 데이터의 종류를 의미한다. 자료형은 기본 자료형과 참조 자료형이 있으며, 기본 자료형 8개, 참조 자료형은 사용자가 마음대로 생성가능 하다.

 

+ 변수와 자료형의 관계는?

변수는 데이터를 담는 공간, 자료형은 변수에 들어가는 데이터의 타입을 의미한다.

 

기본자료형과 참조자료형

기본자료형은 자바에서 지정해놓은 타입들을 의미하며 기존 8개 외에 추가로 생성이 불가능하다. 반면, 참조 자료형은 사용자가 마음대로 만들 수 있다. 

 

자료형의 초기화

package Variable;

public class variableMain {
    public static void main(String[] args) {
        float primitiveData = 3.5f; // 기본 자료형 초기화

        variable v = new variable(30); // 참조 자료형 조기화
    }
}

 

기본 자료형과 참조 자료형의 초기화 방식은 다음과 같은 차이가 있다. 기본 자료형은 '=' 우측에 값을 바로 할당하는 반면, 참조 자료형은 예약어 new를 사용하여 객체를 생성 및 초기화 한다.

 

기본자료형의 종류

기본 자료형은 숫자와 boolean(참/거짓) 타입으로 나뉘며 숫자형은 다시 정수/소수형으로 분류된다.

정수 자료형: byte, short, int, long, char

실수 자료형: float, double

 

기본 자료형의 대한 자세한 설명은 추후 참조 자료형과 함께 별도 포스팅 할 예정이다.

 

* 추가 학습 방향

- 변수 종류별 메모리 선언 위치

- 변수 선언 시 메모리에 공간이 할당되는 과정