본문 바로가기
개발/JAVA

[JAVA 개념] 변수, 배열

by Develaniper 2021. 5. 8.

1. 변수의 타입

 변수의 타입은 크게 기본형과 참조형으로 나뉜다. 기본형은 실제 변수값(data)를 저장하는 반면, 참조형은 값이 저장되어 있는 주소를 값으로 갖는다.

 - 기본형(Primitive type)

 boolean, char, byte, short, int, long, float, double

 - 참조형(Reference type)

 기본형을 제외한 모든 변수 타입으로, 객체의 주소를 저장한다.

 

쉽게 생각하면 메소드에 값을 전달하여 해당 메소드에서 값을 변경 했을 때 참조형은 메소드를 부른 곳에서도 값변환이 이루어지고 기본형은 그렇지 않다.

// 참조형
public class Blog {
    static public class Cl{
        int a;
        Cl(int a){
            this.a=a;
        }
        void print(){
            System.out.println(a);
        }
        
    }
    public static void main(String[] args) {
        Cl c = new Cl(10);
        c.print();
        change(c);
        c.print();

    }
    static void change(Cl c){
        c.a = 100;
    }
}
// 10
// 0
// 값이 바뀌었다.

// 기본형
public class Blog {
    public static void main(String[] args) {
        int a = 10;
        System.out.println("before change : "+ a);
        change(a);
        System.out.println("after change : "+ a);

    }
    static void change(int a){
        a = 100;
    }
}
// before change : 10
// after change : 10
// 값이 바뀌지 않는다.

 

-기본형 변수의 크기

종류           크기 1 byte 2 byte 4 byte 8 byte
논리형 boolean      
문자형   char    
정수형 byte short int long
실수형     float double

 

-배열의 초기화

자바의 배열은 조금 다른 방식이다. (int a[];로 사용하던 C, C++에 비해서..)

public class Blog {
    public static void main(String[] args) {
        int[] arr1 = new int[4];
        
        String[] arr2= {new String("abc"), "def", "ghi"};

         // 에러발생
         // int [] arr3;
         // arr3 = {1,2,3,4,5,6,7};
         // Array constants can only be used in initializers
         
         
         // 정상
         int[] arr4;
         arr4 = new int[]{1,2,3,4,5,6,7};
         
         // 에러 발생
         // int result = add({1,2,3,4,5});
         // Syntax error on token "=", @ expected after this token
         // Syntax error, insert "SimpleName" to complete 
         
         //정상
         int result = add(new int[]{1,2,3,4,5});
    }

    static int add(int[] arr){
        int sum=0;
        for(int i :arr)  sum+=i;
        return sum;
    }
}

위의 예를 몇가지 보면 arr3(주석부분)과 arr4를 보면 new int[]로 배열을 생성하는 것의 차이를 볼 수 있다. arr2처럼 선언을 하면서 초기화를 하면 상관 없지만 선언과 초기화를 따로 해야 할경우, 또는 add() 함수 처럼 배열을 파라미터로 쓰는데 인자를 즉석해서 만들 경우에는 위처럼 new int[]와 같은 형식으로 초기화 해야 한다.

 

 

- 가변 배열

 2차원 이상의 배열에 대해 자유로운 형태의 배열을 구성 할 수 있다.

public class Blog {
    public static void main(String[] args) {
        int[][] arr= new int[4][];
        arr[0] = new int[5];
        arr[1] = new int[3];
        arr[2] = new int[4];
        arr[3] = new int[1];

        for(int[] ar : arr){
            for(int a: ar){
                System.out.print(a+" ");
            }
            System.out.println();
        }
    }

}

// 결과
/*
0 0 0 0 0 
0 0 0 
0 0 0 0 
0 
*/

다음과 같이 각자 다양하게 배열을 선언 할 수 있다.(걍 ArrayList를...)

 

 

자바의 정석 2~5장까지 빠르게 자바에서(제 입장에서...) 다시보거나 정리해야 할 내용을 정리해 봤습니다.

 

오늘은 기업 코딩테스트를 2개나 봐서 하지 말까 생각했는데 그래도 1일 1커밋을 하려면...ㅠㅠ 시작한지 얼마 안돼서 벌써 헤이해 지면 안됐기에 억지로 TIL이라도 만들었어요..

 

앞으로도(더 알찬내용으로...) 화이팅..

댓글