[Java][국비교육] Day 9

Ga02·2023년 1월 7일

국비교육

목록 보기
8/82

🔍 배열, Array

변수들의 나열, 묶음

  • 여러 개의 같은 자료형 변수를 하나의 묶음으로 생성하여 사용하는 것
  • 여러 개의 변수를 한번에 선언, 생성 할 수 있음
  • 한꺼번에 선언된 변수 공간들은 인덱스(index) 번호를 이용하여 관리
    👉🏻 0번부터 순차적으로 번호가 매겨짐

➰ 배열 변수의 선언

배열 공간에 대한 참조값을 저장할 수 있는 참조형 변수 선언

  • 데이터 타입[ ] 배열변수명; 👍🏻
    • int[ ] arr;
    • char[ ] chArr;
    • double[ ] dArr;
  • 데이터타입 배열변수명[ ]; 👎🏻
    • int arr[ ];
    • char chArr[ ];
    • double dArr[ ];

➰ 배열 공간의 생성

실제 데이터를 저장할 수 있는 메모리 공간을 생성

  • 배열변수명 = new 데이터타입[개수];
    👉🏻 배열변수명에 변수공간을 만들어 연결해놓은 주소를 저장
arr = new int[3];
System.out.println(arr);[I@59f95c5d //배열변수명 출력시 참조값의 주소 출력
  • 참조형 변수는 공간확보를 위해 new가 필요 ➡ new는 변수공간을 자동으로 초기화해줌
int[] arr = new int[5]; //배열의 선언과 생성

for(int i=0; int<5; i++) {
	System.out.println(arr[i]);
}[0] 5개 출력

➰ 배열의 선언, 생성, 초기화

배열의 선언과 생성 및 초기화를 동시에 할 수 있음

int[] arr = new int[3]
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
		👇🏻
int[] arr = {1, 2, 3};
----------------------------
<char형 배열>
char[] chArr = {'a', 'p', 'p', 'l', 'e'};

<double형 배열>
double[] dArr = {1.1, 2.2, 3.3};

<boolean형 배열>
boolean[] bArr = {true, true, false, false};
  • 배열의 초기화는 선언할 때만 사용할 수 있음
arr = {5, 6};

➰ 배열과 반복문

  • for문을 이용해 배열에 값 모두 대입하기
for(int i=0; i<5; i++) {
	arr[i] = i+1;
}
➡ 배열의 요소에 1~5까지 하나씩 대입
  • for문을 이용해 배열의 모든 요소 출력하기
for(int i=0; i<5; i++) {
	System.out.println(arr[i]);
}1~5까지 순서대로 출력

➰ 배열이름.length

배열의 길이(크기), 요소의 개수 출력 👉🏻 int형으로 출력

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

➰ 문자열과 char[]

문자열은 내부 데이터 처리로 char[](문자의 배열)로 구현됨

String str = "Apple Banana";
👉🏻 char[] strArr = {'A', 'p', 'p', 'l', 'e', ' ', 'B', 'a', 'n', 'a', 'n', 'a' };
  • String타입 배열
    • arr ➡ String타입 배열
    • arr[i] ➡ String타입
String[] strArr = {"Apple", "Banana", "Cherry"};

for(int i=0; i<strArr.length; i++) {
	System.out.println(strArr[i]); //배열의 요소 하나씩 출력
    System.out.println(strArr.length); //배열의 길이 출력
    System.out.println(strArr[i].length()); //배열 요소의 길이 출력
}

➰ 배열의 얕은 복사, Shallow Copy

참조대상의 참조값(주소)만 복사되는 현상 👉🏻 실 데이터를 저장하고 있는 내부공간은 복사되지 않음

int[] arr1 = {10, 20, 30};
int[] arr2;

arr2 = arr1; //arr1의 데이터가 아닌 주소를 복사

System.out.println(arr1);
System.out.println(arr2);[I@59f95c5d / 같은 주소값 출력

arr2[1] = 999;

for(int i=0; i<arr2.length; i++) {
	System.out.println( arr1[i] + " : " + arr2[i] );
}10 : 10 / 999 : 999 / 30 : 30 

➰ 배열의 깊은 복사, Deep Copy

참조대상의 내용물을 새로운 공간에 복사 👉🏻 원본데이터와 사본데이터가 분리된 공간을 가짐

  • for문을 이용한 배열의 복사
int[] arr1 = {10, 20, 30}; 	//원본, Source
int[] arr2;					//사본, Destination

//arr1의 길이(요소의 갯수)만큼 arr2의 변수공간 생성
arr2 = new int[arr1.length]; 

//데이터의 요소 복사
for(int i=0; i<arr2.length; i++) {
	arr2[i] = arr1[i]; //사본데이터 ⬅ 원본데이터
}

//출력 확인
arr2[1] = 999; //arr2[1]의 요소만 변경됨

for(int i=0; i<arr2.length; i++) {
	System.out.println( arr1[i] + " : " + arr2[i] );
}10 : 10 / 20 : 999 / 30 : 30
  • System.arraycopy() 메소드를 이용한 배열의 복사
    System.arraycopy( src , srcPos , dest , destPos , length )
    • src : 원본 배열
    • srcPos : 원본 배열에서 복사가 시작될 인덱스
    • dest : 사본 배열
    • destPos : 사본 배열에서 복사가 시작될 인덱스
    • length : 복사할 요소의 갯수
int[] arr1 = {10, 20, 30}; 	//원본, Source
int[] arr2; 				//사본, Destination

//arr1의 길이(요소의 갯수)만큼 arr2의 변수공간 생성
arr2 = new int[arr1.length]; 

//데이터의 요소 복사
System.arraycopy(arr1, 0, arr2, 0, arr1.length);

//출력 확인
arr2[1] = 999; //arr2[1]의 요소만 변경됨

for(int i=0; i<arr2.length; i++) {
	System.out.println( arr1[i] + " : " + arr2[i] );
}10 : 10 / 20 : 999 / 30 : 30

🔍 변수의 값 교환하기 Swap

int num1 = 11;
int num2 = 22;
<오류>
num2 = num1; //num2에 num1 값을 대입하면서 둘이 같은 값을 가지게 됨
num1 = num2;
➡ num1 = 11, num2 = 11

<정답>
int tmp; //값을 옮겨둘 임시 저장소 생성

tmp = num1; //tmp 11, num1 11
num1 = num2; //num1 22, num2 22
num2 = tmp; //num2 11, num1 22
➡ num1 = 22, num2 = 11

🔍 버블정렬, Bubble Sort

arr[0]과 arr[1]을 서로 비교해서 두 값 중 왼쪽이 크면 서로 교환
👉🏻 큰 값을 오른쪽으로 이동시켜 오름차순으로 정렬

📄 example
int[ ] arr = {3, 2, 5, 4, 1}

{3, 2, 5, 4, 1} ➡ 3, 2를 비교, 3이 크므로 위치 교환
{2, 3, 5, 4, 1} ➡ 옮겨진 값과 다음값 35를 비교, 5가 크므로 환하지 않고 다음 오른쪽 값 비교
{2, 3, 5, 4, 1} ➡ 54를 비교, 5가 크므로 위치 교환
{2, 3, 4, 5, 1} ➡ 51을 비교, 5가 크므로 위치 교환
{2, 3, 4, 1, 5}
👉🏻 5는 종단점에 도착했으므로 비교를 멈추고 계산에서 제외됨. 1회기 끝

... 반복 ...
{2, 3, 1, (4, 5)}
... 반복 ...
{(1, 2, 3, 4, 5)}

profile
IT꿈나무 댓츠미

0개의 댓글