1. Array ( 배열 )
l 동일한 자료형으로 구성된 연속된 자료의 집합
l 구성하는 각각의 값을 배열 요소(element)라고 하며, 배열에서의 위치를 가리키는 숫자를 ‘ Index ‘ 라고 한다. ※ Index는 언제나 0부터 시작, 0을 포함한 양의 정수만 가짐, 범위 0~n-1
l 배열은 동일한 자료형으로 선언된 데이터 공간을 메모리 상에 연속적으로 나열하여 데이터 관리의 효율성을 높임.
l 자바의 Array ( 배열 )은 힙 메모리(Reference type)를 할당
l 간단한 예시
- 배열 선언 : Int [ ] data ;
- 메모리 할당 : data = new int [10];
- 배열 요소의 이용 : data [0] = 10
l 배열의 데이터 개수는 length 속성(필드)으로 제공한다
→ 배열명.length
l 배열은 객체(Object)이다
l Array type = t [ ] 의 형태를 가진다.
- t는 배열의 원소 타입
- 원소 타입이 int 라면 배열 타입은 int [ ]이다.
l 선언되는 형식에 따라 1차원 배열, 2차원 배열, 그 이상의 다차원 배열로 선언
1. Array ( 배열 ) 사용 이유
l 기존
(1). 변수는 한 개의 데이터만 저장 가능
(2). 저장해야 할 데이터 수 증가 시 그만큼 많은 양의 변수 선언
→ 비효율적
l 배열
변수/데이터 수를 줄이고 효율성을 높이기 위해 사용한다. 같은 타입의 데이터를 연속된 공간에 나열하여 각 데이터에 index를 부여해 놓은 자료구조이다.
→ 배열을 사용하는 이유를 쉽게 설명하자면
- 사용자가 어떠한 값들에 대해 변수 하나씩 사용하여 저장하는 것은 소스의 양이 많아지고 사용 시에 번거로움을 동반한다.
그렇기에 배열의 첨자 연산자 [ ]를 사용하여 하나의 공간을 만들고 그 안에 어떠한 값들을 저장해주면 많은 변수를 사용하지 않아도 될 뿐만 아니라, 반복 조건문을 사용하여 변수를 제어하여 훨씬 효과적으로 소스를 구성할 수 있다.
1. 배열의 종류
ㄱ. 1차원 배열
문법
(1). 타입 [ ] 배열 이름 ;
(2). 타입 배열 이름 [ ] ;
→ 타입은 배열 요소로 저장되는 변수의 타입을 명시한다.
→ 배열 이름은 배열이 선언된 후에 배열에 접근하기 위해 사용됩니다.
(3). 배열 이름 = new 타입 [ 배열길이 ] ;
→ 배열의 길이는 해당 배열이 몇 개의 배열 요소를 가지게 되는지 명시한다.
→ 타입[ ] 배열이름 = new 타입 [ 배열 길이 ] ;
Ex) Int arr [ 3 ] = new Int [ 3 ]
l Int arr
n 참조 변수 배열 선언의 의미
n Int형으로 이루어진 배열 arr을 선언
n Arr은 배열의 이름
l = new Int[3]
n New는 배열을 인스턴스형으로 생성
n Int[3]은 int형 변수를 3개 만들라는 뜻
n 즉, 변수를 arr0, arr1, arr2 형식으로 3개 만듬
n 배열은 원소들이 모여 구성하는 원소들은 1이아닌
0부터 하나의 방을 생성하는 장점이 있다.
→ ArrayIndexOutofBounds 예외 발생
: java는 자동으로 배열의 인덱스를 검사해 배열이 주어진 범위에서 벗어나지 않도록 하지만
위와 같이 인덱스의 범위를 벗어날 경우 예외를 발생시킨다.
ㄱ. 2차원 배열
l 배열의 요소로 1차원 배열을 가지는 배열
l 문법
n 타입 [ ] [ ] 배열 이름;
n 타입 배열이름 [ ] [ ] ;
n 타입 [ ] 배열 이름 [ ] ;
- 타입은 배열 요소로 저장되는 변수의 타입을 설정
- 배열 이름은 배열이 선언된 후에 배열에 접근하기 위해 사용
1. 배열의 초기화
: 변수와 마찬가지로 배열도 선언과 동시에 초기화할 수 있다.
: 괄호 { } 을 사용하여 초기 값을 나열한 것을 초기화 블록이라 합니다.
l 문법
타입 [ ] 배열이름 = { 배열 요소1, 배열요소2, …. } ;
타입 [ ] 배열이름 = new 타입 [ ] { 배열요소1, …..} ;
l 초기화 블록에 맞춰 자동으로 배열의 길이가 설정됩니다.
1. 배열의 복사
: 배열은 한 번 생성하면 그 길이를 변경할 수 없다.
: 더 많은 데이터를 저장하기 위해서는 더욱 큰 배열을 만들고, 이전 배열의 데이터를
새로 만든 배열로 복사해야한다.
(1). System 클래스의 arraycopy() 메소드 [ System.arraycopy(arr1, 0, …..) ]
(2). Arrays 클래스의 copyOF() 메소드 [ Array.copyOf(arr1, 10) ]
(3). Object 클래스의 clone( ) 메소드 [ int[ ] arr1.clone() ; ]
(4). For 문과 인덱스를 이용한 복사 [ new int [ newLen ]; ]
'알고리즘' 카테고리의 다른 글
알고리즘 : 카운트(COUNT) 알고리즘 (0) | 2020.04.22 |
---|---|
알고리즘 정의 및 합계(SUM) 알고리즘 (0) | 2020.04.22 |
연결리스트 [ Linkedlist . 1] (0) | 2020.04.14 |
알고리즘 공부 : 두 번째 (0) | 2020.03.13 |
알고리즘 공부 첫 번째 (0) | 2020.03.12 |