2023년 1월 1일
08:00 AM
Buffering ...

최근 글 👑

20240726_TIL_캠프 2주차 5일_자료구조 배열

2024. 7. 26. 16:39ㆍ내배캠_Java 6기/Java 문법 종합반

배열 Array

✅ 참조형 변수로 실제 값을 담지 않고 주소값을 저장한다. ( 기억 안나면 1주차 변수 내용 참고 !)

 

✅ 여러 개의 변수를 같은 통에 모아서 저장하고 싶을 때 배열이라는 변수에 저장한다.

 

✅ 여러 개의 값을 한꺼번에 넣거나 하나씩 넣을 수도 있고 꺼낼 때는 하나씩 꺼낼 수 있다.

 

➡️ 통은 자료구조라고 하는데 가장 기초가 되는 자료구조가 배열이다.

 

 

배열 선언법 

 

int 와 같은 기본형 변수는 1개의 값만 저장할 수 있었는데 int[ ] 와 같은 배열형 변수는 여러 개를 저장할 수 있다.

감자 통에 감자만 넣을 수 있는 것처럼 한 개의 배열에는 같은 타입의 변수만 들어갈 수 있다.

 

// 배열 선언

// 일반적인 선언방식
int[] intArray;    // 정수 배열
long[] longArray;
double[] doubleArray;  // 실수 배열 
char[] charArray;  // 문자 배열
String[] stringArray; // 문자열 배열

 

 

배열 생성법 

 

다른 참조형 변수들 List, Object 등 처럼 new 키워드를 통해 생성하고 변수를 몇 개 담을지 크기를 지정

 

📌 주의점 : 변수들의 순번은 0부터 시작하기 때문에 8개 크기 배열이라면 0 ~ 7번까지 있다.

 

배열은 생성 시 각 타입 별 초기값으로 초기화되어 채워지는데 int는 0, boolean은 false 등으로 정해져 있다.

 

길이가 8인 정수배열 선언
int[] intArray = new int[3];

배열이 초기화된 값을 출력해본다.
for(int i=0; i<intArray.length; i++) { // .length 는 배열의 길이
	System.out.println(intArray[i]);
}

 

 

배열 초기화

 

1. 배열에 특정값 대입하며 선언

1. 배열에 특정값 대입하며 선언

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

String[] stringArray = {"a", "b", "c", "d"};

 

2. 반복문 for문을 사용해서 초기화 (또는 향상된 for문)

for (int i = 0; i < intArray.length; i++) {
	intArray[i] = i;
}

 

3. Arrays.fill 메소드를 사용해서 초기화

Arrays.fill(intArray, 1); //배열의 모든 값을 1로 초기화

for (int i : intArray) {
	System.out.print(i);  // 11111
}

 

 

배열 복사 

 

1. 얕은 복사 

 

배열은 참조형 변수이며 실제 값이 아닌 실제 값 [ ] 의 주소값을 저장한다.

따라서 배열에 대입 연산자 = 를 사용해 복사를 하면 주소값만 복사된다.

이렇게 주소값만 복사되고 실제 값은 1개로 유지되는 것을 얕은 복사라고 한다.

 

주소값만 복사된다는 것은 변수명은 다르지만 같은 주소여서 같은 배열을 보고 있음을 의미.

내가 가진 pc, 휴대폰으로 각각 카톡에 로그인해도 나의 카톡 계정은 하나이다.

 

int[] aArray= new int[]{1, 2, 3};
int[] bArray = aArray;


System.out.println(aArray); //[I@776ec8df
System.out.println(bArray); //[I@776ec8df

 

 

2. 깊은 복사 

 

주소값만 복사하는 가짜 복사가 아니라 새로운 배열로 똑같이 복사하고 싶을 때 사용한다.

깊은 복사는 실제 값을 가지고 있는 배열의 요소를 하나씩 꺼내서 복사해주면 된다.

 

반복문 for 을 사용해 하나씩 꺼내서 복사하는 방법과 여러 함수가 있다.

 

// 배열 복사 - 깊은 복사
System.out.println("---------------");
int[] cArray =new int[]{1,2,3};
int[] dArray = new int[aArray.length];

System.out.println(cArray); // [I@4eec7777
System.out.println(dArray); // [I@3b07d329

for (int i = 0; i < aArray.length; i++) {
    dArray[i]=cArray[i]; // 별도의 배열이 생성됨
    System.out.print(cArray[i]);
    System.out.print(dArray[i]);
}

dArray[0] =4;
System.out.println(aArray[0]);

for (int i = 0; i < aArray.length; i++) {
    System.out.print(cArray[i]);
    System.out.println(dArray[i]);
}


// 더 쉬운 방법 Array.clone()
System.out.println("-------------------");
int[] eArray= {1, 2, 3};
int[] fArray = eArray.clone(); // 깊은 복사 clone()

// clone() 메서든 2차원 배열에서는 얕은 복사로 동작
// [[],[]] -> 안에 있는 배열이 다 같은 주소를 가지고 있음.
System.out.println(eArray); //[I@41629346
System.out.println(fArray); //[I@404b9385

// Arrays.copyOf
int[] gArray= {1,2,3};
int[] hArray= Arrays.copyOf(gArray,gArray.length);

gArray[0]=5;
System.out.println(gArray[0]); // 5
System.out.println( hArray[0]); // 1

 

 

 

String 문자열 변수 기능 활용

 

String은 참조형 변수 = char[ ]

length() :  int 문자열의 길이를 반환한다.


charAt(int index) : char 문자열에서 해당 index의 문자를 반환한다.


substring(int from, int to) : String 문자열에서 해당 범위(from~to)에 있는 문자열을 반환한다.
(to는 범위에 포함되지 않음)

equals(String str) : 문자열의 내용이 같은지 확인한다. 같으면 결과는 true, 다르면 false가 된다.

toCharArray() : 문자열을 문자 배열(char[ ])로 변환해서 반환한다.

new String(char[] charArr) : 문자 배열(char[ ]) 을 받아서 String으로 복사해서 반환한다.

 

 

👇String 문자열 변수 기능 활용 코드

// String 기능 활용하기

        String str = "ABCD";

// length()
        int strLength = str.length();
        System.out.println(strLength);  // 4 출력

// charAt(int index)
        char strChar = str.charAt(2); // 순번은 0부터 시작하니까 2순번은 3번째 문자를 가리킵니다.
        System.out.println(strChar);  // C 출력

// substring(int from, int to)
        String strSub = str.substring(0, 3); // 0~2순번까지 자르기 합니다. (3순번은 제외)
        System.out.println(strSub);  // ABC 출력

// equals(String str)
        String newStr = "ABCD";  // str 값과 같은 문자열 생성
        boolean strEqual = newStr.equals(str);
        System.out.println(strEqual); // true 출력

// toCharArray()
        char[] strCharArray = str.toCharArray(); // String 을 char[] 로 변환

// 반대로 char[] 를 String로 변환하는 방법
        char[] charArray = {'A', 'B', 'C'};
        String charArrayString = new String(charArray); // char[] 를 String 으로 변환

 

 

다차원 배열

 

 

 

 

2차원 배열 선언법

 

int [ ][ ] array → 1차원 배열에 대괄호를 하나 더 추가해 주면 된다.

 

 

2차원 배열 생성법 

 

✅ int [ ][ ] array = new int [ ][ ];

 

 

2차원 배열 초기화 

 

1. 배열에 특정값 대입하며 선언

int[][] aArray = {
        {1, 2, 3},
        {4, 5, 6}
};

 

 

2. 반복문을 통한 초기화 

int[][] bArray = new int[2][3]; // 최초 선언

for (int i = 0; i < bArray.length; i++) {
    for (int j = 0; j < bArray[i].length; j++) {
        System.out.println("출력값 => "+i + ", "+j);
        bArray[i][j] = 0;  // i, j 는 위 노란색 네모박스 안에있는 숫자를 의미하며 인덱스 라고 부릅니다.
    }
}

//        출력값 => 0, 0
//        출력값 => 0, 1
//        출력값 => 0, 2
//        출력값 => 1, 0
//        출력값 => 1, 1
//        출력값 => 1, 2

 

 

가변 배열과 3차원 배열

// 가변 배열
int[][] array = new int[3][];

// 배열 원소마다 각기 다른 크기로 지정
array[0] = new int[2];
array[1] = new int[4];
array[2] = new int[1];

// 중괄호로 초기화를 해버릴 때도 가능
int[][] array2 = {
        {10, 20, 30},
        {10, 20, 30, 40},
        {10, 20, 30, 40, 50},
};

// 2차원 배열외에도 차원이 더 있지만 3차원까지 사용함
// int[][][] array = { { {.......... } } }

 

 

⭐ 느낀점과 다음 할 일 

다음 강의가 컬렉션인데 어디선가 들어본 스택, 큐 등의 알고리즘에서 많이 사용하는 용어들이 출몰한다.

정신차리고 차분히 100% 이해하려고 노력해야 한다.

 

 

728x90