일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- til
- SW
- 객체지향
- 부스트코스
- ERD
- SSAFY 9기
- 모두를 위한 컴퓨터 과학(CS50)
- edwith
- 삼성청년SW아카데미
- 데이터베이스 모델링
- Java Programming
- 예외처리
- 관계형 데이터베이스
- exception
- java
- ssafy
- CS기초지식
- 상속
- Compute Science
- CS50
- 면접을 위한 CS 전공지식 노트
- Computer Science
- CS 기초
- w3schools
- 기초프로그래밍
- CS 기초지식
- 알고리즘
- 이진법
- WebProgramming
- 모두를 위한 컴퓨터 과학
- Today
- Total
Joslynn의 하루
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 - 6일차 노트 정리_배열, 다차원 배열_220725 본문
대용량 웹서비스를 위한 MSA Full-Stack 개발자 양성 과정 - 6일차 노트 정리_배열, 다차원 배열_220725
Joslynn 2022. 7. 25. 17:51배열
: Data를 저장하는 공간
: 하나의 이름에 여러 개의 값을 사용하는 경우; 공간을 나누어 번지수를 구분;
→ index(번지수)는 0부터 시작 및 배열의 크기보다 하나씩 작음;
: 한가지 Type만 저장 가능
: 배열은 객체이다.; 생성해서 사용;
: 크기 변경 불가 → 크기 변경 시 재생성 요망;
: 배열이름.length → 배열의 길이(크기)
1차원 배열 선언;
1) dataType [ ] 배열 이름 = new DataType [개수];
2) dataType 배열 이름 [ ] = new DataType [개수];
3) dataType 배열 이름 [ ] = new DataType [ ]{값, 값, 값, ...}; // 명시적 초기화; [ 공백 ]
// 배열 생성시, 보통 값은 기본값으로 setting, but 초기값을 바로 설정하고 싶은 경우 사용
4) dataType 배열 이름 [ ] {값, 값, 값, ...};
예시1)
int [ ] a = new int [5] → 0-5까지 다섯 개의 공간을 만듦;
int 기본값 = 0; 으로 설정
if, String 타입 배열; String 기본값 == null;
예시2)
int [ ] arr = new int [5];
0 | 0 | 100 | 0 | 0 |
System.out.print(arr); == 주소값이 나옴(객체이기 때문);
System.out.print(arr[0]); == 0 ;
반복문 표현방식 (1)
for (i=0; i<arr.5; i++){
System.out.print(arr[ i ]);
}
반복문 표현방식 (2)
for (i=0; i<arr.length; i++){System.out.print(arr[ i ]);} // 권장 방식
*값 변경
arr[2] = 100;
예시 3)
int [] arr = new iint [] {2,4, 6, 8, 10};
2 | 4 | 6 | 8 | 10 |
System.out.println(arr) == 주소값;Systme.out.println(arr[1]) == 4;
예시 4)
int i; // 전역변수
int arr [];; // 배열
System.out.println (i); // 0;
System.out.println (arr); //null; 객체의 초기값; 아직 생성되지 않은 객체;
i = 100; // 값 바로 할당 가능
arr = new int [5]; // 먼저 생성한후 값 할당
System.out.println (i); // 100;
System.out.println (arr); //주소값;
System.out.println (arr[2]) ; // 값 == 0;
자주 발생하는 오류
: NullPointerException => 생성되지 않은 배열(객체)을 접근(사용)할 때 발생 (==생성되지 않은 객체를 가지고 .(점)을 찍었기 때문); // 프로그램이 끝까지 돌지 못 함;
→ 이후 예외 처리를 위해 알아둘 필요가 있음
: ArrayIndexOutOfBoundsException => 배열의 번지수를 벗어 났을 때 발생 ex) int a [] = new int [2] ; => a[0] , a[1] , a[2] - 오류
class ArrayExamMethod{
//각int,double,char,boolean ,String type별로 총 5개씩 저장하는 배열을 생성하세요
int [] intArr = new int [5];
double [] doubleArr = new double [5];
char [] charArr = new char [5]; // 초기화값: \n0000 == 공백;
boolean [] booleanArr = new boolean [5]; // 초기화값: false;
String [] StringArr = new String [5]; // 초기화값: null;
//메소드 : printArrayValue01
//위의 배열들에 자동으로 초기화 된값을 출력하세요 // 반복문
public void printArrayValue01(){
System.out.println("----------------intArr 배열 방---------------");
System.out.println("주소값: "+intArr);
for (int index=0;index<intArr.length; index++ ){
System.out.println("intArr["+index+"]= "+intArr[index]);
}
System.out.println("\n----------------doubleArr 배열 방---------------");
System.out.println("주소값: "+doubleArr);
for (int index=0;index<doubleArr.length; index++ ){
System.out.printf("doubleArr["+index+"]= %.2f %n",doubleArr[index]);
}
System.out.println("\n----------------charArr 배열 방---------------");
System.out.println("주소값: "+charArr);
for (int index=0;index<charArr.length; index++ ){
System.out.println("charArr["+index+"]= "+charArr[index]);
}
System.out.println("\n----------------booleanArr 배열 방---------------");
System.out.println("주소값: "+booleanArr);
for (int index=0;index<booleanArr.length; index++ ){
System.out.println("booleanArr["+index+"]= "+booleanArr[index]);
}
System.out.println("\n----------------StringArr 배열 방---------------");
System.out.println("주소값: "+StringArr);
for (int index=0;index<StringArr.length; index++ ){
System.out.println("StringArr["+index+"]= "+StringArr[index]);
}
/*for (int a=0;a<5;a++)
{
System.out.println("intArr["+a+"]= "+intArr[a]);
System.out.println("doubleArr["+ a+"]= "+doubleArr[a]);
System.out.println("charArr["+a+"]= "+charArr[a]);
System.out.println("booleanArr["+a+"]= "+booleanArr[a]);
System.out.println("StringArr[" +a+ "]= "+StringArr[a]);
}*/
}
//메소드 : printArrayValue02
//위의 5개의 배열에서 각각 적당한 값으로 data를 할당하세요. // 반복문
public void printArrayValue02(){
System.out.println("\n값 변경합니다.\n");
for (int a=0;a<intArr.length;a++){
intArr [a] = a+10; //
// intArr = {1,2,3,4,5}; 불가
//intArr = new int [] {1,2,3,4,5}; // 맴버필드의 배열이 아닌 새로운 배열 생성 == intArr은 주소값이 바뀌는 가비지 콜렉션, 새로운 객체 할당
doubleArr [a] = (Math.random()*10)+11; // doubleArr [a] = a*0.5;
charArr [a] = (char)('A'+a);
if (a%2==0) booleanArr[a] = true;
String sentance = "현재 index는" +a+"입니다.";
StringArr [a] = sentance;
}
System.out.println("값 변경 완료하였습니다.");
}
//메소드 : printArrayValue03
//새롭게 할당된값을 출력하세요
public void printArrayValue03(){
System.out.println("\n변경된 값을 확인합니다.\n");
this.printArrayValue01();
}
}
//메인메소드에서
//ArrayExam의 메소드들을 순서대로 호출하세요
class ArrayExam{
public static void main(String [] args) {
ArrayExamMethod aem = new ArrayExamMethod(); //new 키워드를 만나는 순간 맴버필드 초기화; 각 dataType별 초기값 설정; ex) int 형 = 0;, String 형 = null;
aem.printArrayValue01();
aem.printArrayValue02();
aem.printArrayValue03();
}
}
*배열 date 값 변경 시, 새로운 배열을 생성하여 기존 객체의 주소값이 변경되지 않도록 주의;
*main method에서 (String [] args) 배열
예제1)
실행
예제 2)
실행
배열_객체 저장
예시 1)
예시 2)
//ObjectInArray.java
class ObjectOne{
public int a;
}
public class ObjectInArray{
public static void main (String [] args){
//메인 메소드에서
//ObjectOne 타입을 5개 까지 저장하는 배열을 선언하고
ObjectOne obarr [] = new ObjectOne [5]; // **중요! ObjectOne이라는 Type을 가지고 있는 배열을 생성;
System.out.println("obarr= "+obarr);
System.out.println("obarr.length= "+obarr.length);
//5개의 ObjectOne객체를 생성하세요.
//각 객체가 갖고있는 전역변수 출력
//각 객체의 주소값 출력
if (obarr.length>0) // 버그 가능성 낮추는 것;
{
for (int i=0; i<obarr.length; i++)
{
System.out.print("생성 전: obarr["+i+"] = "+obarr[i]+"\t");
obarr[i] = new ObjectOne(); // **중요! ObjectOne 객체 생성
System.out.println("생성 후: obarr["+i+"] = "+obarr[i]);
}
System.out.println("\n-------------------- 각 객체의 a값 확인하기 ----------------------");
for (int i=0; i<obarr.length; i++)
{
System.out.print("변경 전: obarr["+i+"].a = "+obarr[i].a+"\t\t");
//각각의 ObjectOne객체가 서로 다른 a의 값을 갖도록 a의 값을 변경하세요.
//각 ObjectOne 객체의 a를 출력하세요
obarr[i].a = i*10;
System.out.println("변경 후: obarr["+i+"].a 변경값= "+obarr[i].a);
}
}
System.out.println("--------------------------------------------------------------------------------------");
obarr [0] = obarr [1]; // 1번지의 주소값이 0에 저장된다; arr[0]을 가리키는 연결이 끊김; 더이상 쓸모 없어진 객체는 가비지 콜렉션이 일어남; 더이상 접근 불가;
System.out.println ("obarr[0]="+obarr[0]);
System.out.println ("obarr[1]="+obarr[1]);
System.out.println("obarr[0].a="+obarr[0].a);
System.out.println("obarr[1].a="+obarr[1].a);
} // main 끝
} // class 끝
java version 1.5에서 추가된 개선된 for문
: 주로 배열이나 자료구조(Collection - java.util)에서 많이 사용한다.
*구조
for( dataType 변수 이름 : 반복 대상 such as 배열, 자료구조 등){// 무조건 배열의 처음부터 끝까지 돌게 됨;
}
예시 1)
/*for (int i=0; i<obarr.length; i++)
{
System.out.print("변경 전: obarr["+i+"].a = "+obarr[i].a+"\t\t");
//각각의 ObjectOne객체가 서로 다른 a의 값을 갖도록 a의 값을 변경하세요.
//각 ObjectOne 객체의 a를 출력하세요
obarr[i].a = i*10;
System.out.println("변경 후: obarr["+i+"].a 변경값= "+obarr[i].a);
}*/
int i = 0; //밑의 for문은 index 표시 불가;
for (ObjectOne obj : obarr) // **배열을 처음부터 끝까지 돌릴 수 있음; index값으로 반복 제어 불가;
{
System.out.print("변경 전: obj.a = "+obj.a+"\t\t");
obj.a = 10+i++;
System.out.println("변경 후: obj.a 변경값= "+obj.a);
}
}
2차원 배열 선언
1. DataType [ ] [ ] 배열이름 = new DataType [ 행 ] [ 열 ];
2. DataType 배열이름 [ ] [ ] = new DataType [행] [열];
3. DataType [ ] 배열이름 [ ] = new DataType [행] [열]; // 잘 사용하지 않음.
: ex) int [ ] [ ] a = new int [3] [4]; ⇨ 3행 4열(12개 공간);
*선언과 동시에 명시적 초기화
datatype [][] 배열 이름 = new datatype [ ] [ ]{
{값, 값, 값,.......},
{값, 값, 값,.......},
{값, 값, 값,.......},
}
*가변형 배열을 생성할 수 있다. (각 행마다 열의 개수를 다르게 생성할 수 있다.) - java의 특징;
DataType [ ] [ ] 배열이름 = new DataType [ 행 ] [ 생략 ];
(ex) int [ ] [ ] a = new int [3] [ ]; => 행은 3개이고 열은 생성 안된 상태 // 사용 전에 각 행의 열 생성 필수!
a[0] = new int [2]; ⇨ 1행 2열 // 1차원 배열 형성;
a[1] = new int [5]; ⇨ 2행 5열
a[2] = new int [1]; ⇨ 3행 1열
*배열이름.length ==> 행의 길이가 출력
ex> a.length == 3;
*배열 이름의 [index].length ==> 각 index 행에 대한 열의 길이
ex> a[0].length == 3
a[1].length == 5
a[2].length == 1
예제1)
class MultiArrayExam {
int arrInt [][] = new int [][]{
{1,3,5,7},
{2,4,8,11,15},
{1,2,4},
{100,200},
};
public void test(){
System.out.println("============================================================");
for (int i = 0;i<arrInt.length;i++) // 3행
{
for (int j = 0; j<arrInt[i].length; j++) // 4열
{
System.out.print(arrInt[i][j] +"\t");
}
System.out.println();
}
public static void main (String [] args){
MultiArrayExam mae = new MultiArrayExam();
mae.test();
}
}