[7,8일차] 7장 : 배열과 ArrayList
5823 단어 두잇자바프로그래밍입문두잇자바프로그래밍입문
- 배열(array)을 사용하면 자료형이 같은 자료 여러 개를 한 번에 관리할 수 있다.
- 배열 선언과 초기화
자료형[ ] V 배열 이름 = new V 자료형[개수];
자료형 V 배열 이름[ ] = new V 자료형[개수];
int[ ] studentIDs = new int[10]; //int형 요소가 10개인 배열 선언
- 배열 초기화하기
int[ ] studentIDs = new int[ ] {101, 102, 103}; //개수는 생략함
int[ ] studentIDs = new int[3] {101, 102, 103}; //오류 발생
int[ ] studentIDs = {101, 102, 103}; //int형 요소가 3개인 배열 생성
int[ ] studentIDs; //배열 자료형 선언
studentIDs = new int[ ] {101, 102, 103}; //new int[ ]를 생략할 수 없음
- 배열 선언하기
studentIDs[0] = 10; //배열의 첫 번째 요소에 값 10을 저장
- 배열 초기화하고 출력하기
- 배열 길이만큼 출력하기
-> double형으로 길이가 5인 배열을 선언. 자바에서 정수 배열과 실수 배열을 별도로 초기화하지 않고 선언하면 배열의 요소 값은 0으로 초기화된다. 배열의 세번째 요소까지만 값을 저장했으므로 4,5번째 요소는 0이 출력된다.
- 배열의 유효한 요소 값 출력하기
-> 유효한 값을 저장하고 있는 배열의 요소 개수를 알 수 있다. 12행의 반복문은 유효한 요소 개수만큼만 반복한다.
- 알파벳 문자와 아스키 코드 값 출력하기
-> 문자 자료형 배열은 char[ ]로 선언해야 한다.
- 객체 배열 사용하기
: 참조 자료형 변수도 여러 개를 배열로 사용할 수 있는데 객체 배열은 int나 char 등 기본 자료형 배열과 사용 방법이 다르다.
-> 인스턴스를 가리키는 주소 값 5개를 생성했다. 즉 인스턴스가 바로 생성된 것이 아님. 아래 예제를 통해 각 배열 요소에 인스턴스를 생성해 넣었다.
-> Book 인스턴스 멤버들과 Book 인스턴스를 저장한 메모리 공간 주소를 출력했다.
- 객체 배열 만들어 활용하기_학생 관리
- System.arraycopy()로 배열 복사하기
System.arraycopy(복사할 배열, 복사할 첫 위치, 대상 배열, 붙여 넣을 첫 위치, 복사할 요소 개수)
- 객체 배열 복사하기
-> bookArray2 배열의 인스턴스를 따로 만들지 않았는ㄴ데 각 요소 값이 잘 출력되고 있다. 객체 배열을 사용하려면 꼭 인스턴스를 생성해서 넣어야 한다고 했는데 어찌된 일일까? (얕은 복사)
- 객체 배열의 얕은 복사
-> bookArray1의 변경 사항이 bookArray2에 반영되었다. 객체 배열의 요소에 저장된 값은 인스턴스 자체가 아니고 인스턴스의 주소 값이기 때문에 기존 인스턴스의 주소 값만 복사한다. 결국 두 배열의 서로 다른 요소가 같은 인스턴스를 가리키고 있으므로 복사되는 배열의 인스턴스 값이 변경되면 두 배열 모두 영향을 받는 것이다. 이처럼 주소 값만 복사한다고 해서 '얕은 복사(shallow copy)' 라고 부른다.
- 깊은 복사 : 인스턴스를 따로 관리하고 싶다면 직접 인스턴스를 만들고 그 값을 복사해야 한다. 이를 깊은 복사(deep copy)라고 한다.
-> bookArray1 배열 요소 값과 bookArray2의 배열 요소 값이 서로 다른 내용으로 출력됨.
- 향상된 for문과 배열
for(변수 : 배열) {
반복 실행문;
}
- 다차원 배열
: 이차원 이상으로 구현한 배열. 다차원 배열은 평면이나 공간 개념을 구현하는 데 사용한다.
int [ ][ ] arr = new int[2][3];
ㄴ자료형 ㄴ배열 이름 ㄴ행개수, 열개수
int [ ][ ] arr = {{1,2,3}, {4,5,6}};
- 이차원 배열 초기화하기
- 이차원 배열의 길이 출력하기
-> 위 코드를 보면 이차원 배열을 선언만 하고 초기화를 따로 하지 않았기 때문에 모두 0으로 자동 초기화 된 것을 알 수 있다. 출력된 내용 중 마지막 두 줄은 행 길이와 열 길이다.
- ArrayList 클래스 사용하기
: 기본 배열은 항상 배열 길이를 정하고 시작하는데 배열을 사용하는 중에는 배열 길이를 변경할 수 없기 때문에 코드를 수정해야 한다. 혹은 배열 중간에 요소를 삭제하는 경우에도 배열 요소 위치를 변경해야 한다. 이럴 때 ArrayList 클래스를 사용하여 객체 배열을 손쉽게 관리할 수 있다.
ArrayList<E> 배열 이름 = new ArrayList<E>();
ex) ArrayList<Book> library = new ArrayList<Book>();
-> ArrayList는 java.util 패키지에 구현되어 있는 클래스이기 때문에 프로그램 시작 전에 임포트해주어야 함.
- ArrayList 클래스 사용하기
-> 기본 배열과 다르게 배열 전체 길이를 미리 지정하지 않고 add() 메서드를 사용해 생성자만 호출하면 된다.
- 배열 응용 프로그램_학생 성적 출력 프로그램 구현하기
Author And Source
이 문제에 관하여([7,8일차] 7장 : 배열과 ArrayList), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@steaming_c/78일차-7장-배열과-ArrayList저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)