일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 출처 : https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
- https://velog.io/@velopert/create-typescript-react-component
- 출처 : https://webdir.tistory.com/506
- 게시판
- http://jeonghwan-kim.github.io/dev/2019/06/25/react-ts.html
- object
- toString
- Today
- Total
Back Ground
JAVA - 배열[] 본문
배열이란 ?
- 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다르는 것
↓
서로 다른 타입의 변수들로 구성된 배열은 만들 수 없다.
[ 서로 다른 타입의 값들을 하나로 묶으려면 '클래스'를 정의하면 된다. ] 클래스장 가기
배열 선언과 생성
선언방법 |
선언 예 |
① 타입[] 변수이름; |
int[] score; String[] name; |
② 타입 변수이름[]; |
int score[]; String name[]; |
원하는 타입의 변수를 선언하고 변수 또는 타입에 배열임을 의미하는 대괄호 []를 붙이면 된다.
두 방법 중
- ①타입을 선호한다
: 대괄호가 변수 이름의 일부라기보다는 타입의 일부라고 보기 때문.
[배열의 생성]
배열을 선언한 다음에는 배열을 생성해야한다.
배열을 선언하는 것은
단지 생성된 배열을 다루기 위한 참조변수를 위한 공간이 만들어질 뿐이고,
배열을 생성해야만 비로소 값을 저장할 수 있는 공간이 만들어지는 것이다.
타입[] 변수이름; |
배열을 선언 (배열을 다루기 위한 참조변수 선언) |
변수이름 = new 타입[길이]; |
배열을 생성 (실제 저장공간을 생성) |
배열을 생성하기 위해서는 연산자 'new'와 함께 배열을 타입과 길이를 지정해 주어야 한다.
int[] score; |
int타입의 배열을 다루기 위한 참조변소 score선언 |
score - new int [5] |
int타입의 값 5개를 저장할 수 있는 배열 |
[ 간략하게 한줄로 생성 ]
타입[] 변수이름 = new 타입 [길이]; |
배열의 선언과 생성을 동시에. |
int[] score = new int[5] |
길이가 5인 int배열 |
즉,
int[] score;
: 배열 참조 변수 score를 선언하였고 공간은 없다.
score = new int[5];
: 연산자 'new'에 의해서 메모리의 빈 공간 5개의 int형 데이터를 저장할 수 있는 공간이 마련되었다.
[ 배열의 길이와 인덱스 ]
생성된 배열의 각 저장공간을
'배열의 요소(element) ' 라고 하며,
'배열이름[인덱스]'의 형식으로 배열의 요소에 접근한다.
인덱스(index)는 배열의 요소마다 붙여진 일련번호로 구별
인덱스(index)의 범위는 0부터 '배열길이-1까지'
|
배열 for문으로 사용 방법
score[0] = 0; score[1] = 10; score[2] = 20; score[3] = 30; score[4] = 40; |
▶ |
for( int i=0; i<5 ; i++){ score[i] = i * 10; } |
우선순위 (수식)
int tmp = score[i+1] |
수식이 먼저 계산된다.
배열의 초기화
int[] score = new int[]{50, 60, 70, 80, 90 }; |
배열의 생성과 초기화 동시에
괄호{}안에 저장할 값들을 쉼표로 구분해서 나열하면 되며 괄호[]안에 배열의 길이는 적지 않는다.
괄호{}안에 적힌 값의 개수에 의해 배열의 길이가 자동적으로 결정되기 때문이다.
new타입[] 생성
①
1) int[] score = new int[] {50, 60, 70, 80, 90}; 2) int[] score = {50, 60, 70, 80, 90}; //new int[]를 생략할 수 있음 |
new 타입[] 을 생략하여 코드를 더 간단히 할 수도 있다.
아무래도 생략된 형태의 코드가 더 간단하므로 자주 사용된다.
( 괄호{}안에 적힌 값의 개수에 의해 배열의 길이가 자동적으로 결정되기 때문 )
- 주의
배열의 선언과 생성을 따로 하는 경우에는 생략할 수 없다.
②
int[] score; score = new int[] {50, 60, 70, 80, 90}; -- OK score ={ 50, 60, 70, 80, 90}; -- 에러. new int[]를 생략할 수 없음
|
③ 메서드
int add(int[] arr) { /* 내용 생략 */} -- add메서드
int result = add(new int[] {100, 90, 80, 70, 60}); -- OK int result = add({100, 90, 80, 70, 60 }); -- 에러. new int[]를 생략할 수 없음
|
매개변수로 int배열을 받는 add메서드가 정의되어 있고
이 메서드를 호출해야할 경우 역시 'new 타입[]'을 생략할 수 없다
길이가 0인 배열
int[] score = new int[0]; -- 길이가 0인 배열 int[] score = new int[]{}; -- 길이가 0인 배열 int[] score = {}; -- 길이가 0인 배열, new int[]가 생략됨
|
- 괄호{}안에 아무것도 넣지 않은 경우
- 참조변수의 기본 값은 null이지만,
배열을 가리키는 참조변수는 null대신 길이가 0인 배열로 초기화하기도 한다.
즉, 모두 길이가 0인 배열을 생성한다.
배열의 출력
배열을 초기화할 때 for문을 사용하듯이,
배열에 저장된 값을 확인할 때도 다음과 같이 for문을 사용하면 된다.
int[] iArr = {100, 95, 80, 70, 60}; // 배열의 요소를 순서대로 하나씩 출력 for(int i=0; i< iArr.length; i++){ System.out.println(iArr[i]); }
|
더 간단한 방법
int[] iArr = {100, 95, 80, 70, 60}; //배열 iArr의 모든 요소를 출력한다. [100, 95, 80, 70, 60] 이 출력된다. System.out.println(Arrays.toString(iArr));
|
[ Arrays.toString()을 사용하려면, ' import java.util.*; '를 추가해줘야 한다. ]
'Arrays.toString(배열이름)' 메서드를 사용하는 것이다.
이 메서드는 배열의 모든 요소를 '[첫번째 요소, 두번째 요소, ...]' 와 같은 형식의 문자열로 만들어서 반환한다.
( 이 메서드와 관련된 내용들이 더 있지만 나중에 알아보기로 한다. Array메서드 )
만일 iArr의 값을 바로 출력하면 어떻게 될까?
iArr은 참조변수니까 변수에 저장된 값,
즉 '배열의 주소'가 출력될 것으로 생각했다면 지금까지 잘 이해하고 있는 것이다.
그러나 이러한 예상과는 달리 '타입@주소'의 형식으로 출력된다.
'[I'는 1차원 int배열이라는 의미이고,
'@'뒤에 나오는 16진수는 배열의 주소인데 실제 주소가 아닌 내부 주소이다
//배열을 가리키는 참조변수 iArr의 값을 출력한다. System.out.println(iArr); -- [I@15db9742
|
public static void main(String[] args) { int[] iArr = {100,95,80,70,60}; String[] iArr2 = {"1","2"}; String iArr3 = "a"; System.out.println(Arrays.toString(iArr));
System.out.println(iArr); System.out.println(iArr2); System.out.println(iArr3); } |
[100, 95, 80, 70, 60] [I@15db9742 [Ljava.lang.String;@6d06d69c |
다차원배열
2차원배열, 즉 다차원(多[많을 다 ] 次[버금 차] 元[으뜸 원], multi-dimensional)배열도 선언해서 사용할 수 있다.
메모리의 용량이 허용하는 한, 차원의 제한은 없지만, 주로 1,2 차원 배열이 사용되고 3차원 이상의 배열은 잘 사용되지 않는다.
2차원 배열 선언 방법
선언 방법 |
선언 예 |
타입[][] 변수이름; |
int[][] score; |
타입 변수이름[][]; |
int score[][]; |
타입[] 변수이름[]; |
int[] score[]; |
(3차원이상의 고차원 배열의 선언은 대괄호[]의 개수를 차원의 수 만큼 추가해 주기만 하면된다.)
int[][] score = new int[4][3]; |
4행 3열의 2차원 배열을 생성한다. |
↓
|
「 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
3열 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ㄱ |
「 |
int |
int |
int |
| |
int |
int |
int |
4행 |
int |
int |
int |
ㄴ |
int |
int |
int |
그림출처 : http://sessionk.tistory.com/182
[ 예제 ]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | //2차원 배열 선언 과 동시에 데이터 저장(초기화) int array1[4][3]={1,2,3,4,5,6,7,8,9,10,11,12}; int array2[4][3]={1,2,3,4,5}; //2차원 배열 array1의 데이터 출력 system.out.println("%d'%d'%dn",array1[0][0],array1[0][1],array1[0][2]); //0행 출력 system.out.println("%d'%d'%dn",array1[1][0],array1[1][1],array1[1][2]); //1행 출력 system.out.println("%d'%d'%dn",array1[2][0],array1[2][1],array1[2][2]); //2행 출력 system.out.println("%d'%d'%dn",array1[3][0],array1[3][1],array1[3][2]); //3행 출력 //2차원 배열 array2의 데이터 출력 system.out.println("%d'%d'%dn",array2[0][0],array2[0][1],array2[0][2]); //0행 출력 system.out.println("%d'%d'%dn",array2[1][0],array2[1][1],array2[1][2]); //1행 출력 system.out.println("%d'%d'%dn",array2[2][0],array2[2][1],array2[2][2]); //2행 출력 system.out.println("%d'%d'%dn",array2[3][0],array2[3][1],array2[3][2]); //3행 출력 | cs |
↓
[행 단위로 2차원 배열의 선언과 동시 초기화]
[예제]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // 2차원 배열의 선언 int array[2][2]; int i,j; // 2차원 배열에 데이터 입력 Scanner scan = new Scanner(System.in); for(i=0;i<2;i++) { for(j=0; j<2; j++) { system.out.println("정수를 입력하세요: "); scan.nextInt("%d", &array[i][j]); } } //2차원 배열에 데이터 출력 for(i=0;i<2;i++) { for(j=0; j<2; j++) { system.out.println("%3d",array[i][j]); } system.out.println("\n"); } return 0; } | cs |
↓
출처 : http://ropas.snu.ac.kr/~gslee/lecture-slides/c2011-01/20110513-01.pdf
'JAVA' 카테고리의 다른 글
ModelAndView (0) | 2017.06.01 |
---|---|
JVM 메모리 구조 (1) | 2017.03.09 |
GSON - java 객체(object)를 JSON 표현식으로 변환하는 API (0) | 2016.12.20 |
오버라이딩/오버로딩 (1) | 2016.07.10 |
toString이란? (1) | 2016.07.10 |