본문 바로가기
개발관련

자바 꽉자바! : (1)배열에 대해 알아보자!

by 수바니 2023. 9. 21.

안녕하세요! 첫 게시글입니다! 많이 부족한 실력이지만 열심히 해보겠습니다!!

많관부!!!🙇🏻‍♀🙇🏻‍♀

 

배열이란? 하나의 공간에 여러개의 값을 담을 수 있는 개념 입니다.

"같은 자료형의 값" 으로만 담을 수 있다.

정확히는 배열의 각 인덱스 자리에 실제 값이 담깁니다.

일반적으로 1 2 3 4 로 시작할것 같지만 인덱스는 0부터 시작합니다.!!! ⭐

 

배열을 왜 사용하나요?

변수는 하나의 공간에 하나의 값만을 담을 수 있습니다. 따라서 대량의 데이터들을 보관하고자 할 때 각각의 변수를 만들어서 따로 관리해야하는 복잡함이 있지만, 배열을 사용하게 된다면 더 간단해지겠죠 ?!

 

1. 배열의 선언 (표현법)

[표현법]

자료형 배열명 [];

자료형[] 배열명;

 

EX)

int arr[];

int []arr;

 

배열을 선언과 동시에 할당하기 =  배열 만듦과 동시에 크기를 지정해줍니다.

int[] arr = new int[5];

 

배열의 선언, 할당, 초기화를 다 동시에 해보기

int[] arr1 = new int[] {1,2,3,4};

int[] arr2 = {1,2,3,4};

만약 System.out.println(arr1 == arr2);

이렇게 한다면 결과값은 어떻게 될까요???

당연히 false입니다!!!

각각의 변수에 담겨있는 주소값을 비교하기 때문입니다. 원하는 값을 얻으려면 인덱스를 비교하도록 해요 !

주소값을 담는변수 => 참조변수(레퍼런스변수)!

실제 리터럴값을 곧바로 담는 변수 => 일반변수!

 

2. 배열의 장점

반복문으로 활용이 가능합니다!

for(int i=0; i<=4; i++){
	arr[i]=i;
}

for(int i=0; i<=4; i++){
	System.out.println(arr[i]);
    }

이런식으로 코드를 작성한다면 sysout을 일일히 하나씩 안적어도 되겠죠 ?

System.out.println(arr); =>  실제 arr 박스에는 "주소값" 이라는게 담겨져있기때문에

반드시 인덱스로 출력하여야 원하는 값을 얻을 수 있습니다.

System.out.println(arr[i]);

 

3. 배열의 예시

	public void method1() {
		int[] iArr = new int[3];	// 0번 ~ 2번 인덱스
		double[] dArr = new double[4];	// 0번 ~ 3번 인덱스
		
		for(int i =0; i<3 ; i++) {
			System.out.println(iArr[i]);
		}
	
		for(int i =0; i<4 ; i++) {
			System.out.println(dArr[i]);
	}

내가 각 인덱스에 초기화를 하지 않아도 값들이 담겨있습니다.

그 이유는 Heap영역에는 절대 빈공간이 존재할 수 없기 때문입니다.

따라서 공간이 만들어질때 JVM이 기본적으로 초기화(대입)을 진행해줍니다.

 

JVM이란 ?

Java Virtual Machine의 줄임말 

말 그대로 직역한다면 자바를 실행하기 위한 가상의 컴퓨터(기계)

자바 프로그램 실행환경을 만들어주는 소프트웨어라고 생각하면된다.

자료구조는 알면 코드를 이해하는데 도움이 되니 한번 검색해보세요 !!

 

나이를 모두 더하는 프로그래밍을 해보자!

 public void method2() {

	      int age1 = 15;
	      int age2 = 23;
	      int age3 = 50;
	      int age4 = 34;
	      int age5 = 25;
	      
	      System.out.println(age1);
	      
	      // 반복문 사용 불가
	      for(int i=1; i<6; i++) {
	         System.out.println(agei); //agei 라는 이름의 변수를 찾고있음
	         System.out.println(age + i); //age 라는 이름의 변수를 찾고있음
	      }
	      */
          }

 

반복문을 사용하지 못합니다.

 

만약, 배열을 가지고 프로그래밍을 하게 된다면 ?

public void method(){
        int[] ages = new int[5]; 

                  ages[0] = 15;
                  ages[1] = 23;
                  ages[2] = 50;
                  ages[3] = 34;
                  ages[4] = 25;

                  // 인덱스 값 출력
                  int sum = 0;
                  for(int i =0; i<ages.length; i++ ) {
                     sum += ages[i];
                  }



}

sum += ages[i] 는 누적합 공식이다. 

무식한 방법이지만 이해가가지 않으면 누적합 공식을 외우는것이 좋다.

그냥 딱 봤을때 ! 오 누적합~! 이렇게 ,,ㅎㅎ

이런식으로 나이의 합을 구할 수 있게됩니다.

 

배열을 공부하면서 알아야할 에러 (배열이 아니더라도,,!!)

NullPointerException

값이 들어가야할 자리에 null이 들어갔을경우에 발생하는 에러이다.즉, 실제 값이 아닌 null을 가지고 있는 객체/변수를 호출할 때 발생하는 예외이다.

 

다시한번 배열을 공부하면서 자료구조에 대해서 한번더 알아볼 수 있었다.다음 시간에는 배열의 복사에 대해서 알아보도록 하자!

 

공부중이라 틀린 부분도 있을수 있습니당,,

댓글로 남겨주세요 ~ !! 같이 공부해요 ~!!