내 맘대로 TIL

Dorothy·2022년 11월 12일
0

항해99

목록 보기
5/17

Java - 참조 타입

배열

배열 길이

  • 배열에 저장할 수 있는 전체 항목의 개수
  • for문을 사용해서 배열 전체를 루핑할 때 유용하게 사용 가능

배열 변수. length;

int[] intArray = {10, 20, 30};
	int num = intArray.length;
    System.out.println(num); // 3

다차원 배열

  • 2차원 배열: 행과 열로 구성된 배열
012
0( 0, 0 )( 0, 1 )( 0, 2 )
1( 1, 0 )( 1, 1 )( 1, 2 )

int[][] scores = new int[2][3];

이 코드는 다음과 같이 3개의 배열 객체를 생성한다.

배열 변수인 scores는 길이가 2인 배열A를 참조한다.
배열A의 scores[0]은 다시 길이가 3인 배열B를 참조하고 scores[1]은 길이가 3인 배열C를 참조한다.

이처럼 자바는 1차원 배열이 서로 연결된 구조로 다차원 배열을 구현하기 때문에 계단식 구조를 가질 수도 있다.

객체를 참조하는 배열

참조 타입 배열

  • 요소에 값(정수, 실수, 논리값)을 저장하지 않고, 객체의 번지를 가지고 있음
String[] strArray = new String[3];
strArray[0] = "Java";
strArray[1] = "Java";
strArray[3] = new String("Java");

System.out.println(strArray[0] == strArray[1]); // true (같은 객체를 참조)
System.out.println(strArray[0] == strArray[2]); // false (다른 객체를 참조)
System.out.println(strArray[0].equals(strArray[2])); // true (문자열이 동일)

위 코드를 실행하면 메모리에 다음과 같이 배열 객체가 생성된다.

배열 복사

  • 배열은 한 번 생성하면 크기를 변경할 수 없기 때문에 더 많은 저장 공간이 필요하다면 더 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사해야 한다.

for문 사용

int[] oldIntArray = { 1, 2, 3 };
int[] newIntArray = new int[5];

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

for (int i = 0; i < newIntArray.length; i++) {
	System.out.println(newIntArray[i]); // 1 2 3 0 0
}

System.arraycopy() 메소드 사용

System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
  • Object src: 원본 배열
  • int srcPos: 원본 배열에서 복사할 항목의 시작 인덱스
  • Object dest: 새 배열
  • int destPos: 새 배열에서 붙여넣을 시작 인덱스
  • int length: 복사할 개수
String[] oldStrArray = { "java", "array", "copy" };
String[] newStrArray = new String[5];

System.arraycopy(oldStrArray, 0, newStrArray, 0, oldStrArray.length);

for (int i = 0; i < newStrArray.length; i++) {
	System.out.println(newStrArray[i]); // java array copy null null
}

향상된 for문

  • 배열이나 컬렉션을 좀 더 쉽게 처리
  • 루프 카운터 변수나 증감식을 사용하지 않음
for ( 타입 변수 : 배열 ) {

	실행문

}
  1. for문이 처음 시작될 때 배열(①)에서 가져올 첫 번째 값이 존재하는지 평가
  2. 가져올 값이 존재하면 해당 값을 변수(②)에 저장
  3. 실행문(③)을 실행
  4. 블록 내부의 실행문(③)이 모두 실행되면 다시 루프를 돌아 배열(①)에서 가져올 다음 값이 존재하는지 평가
  5. 만약 다음 항목이 존재하면 ②→③→① 순서로 루프를 다시 진행하고, 가져올 다음 항목이 없으면 for문이 종료된다.
int[] scores = { 95, 71, 84, 93, 87 };

int sum = 0;
for (int score : scores) {
	sum = sum + score;
}
System.out.println("점수 총합 = " + sum); // 점수 총합 = 430

double avg = (double) sum / scores.length;
System.out.println("점수 평균 = " + avg); // 점수 평균 = 86.0

열거 타입

  • 열거 타입: 열거 상수(한정된 값)를 저장하는 타입

열거 타입 선언

  1. 소스 파일(.java) 생성
  2. 열거 타입 선언(열거 타입 이름은 소스 파일 이름과 대소문자 일치해야함)
    public enum 열거타입이름 { ··· }
  3. 열거 상수 선언(관례적으로 모두 대문자로 작성)
    public enum Week { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
  4. 열거 상수는 열거 객체로 생성된다.

열거 타입 변수

  • 열거 타입도 하나의 타입이므로 변수를 선언하고 사용한다.

열거타입 변수;

열거 상수를 저장하기 위해서는 아래와 같이 사용한다.

열거타입 변수 = 열거타입.열거상수;


한 번에 이해되지 않더라도 차근차근

0개의 댓글