본문 바로가기
클라우드 활용 자바개발자 양성과정/01. JAVA 프로그래밍 언어 활용

05. 배열

by moca7 2024. 6. 24.

 

ㅁ for문

- for( 초기식; 조건식; 증감식 )

여기서 초기식, 조건식, 증감식 전부 생략 가능. 그러나 세미콜론 두 개는 있어야 함.

전부 생략할 경우 무한 루프다. 

 

ㅁ 

String str = "kiwi";

 

for(int i=0; i<str.length; i++) {

    System.out.println(str.charAt(i));

}

 

ㅁ 2~9 사이의 랜덤값을 출력하기

- int a = (int) (Math.random * 8 + 2);

 

ㅁ 이클립스에서 특정 메서드를 ctrl 누른채로 클릭하면

- 이클립스에서 특정 메소드에 컨트롤+클릭을 하면 해당 메소드의 정의로 이동할 수 있습니다.

이 기능은 메소드가 선언된 곳으로 바로 이동하여 메소드의 구현을 확인하거나 수정할 수 있도록 도와줍니다.

이를 "Open Declaration"이라고도 합니다.

 

ㅁ 

- 실제 데이터값을 곧바로 담을 수 있는 변수를 일반 변수라고 함.

- 주소값을 담고 있는 변수는 참조 변수(레퍼런스 변수)라고 함.

 

ㅁ 힙 영역

- 힙이라는 영역의 특성. 절대 빈 공간이 존재할 수 없다. 즉 초기화를 진행해야함. 

- 초기화를 하지 않을 경우  JVM이 알아서 초기화함(각 자료형에 맞는 기본값으로)

- 힙에 생성된 공간(객체)마다 고유한 주소값을 부여해줌

절대 중복되지 않음. (= 다른 객체들과 구별됨)

 

ㅁ 

int[] arr;

 

- System.out.println(arr); 

자료형@주소값의 16진수 형태

 

  • [I는 배열을 나타내는 표시입니다. 여기서 [는 배열임을 나타내며, I는 int 타입의 배열임을 나타냅니다.
  • @36baf30c는 객체의 해시 코드를 나타냅니다. 이는 객체를 구별하기 위한 고유한 식별자로, 메모리 주소와는 다른 개념입니다.

 

- System.out.println( arr.hashCode() );

주소값의 10진수 형태

 

 

ㅁ 

- 논리형의 기본값 false

- 문자형의 기본값 ' ' (공백)

- 정수형의 기본값 0

- 실수형의 기본값 0.0

 

- 참조자료형의 기본값 null

 

ㅁ 한 번 지정된 배열의 크기는 변경이 불가능하다. 

 

ㅁ 배열을 강제로 삭제하고 싶은 경우

(1) 배열 변수를 null로 설정하여 배열이 참조하는 객체에 대한 참조를 제거.

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

arr = null;

 

(2) 다른 값을 할당하면서 배열을 가리키는 변수를 새로운 객체나 다른 배열로 재할당.

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

arr = new int[10];

 

 

ㅁ 

- 사용자로부터 String형 str에 문자열을 입력받음.

char[] arr = new char[str.legnth()];

arr[i] = (char) (str.charAt(i) + 1 );

 

여기서 char로 형변환 해야함.

 

- 문자 'a' + 'b' + 'c'하면 문자가 나옴.

"" + 'a' + 'b' + 'c'해야 문자열이 나옴.

 

- String형 변수에 대입할 때는 null로 초기화해도 되지만, 뒤에 문자를 계속 더할 경우에는 "" 빈문자열을 해야.

- String result = String.valueOf(arr) 해도 됨.

char 배열이 다 문자열화됨. 

괄호에 문자열화시키고자하는값 주면 됨. 전달된 값을 가지고 문자열로 만들어 반환해주는 메소드다. 

 

 

ㅁ 배열 선언과 동시에 초기화

- int[] arr1 = new int[] {1, 2, 3, 4 };            //    방법1

- int[] arr2 = {1, 2, 3, 4};                           //     방법2

 

- int[] arr;

arr = new int[] {1, 2, 3, 4}      //        오류발생.

 

배열을 먼저 선언 한 후에 초기화를 진행하고자한다면 반드시 방법 1을 이용.

 

- int[] arr1 = new int[4] {1, 2, 3, 4}; 는 오류 발생.

 

자바에서 배열은 객체입니다. 따라서 배열을 생성하면 항상 새로운 객체가 생성됩니다.

 

 

ㅁ 배열 깊은복사 방법 2. System 클래스의 arraycopy() 메소드를 이용

- System.arraycopy( 원본배열, 복사시작할인덱스, 복사본배열, 복사본배열의 복사시작 인덱스, 복사할 개수);

 

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

int[] cpy = new int[10];

System.arraycopy(org, 0, cpy, 0, 5);

 

for(int i=0; i<cpy.length; i++)

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

 

System.out.println(org.hashCode());

System.out.println(cpy.hashCode());

 

주소값이 다름. 주소값이 다르다는 말은 깊은 복사가 이루어졌다는 얘기.

 

 

ㅁ 배열 깊은복사 방법 3. Arrays 클래스의 copyOf() 메소드 사용

- 새로운 배열 = Arrays.copyOf(원본 배열, 원본 배열에서 복사하고 싶은 요소들의 길이); 

 

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

 

int[] cpy = Arrays.copyOf(org, 5);      //      깊은 복사 성공

 

- Array.copyOf를 배열의 크기 변경(기존 배열의 일부 요소를 포함하여 새로운 배열을 생성)으로도 쓸 수 있다.

 

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

 

int[] cpy = Arrays.copyOf(org, 10);      //     인덱스 5~9는 0으로 채워짐. 

 

 

- 배열의 크기를 원본 배열보다 더 작게도 가능.

 

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

 

int[] cpy = Arrays.copyOf(org, 3);     //     인덱스 0, 1, 2만 채워짐.

 

 

ㅁ 배열 깊은복사 방법 4. 배열.clone() 메소드 이용

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

 

int[] cpy = org.clone();       //        그대로 복사만 가능. 

 

 

ㅁ 배열을 반복문 쓰지 않고 전부 출력하는 법

- System.out.println( Arrays.toString(cpy) );

 

 

ㅁ java.lang 패키지에 있는 클래스들을 사용할 때는 import를 안해도 됨. 

java.lang.String

java.lang.System

java.lang.Math 등   // import java.lang.*; 이 숨겨져있다. jvm이 써줌.

 

 

ㅁ advanced for문 (향상된 for문)                   //          <-> for loop문

- 자바 7부터 가능. 자바 6이나 8쓰는 회사들 많다.

- for( 변수 : 순회하고자 하는 배열 | 컬렉션 ) {    }

 

반복문이 매번 돌때 마다 매번 압쪽 변수에는 각 인덱스에 담겨있는 실제 데이터 값이 매번 담김.

- 얘는 무조건 0번 인덱스부터 마지막까지 다 접근함.

 

- for( 변수 : arr ) {   //   변수 = arr[0];   ->   변수 = arr[1];  .... }

 

for(int value : arr ) { System.out.println(value); }

 

- 추가적인 변수를 둬야만 몇 번째까지인지도 출력할 수 있음.

int index = 0;

for(int value : arr) {

    System.out.println(index + "번째 : " + value);

    index++;

}

 

int index = 0;

for(int value : arr) {

    System.out.println(index++ + "번째 : " + value);            //      이래도 똑같음

}

 

- 향상된 for문은 생각보다 많이 쓰임. 그냥 for loop문과 향상된 for문으로 대체해서 사용하는 연습 필요.

 

 

 

 

 

 

 

'클라우드 활용 자바개발자 양성과정 > 01. JAVA 프로그래밍 언어 활용' 카테고리의 다른 글

07. 객체 배열  (0) 2024.07.02
06. 객체  (0) 2024.06.27
03. 연산자 & 04. 조건문  (0) 2024.06.20
변수(Variable)  (1) 2024.06.18
이클립스 설치&사용법  (1) 2024.06.18