상수형 변수가 필요한 경우

 

방향을 표현하고 싶은 변수가 있다고 가정해 보자.

 

4번 방향으로 가고 싶으면 다음과 같이 표시할 것이다.

int direction; direction = 4; direction = SE;


만약 위 사진이 없다면 4번 방향이 어딘지 모를 것이다.

int N = 1;		N(1);
int NE = 2;		NE(2);
int E = 3;		E(3);
int SE = 4;		SE(4);
int S = 5;		S(5);
int SW = 6;		SW(6);
int W = 7;		W(7);
int NW = 8;		NW(8);

 

위에 있는 값들은 고정적으로 사용할 값들이어서 바뀌면 안 된다.

 

변수가 바뀌지 않게 앞에 "final"을 붙여주면 된다. 이를 상수형 변수이다.

final int N = 1;		N(1);
final int NE = 2;		NE(2);
final int E = 3;		E(3);
final int SE = 4;		SE(4);
final int S = 5;		S(5);
final int SW = 6;		SW(6);
final int W = 7;		W(7);
final int NW = 8;		NW(8);

변수의 생명주기

프로그램을 실행시키면 text에 올라간다. 

 

Data영역heap영역 stack영역으로 나눠진다. (전역 데이터를 관리하는 공간) 

 

stack영역에 준비물 args, total, avg, kors (보라색은 참조변수, 초록색은 일반변수) 블록 들어가기 전에 예약석에 넣은 느낌이다. 그리고 자물쇠로 봉인.

 

참조변수 같은 경우는 주소값을 미리 부여받고 봉인! 바꿀수 없으니까 다른 메모리 영역(heap)에 저장하는것이다.

 

딱 stack이랑 heap이 나눠지는 게 아니고 stack을 할당하고 나머지 공간이 heap이 되는 것이다.

 

감시컬랙터(가비지 컬렉터)는 cpu가 한가할 때 쓰레기를 수거해 간다. 가비지는 heap에만 있다. 또 메모리가 부족한 경우가 오면 가비지 컬렉터가 또 돌아가긴 한다.

 


오류

  • 구문오류(컴파일러가 잡아준다.)
x=3;
3=x;

 

  • 논문오류(치명적)
total/5; (총 3명인데 5로 나눔)
//결과가 5.77..이렇게 만들어야하는데 정수로 나눠서 정수로만 값이 나옴

 

디버거를 사용해서 오류를 잡을 수  있다.

 

 


자바의 다차원 배열과 톱니형 배열

 

//lotto 번호를 저장하기 위한 1차원 배열
int[] lotto = new int[6];

하나의 번호만 저장할 수 있다.

 

//lotto 번호를 저장하기 위한 다차원 배열
int[][] lotto = new int[3][6];

3가지의 로또번호를 저장할 수 있다.

 

자바에서는 아래 그림처럼 다차원배열이 구성되어 있다.

배열을 바꾸고 싶으면 새로운 배열에 옮겨주면 된다.

 

public class Program {
    public static void main(String[] args) {
        //int[][] lottos=new int[3][6];
        //int[][] lottos=new int[3][6]{{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18}};
        int[][] lottos={{1,2,3,4,5,6},{7,8,9,10,11,12},{13,14,15,16,17,18}};

        for(int i=0;i<3;i++) {
            for (int j = 0; j < 6; j++)
                System.out.printf("%4d, ",lottos[i][j]);

            System.out.println();
        }
        System.out.println("------ 0<->2 위치 변경 --------");

        int[] temp = lottos[0];
        lottos[0]=lottos[2];
        lottos[2]=temp;
        /*
        [1] <-> [2]

        lottos         ->2차 배열의 이름
        lottos[0]      ->1차 배열의 이름
        lottos[0][0]   ->정수 변수의 이름

        int x = lottos[0][0];     값 변수는 값을 대입하는 연산이 이루어진다.
        int[] xes = lottos[0][0]; (x) 계층이 달라요.
        int[] xes = lottos[0];    참조 변수는 새로운 이름을 만드는 것이다.
        int[] xes = lottos; (x)   계층이 달라요.
        int[][] xes = lottos;     (o) 쌉가능!

        */
        //이렇게 대입하면 처음에 선언한 배열 크기에 맞게 늘어간다.
        //다른 배열을 만들때는 new를 사용해서 해야한다.
        lottos[1]=new int []{9,9,9,9,9,9,9,9,9,9};

        for(int i=0;i<3;i++) {
            for (int j = 0; j < 6; j++)
                System.out.printf("%4d, ",lottos[i][j]);

            System.out.println();
        }

    }
}

'IT > JAVA' 카테고리의 다른 글

[Java] 함수 오버로드(overload)  (1) 2023.07.04
[Java]구조적인 프로그래밍(메서드)  (2) 2023.06.28
[Java] 배열(Array)  (0) 2023.06.21
[Java]비트 연산자로 데이터값 추출하기  (0) 2023.06.12
[Java] 문자열 (String)  (2) 2023.06.10

+ Recent posts