| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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://webdir.tistory.com/506
 - toString
 - 게시판
 - https://velog.io/@velopert/create-typescript-react-component
 - http://jeonghwan-kim.github.io/dev/2019/06/25/react-ts.html
 - 출처 : https://joshua1988.github.io/web-development/javascript/promise-for-beginners/
 - object
 
- 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 |