ch 5_ 배열 Array

1. 배열 ("array")

배열

  • 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
  • 변수와 달리 배열은 각 저장공간이 연속적으로 배치되 있음

    int score1, score2, score3, score4, score5;
    이를 배열로 바꾸면
    int[] score = new int [5]; //5개의 int 값만 저장할 수 있는 배열 생성

    • 값을 저장할 수 있는 값은 score [0] ~ score[4] 모두 5개

배열의 생성

타입 [] 변수이름; //배열을 선언( 배열을 다루기 위한 참조 변수 선언)
변수이름 = new 타입 [길이] ; (실제 저장공간 생성)

int[] score ; // int 타입의 배열을 다루기 위한 참조변수 score 선언
score = new int [5]; // int 타입의 값 5개를 저장할 수 있는  배열 생성 (실제 저장공간 생성)

배열 인덱스(index)

  • 생성된 각 저장공간 : 배열의 요소 (element)
  • 배열 이름 [인덱스] 이란 형식으로 배열 요소에 접금함
  • 인덱스(index) : 배열의 요소마다 붙여진 일련의 번호로 범위는 0부터 (배열길이-1) 까지!
 int [] score = new int [5]; // 길이가 5인 int 배열
 score[3]=100; //배열 score의 4번째 요소에 100저장
 int value = score [3]; //배열 score의 4번째 요소의 값을 읽어서 value에 저장

배열의 길이 (배열의 이름. length)

  • for문의 조건식에 배열의 길이를 직접 적어주는 것 보다 '배열 이름. length' 사용하는 것이 나음
int [] score = new int [5]; // 길이가 5인 int 배열
for (int i+0; i<score.length; i++) //조건식을 변경하지 않아도 됨
	System.out.println(score[i]);
    
    
> '배열이름. length'는 배열 길이가 변경되면 자동적으로 변경된 배열의 길이를 값으로 가짐

배열의 초기화

  • 배열은 생성과 동시에 자동적으로 기본값(0)으로 초기화됨으로 배열을 사용하기 전에 따로 초기화 해주지 않아도 됨
  • 만약 원하는 값을 저장하려면 각 요소마다 값 지정

int [ ] score = new int [5]; //길이가 5인 int형 배열 생성
score [0] = 50; // 각 요소에 직접 값을 저장함
score [1] = 60;
score [2] = 70;
score [3] = 80;
score [4] = 90;

  • 자바에선 다음과 같이 배열을 간단하게 초기화가 가능
    • 저장할 값을 괄호 { } 안에 쉼표로 구분해 나열
      괄호 { } 안의 값의 개수에 의해 배열의 길이는 자동으로 결정됨으로 괄호 [ ] 안에 배열의 길이는 안 적어도 됨
    int [ ] score = new int [ ] { 50,60,70,80,90} ; //배열의 생성과 초기화를 동시에!
    int [ ] score = { 50,60,70,80,90} // new int [ ] 생략 가능

배열의 출력

  • 'Arrays.toString (배열이름) 메소드 사용
    • 배열의 모든 요소를 [첫번째,. 두번쨰 .. ] 와 같은 형식의 문자열로 만들어 반환함
    • import java.util.Arrays; 추가 필요
int [ ]iArr = {100,98,80,70,60};
//배열 iArr의 모든 요소를 출력함. [100,95,80,70,60] 이 출렫됨
System.out.prinln(Arrays.toString(iArr);

2. String

Sting 배열 생성

  • int 배열 선언과 생성 동일

  • String [ ] name = new String[3] ; 3개의 문자열을 담을 수 잇는 배열 생성

    • 3개의 String 타입의 참조변수를 저장하기 위한 공간이 마련됨
    • 참조형 변수의 기본값 = Null
    • 각 요소의 값은 Null로 초기화 된다

    <변수의 타입에 따른 기본값>

자료형기본값
booleanfalse
char'\u0000'
byte,short,int0
long0L
float0.0f
double0.0d 또는 0.0
참조형null

String 배열 초기화

  • 괄호{}을 사용해 초기화 하기
String [] name = new String[] {"Kim","Park","Yi"};
String [] name = {"Kim","Park","Yi"}; // new String[] 생략 가능
  • 각 요소에 문자열 저장해서 초기화 하기
String [] name = new String [3];
name[0]=new String("Kim");
name[1]=new String("Park");
name[2]=new String("Yi");
  • 예외적으로 String 클래스 만 큰 따음표 " 만으로 간단하게 표현 허용
String [] name = new String [3];
name[0]="Kim";
name[1]="Park";
name[2]="Yi";

String 클래스

  • char 배열 : 문자배열 , 문자를 연이어 늘어 놓은 것

  • String 배열 = char 배열 + 기능(메서드)

  • c에선 문자열을 char로 다루지만 객체지향언어인 java에선 char 배열과 그에 해당되는 기능을 함께 묶어서 클래스로 정의함

  • 객체지향개념이 나오기 이전의 언어들은 데이터와 기능을 따로 다뤘지만 객체지향언어에선 데이터와 그에 관련된 기능을 하나의 클래스에 뭈어서 다룰 수 있게 함

  • 즉 서로 관련된 것들끼리 데이터와 기능을 구분하지 않고 함께 묶는다

기능 = 함수 = 메서드 in java
메서드 : 객체지향언어에서 '함수'대신 사용하는 용어로 함수와 동일

  • String 객체(문자열)은 읽을 수 만 있고 내용변경은 불가능
String str = "JAVA";
str= str+8 // "java8"이라는 새로운 문자열 str에 저장됨
System.out.println(str);

해당 문장은 문자열str의 내용이 변경되는 것 같지만 문자열은 변경할 수 없음으로 새로운 문자열이 생성된다

변경가능한 문자열을 다루려면, StringBuffer 클래스 사용하면 됨

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[])로 변환해서 반환
  • charAt 메소드 : 문자열에서 지정된 index에 있는 한 문자 반환

  • substring() : 문자열 일부 뽑아냄

  • equals() : 문자열의 내용이 같은지 다른지 확인
    - equalsIhnoreCase() : 대소문자 구분 안하고 비교

    3. 커멘트 라인을 통해 입력받기

  • nextLine() 외에도 화면을 통해 입력 받기 가능

  • 프로그램 실행시 클래스 이름 뒤에 공백문자로 구분해서 여러 개의 문자열을 프로그램에 전달 가능

    c:\jdk1.8\work\ch5>java MainTest abc 1233
  • 실행 프로그램의 main메서드가 담긴 클래스 이름이 MainTest라고 가정할떄 다음과 같이 실행 가능

  • 커맨드 라인에 입력된 매개변수는 공백문자로 구분하기 때문에 입력될 값에 공백이 있는 경우 큰따음펴(")로 감싸줘야 함

  • 커맨드 라인에서 숫자를 입력해도 숫자가 아닌 문자열로 처리되는 것을 주의

  • 커맨드 라인에 매개변수를 입력하지 않으면 크기 =0 인 배열 생성되어 args.length=0 이 됨

    3.2 이클립스에서 커맨드 라인 매개변수 입력하기

    4. 2차원 배열(matrix)

    2차원 배열(matrix)

  • 다차원 배열(multi-dimensional)

  • 2차원 배열 선언 방법 ( 대괄호 []만 하나 더 추가됨)
    - 3차원 이상의 고차원 배열은 대괄호 개수를 차원의 수만큼 추가해 주면 됨

    선언방법선언 예
    타입[ ][ ]변수 이름;int[ ][ ] score;
    타입 변수 이름[ ][];int score[ ][ ];
    타입[ ]변수 이름[ ];int[ ] score;

    ex) int [ ][ ] score = new int [4][3] ; //4행 3열의 2차원 배열 생성함

    2차원 배열의 인덱스

  • 2차원 배열 : 행 (row), 열(column) 로 구성

  • 2차원 배열 요소 접근 : "배열이름 [행][열]

    2차원 배열 초기화

    int [ ] [ ] arr = new int [ ] [ ] {1,2,3},{4,5,6}};
    int [ ] [ ] arr = {{1,2,3},{4,5,6}}; //new int [][] 생략됨
    
  • 행열로 줄바꿈 해주는 것이 좋음

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

 
### Array로 배열 다루기 ###

#### 1. 배열의 비교와 출력 equals(), toString() #### 
-*** toString()***
    - 배열의 모든 요소를 문자열로 편하게 출력 가능
    - 일차원 배열에만 사용가능함으로 다차원 배열은 deepToString() 사용
    - deepToString()은 배열의 모든 요소를 재귀적으로 접근해 문자열을 구성함으로 2차원 뿐만 아니라 3차원 배열에도 동작함
- equals()도 1차원 배열만 사용 가능함으로 다차원 배열은 deepEquals()사용

#### 2. 배열의 복사 - copyof() ,copyOfRange()#### 
- copyof()은 배열 전체, copyOfRange()은 배열 일부를 복사해 새로운 배열 만들어 반환함
- copyOfRange() 의 지정된 범위의 끝은 포함되지 않음

####  3. 배열의 정렬 - sort()#### 
```java 
int [ ] arr =  {3,2,0,1,4};
Arrays.sort(arr); // 배열 arr 을 정렬함
System.out.print;n(Array.toString(arr));//[0,1,2,3,4]

좋은 웹페이지 즐겨찾기