01.19 배열

2023. 1. 19. 10:28개발일지

배열

  • 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것입니다.
  • 많은 양의 값(데이터)을 다룰 때 유용합니다.
  • 배열의 각 요소는 서로 연속적입니다.

배열의 선언과 생성

  • 타입 또는 변수이름 뒤에 대괄호[]를 붙여서 배열을 선언합니다.
  • 배열을 선언한다고 해서 값을 저장할 공간이 생성되는 것이 아니라 배열을 다루는데 필요한 변수가 생성됍니다.

배열의 선언

  • 배열을 다루기 위한 참조변수의 선언

선언 방법 : 아래 두가지 방법 모두 지원

  • 타입[] 변수이름;
    • int[] age;
    • String[] name;
  • 타입 변수이름[];
    • int age[];
    • String name[];

배열의 생성 : 실제 저장공간을 생성

  • 타입[] 변수이름 - new 타입[길이];
    • age = new int[5]; (int 타입의 값 5개를 저장할 수 있는 배열을 생성)

배열의 인덱스

  • 각 요소(저장공간)에 자동으로 붙는 일련 번호
    • 인덱스(index)의 범위는 0부터 '배열길이-1'까지!

ex)

배열 예시

배열의 길이와 초기화

배열의 길이

  • 배열이름.length
  • 배열은 한번 생성되면 컴파일 후 실행되는 동안은 그 길이(크기)를 변경할 수 없습니다.
  • 배열의 한계점
    • new int[5];로 배열을 생성하면 int가 4byte이기 때문에 총 20byte를 저장하기 위한 연속적인 메모리 공간을 찾습니다.
    • 연속적인 공간을 찾아서 주소를 배정합니다.
    • 배정이 끝난 후 크기를 5가 아닌 10으로 늘려야 한다고 가정해 봤을 때 배정받은 주소 뒤에 20byte를 추가적으로 배정해야 하는데 뒤에 연속적인 메모리 공간이 존재한다는 보장이 없습니다.
    • 따라서 크기를 바꿀 수 없습니다.
  • 배열의 크기가 부족할 때의 방법
    • 필요한 만큼의 그기의 배열을 새롭게 만듭니다.
    • 새로 만든 배열에 기존 배열의 값을 복사해서 저장합니다.

배열의 초기화

  • 배열의 각 요소에 처음으로 값을 저장하는 것을 의미합니다.
    • 자동초기화

자료형(변수 타입) 기본값
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0d
char '\n0000'
boolean false
참조형 변수(String or any Object) null
  • 배열은 기본적으로 저장 하려는 값의 타입의 기본값으로 자동 초기화 해줍니다.

String 배열

String 클래스

  • char[]와 메서드(기능)을 결합한 것입니다.
    • 기본형처럼 사용이 가능한 참조형입니다.
      • String str = "행복";
      • String str = new String("행복");
    • 문자열을 많이 사용하기 때문에 특별하게 만들어진 클래스입니다.
    • String 클래스는 내요을 변경할 수 없습니다. 새로운게 만들어집니다.
      • String name = "choi";
      • String firstName = "wb";
      • name = name + firstName;

String 클래스의 주요 메서드

메서드 설명
char charAt(int index) 문자열에서 해당 위치(index)에 있는 문자를 반환한다
int length() 문자열의 길이를 반환한다.
String substring(int from, int to) 문자열에서 해당 범위(from~to)의 문자열을 반환한다.
(to는 포함 안됨)
boolean equals(Object obj) 문자열의 내용이 같은지 확인한다.
같으면 true, 다르면 false
char[] toCharArray() 문자열을 문자배열(char[])로 변환해서 반환한다.

String 배열의 선언과 생성

  • String[] name = new String[3];
    • 3개의 문자열을 담을 수 있는 배열을 생성한다.
    • 참조형이기 때문에 기본값 null로 초기화 됍니다.

2차원 배열

  • 테이블 형태의 데이터를 저장하기 위한 배열입니다.
  • 2차원 배열의 선언과 생성
    • int[][] score = new int[4][3];
      • 4행 3열의 2차원 배열 score가 생성됩니다.
  • 2차원 배열의 초기화
    • int[][] score = new int[][]{{}, {}, {}, {}};
    • int[][] score = {{}, {}, {}, {}};

ex)

2차원 배열 예시

다차원 배열의 선언과 생성

  • '[]'의 개수가 차원의 수를 의미합니다.

가변배열

  • 다차원 배열에서 마지막 차수의 크기를 저장하지 않고 각각 다르게 지정합니다.

사용자 입력받기 - 커맨드라인

  • 커맨드라인에서 입력된 값들은 문자열 배열에 담겨 main메서드에 전달된다.

사용자 입력받기 - 입력창(InputDialog)

  • Swing패키지의 JOptionPane.showInputDialog()를 사용

Arrays

문자열 비교와 출력

  • equals(), toString()

ex)

equals(), toString() 예제코드

배열 복사

  • copyOf(), copyOfRange()

ex)

배열 복사 예시 코드

정렬

  • sort()

ex)

정렬 예시 코드

===========================================================================================

배열 문제 풀이 정리

1. 배열값끼리 더하기
int[] oneArray = new int[10];
for(int i = 0; i < arr.length; i++){
oneArray[i]= i+1;
}
2. 1칸씩 건너띄어서 넣기
for(int i = 0 i < oneArray.length; i+=2){
oneArray[i]=i;
}
3. 등차 수열 : 앞항 - 뒷항 = 값 이 일정하게 차이 = 공차 3 , 앞항 = 뒷항 + 3
oneArray = new int[20]; //위에서 선언한 new int[10] 접근 불가능
for(int i = 0 i < oneArray.length i++){
oneArray[i] = i !=0 ? oneArray[i-1] +3 : 1; // i값이 0이 아니고 1일때부터 계산
}

// 등비 수열 풀어보기

// 다차원 배열
int[][] twoArray = new int[4][4];
int cnt =1;
(i=열) for(int i = 0; i < twoArray.length; i++){ // 여기다가 cnt를 넣으면 4번밖에 반복을 안함
(j=행) for(int j = 0; j < .length; j++, cnt++){ // cnt를 16번 셀 경우
twoArray[i][j] =cnt;
}
}

향상된 for문
for(int[] ints : twoArray){
System.out.println("Arrays.toString(ints) = " = Arrays.toString(ints));
}

결과 값 : 
{1,2,3,4}
{5,6,7,,,}
{9,10.,,,}
{13,14,15,16}

twoArray = new int[4][2]
int cnt =1;
(i=열) for(int i = 0; i < twoArray.length; i++){ // 여기다가 cnt를 넣으면 4번밖에 반복을 안함
(j=행) for(int j = 0; j < .length; j++, cnt++){ // cnt를 16번 셀 경우
twoArray[i][j] =cnt;
}
}
for(int[] ints : twoArray){
System.out.println("Arrays.toString(ints) = " = Arrays.toString(ints));
}

결과 값 : 오류 ( length가 아니라 길이로 잡아주어야합니다. )

// 3차원 배열
cnt =1; //초기화
int[][][] threeArray = new int[4][4][4];
for(int i = 0; i < threeArray.length; i++){ // 여기다가 cnt를 넣으면 4번 반복
(j=행) for(int j = 0; j < threeArray.length; j++, cnt++){ // cnt를 16번 반복
for(int k = 0; k < threeArray.length[i][j].length; k++, cnt++){ cnt를 64번 반복
threeArray[i][j][k] =cnt;
}
twoArray[i][j] =cnt;
}
}

'개발일지' 카테고리의 다른 글

01.25 TIL  (0) 2023.01.25
01.19 TIL  (0) 2023.01.19
01.19 조건문과 반복문(WHILE문)  (0) 2023.01.19
01.19 조건문과 반복문(FOR문)  (0) 2023.01.19
01.19 조건문(IF, SWITCH)과 반복문  (0) 2023.01.19