☭DEVELOPER/#2 웹개발(자바기반 풀스택)

[BACKEND]JAVA_ECLIPSE10 배열

조반짝 2023. 8. 22. 15:19
728x90
반응형

잠깐!! 코딩테스트

문제를 잘 푼듯 하지만 함수를 생성해야 맞는 답변이다!!

함수 생성하기

import java.util.Scanner;

//Q1.
//덧셈 연산을 수행하는 함수를 생성하고,
//두 정수를 입력 받아서, 합의 결과값을 구현하는
//자바 프로그램을 제작하시기 바랍니다.

public class Coding_Test01 {

	public static void main(String[] args) {
		
		//키보드로 입력받는 값 in > out
		Scanner scan = new Scanner(System.in);
		System.out.println("첫번째 정수값을 입력하세요==> ");
		int num1 = scan.nextInt();
		System.out.println("나머지 정수값을 입력하세요==> ");
		int num2 = scan.nextInt();
		
		int result = sum(num1, num2);
		System.out.println("정수 합의 결과는" + result);
	}
	
	private static int sum(int num1, int num2) {
		int sum = 0;
		sum = num1 + num2;
		return sum;
	}
}

 

 


배열 array

일련의 많은 양의 데이터값 적은 코드로 처리하기 위함

1.배열은 같은타입의 데이터만 저장할 수 있다.

  선언과 동시에 저장할 수 있는 타입이 저장할 수 있는 타입이 결정된다.

  마냑 다른 타입의 값을 저장하려고 하면 타입 불일치 type mismatch 컴파일 에러가 발생한다.

2. 한번 생성된 배열은 길이를 늘리거나 줄일수 없지만, 길이를 늘이거나 줄이게 하는 클래스가 존재한다.

   

배열선언   

배열으 ㄹ사용하기 위해서는 우선 배열 변수를 선언해야한다.

 

배열 형식

배열 형식은 대괄호가 타입 뒤에 붙을 수도 있고 변수 뒤에 붙을 수도 있다.

형식1

타입[ ] 변수;

형식2

타입 변수 [ ];

배열 변수는 참조변수에 속한단.

배열도 객체이므로 힙영역에 생성되고 배열변수는 힙 영역의 배열 객체를 참조하게 된다.

만일 참조할 배열 객체가 없다면 배열 변수는 null 값으로 초기화될 수 있다.

만약 배열 변수가 null 값을 가진 상태에서 변수[인덱스]로 값을 읽거나 저장하게 되면 NullPointerException이 발생한다.

이를 해결하기 위해서 배열을 생성하고 배열 변수가 참조하는 상태에서 값을 저장하거나 읽어야한다.

타입 [ ] = null

배열 생성

배열 객체를 생성하려면 값 목록을 이용하거나 new연산자를 이용하는 방법이 있다.

 

값 목록으로 배열 생성

타입 [ ] 변수 = { 값0, 값1, 값2, 값3, ... }; 

 

new연산자로 배열 생성

타입 [ ] 변수 = new 타입[길이]

값의 목록을 가지고 있지 않지만, 향후 값들을 저장할 배열을 미리 만들고 싶다면 new연산자로 생성할 수 있다.


ArrayCreateByValueListExample1 값 목록으로 배열 생성

디버깅으로 데이터값의 흐름을 파악할 수 있다.

package chapter05.sec01.exam01;

//값 목록으로 배열 생성을 하는 자바 프로그램 소스 코딩입니다.
public class ArrayCreateByValueListExample1 {

	public static void main(String[] args) {
		
		//[] 배열 인덱스
		int [] scores = {83, 90, 87};
		
		System.out.println("scores[0] = " + scores[0]); //83
		System.out.println("scores[1] = " + scores[1]); //90
		System.out.println("scores[2] = " + scores[2]); //87
		
		int sum = 0;
		for (int i = 0; i < 3; i++) { // i = 0, 1, 2
			sum += scores[i]; // sum = sum + scores[i];
			System.out.println("sum 변수값의 변화값 = " + sum);
		}
		System.out.println("총 합계값 sum = " + sum); // 총 합계값 sum = 260
		double avg = (double) sum /3; 
		// 소수점으로 값이 출력되어야 하기 때문에 int > double로 강제 형변환 한다.
		System.out.println("평균값 = " + avg);
	}
}

index 0-29공간을 선언과 초기화를 한번에 할 수 있다.

int 의 초기값 : 0

string의 초기값 : null

boolean 의 초기값 : false

 

ArrayCreateByValueListExample2 new 연산자로 배열 생성

// 지역변수 : 지정 함수안에서만 존재함 
// 전역변수 : 메모리가 무거워짐
// 매개변수: 함수 안에 있는 변수를 매개변수(Parameter), 함수가 생성됐을 때만 영향력을 미칠 수 있다. > 지역변수

영역이 다르기 때문에 같은 변수 이름을 써도 무관하다.

add 함수 안에 매개 변수로 scores 함수로 선언되었다.

 

==================== 기준으로 위 아래는 결과 값이 같다.

아랫 부분은 함수를 따로 빼서 결과값을 도출할 수 있다.

(add라는 함수를 따로 때서 결과를 처리)

package chapter05.sec02.exam02;

//값 목록으로 배열 생성하는 자바 프로그램 소스 코딩입니다.
public class ArrayCreateByValueListExample2 {

	public static void main(String[] args) {

		int[] scores;
		scores = new int[] {83, 90, 87};
//		scores = int[] {83, 90, 87};
		int sum1 = 0;
		for (int i = 0; i < 3; i++) { // i = 0, 1, 2
			sum1 += scores[i]; // sum1 = sum1 + scores[i];
		}
		System.out.println("총합계값 sum1 =" + sum1); //총합계값 = 260
		
		System.out.println("=========================");
		
		int sum2 = add(new int[] {83, 90, 87});
		System.out.println("총합계값 sum2 =" + sum2);
	}
//	함수 호출 하면 add 로 간다.
//	add() 메서드는 총 합계값을 계산해서, return문을 활용하여
//	add() 메서드를 호출한 곳으로 결과 합계 값인 sum 변수값을 리턴(반환) 처리해 줍니다.
	private static int add(int[] scores) {
		int sum1 = 0; //위에 sum1 과 영역이 다르기 때문에 이름이 같아도 다른 변수이다.
		for (int i = 0; i < 3; i++) { // i = 0, 1, 2
			sum1 += scores[i];
		}
		return sum1;
	}

}
// 지역변수 : 지정 함수안에서만 존재함 
// 전역변수 : 메모리가 무거워짐
// 매개변수: 함수 안에 있는 변수를 매개변수(Parameter), 함수가 생성됐을 때만 영향력을 미칠 수 있다. > 지역변수

ArrayCreateByNewExample new 연산자로 배열 생성

 

int 타입으로 new 연산자 생성

double 타입으로 new 연산자 생성

 

배열 길이에 대한 이해

배열의 길이란 배열에 저장할 수 있는 전체 항목의 개수를 말한다.

코드에서 배열의 길이를 얻으려면 배열객체의 lenght필드를 읽는다.

필드 = 내부의 데이터

배열의 length필드를 읽기 위해서는 배열 변수에 도트(.) 연산자를 붙익도 length를 적어주면된다.

배열 변수.length;

 

이러한 번거러움을 줄이기 위해 length를 이용한다.

 

legnth의 숫자가 변경되고 array 값도 자동으로 변경된다.

package chapter05.sec02.exam03;

//new 연산자(키워드/지시어/명령어)로 배열 생성 활용하는 자바프로그램 소스 코딩입니다.
public class ArrayCreateByNewExample {

	public static void main(String[] args) {
		
		int[] arr1 = new int[3];
		for (int i = 0; i < 3; i++) { //i = 0, 1, 2
			System.out.println("arr1[" + i + "] =" + arr1[i]);
		}
		
		arr1[0] = 10;
		arr1[1] = 20;
		arr1[2] = 30;
		for (int i = 0; i < 3; i++) { //i = 0, 1, 2
			System.out.println("arr1[" + i + "] =" + arr1[i]);		
		}
		for (int i = 0; i < 3; i++) { //i = 0, 1, 2
			System.out.println("arr1[" + i + "] =" + arr1[i]);		
		}
		
		double[] arr2 = new double[3];
		for (int i = 0; i < 3; i++) {//i = 0, 1, 2
			System.out.println("arr2[" + i + "] =" + arr2[i]);			
		}
		arr2[0] = 0.1;
		arr2[1] = 0.2;
		arr2[2] = 0.3;
		for (int i = 0; i < 3; i++) {//i = 0, 1, 2
		System.out.println("arr2[" + i + "] =" + arr2[i]);		
		}
		String[] arr3 = new String[3];
		for (int i = 0; i < 3; i++) {//i = 0, 1, 2
			System.out.println("arr3[" + i + "] =" + arr3[i]);
		}
		arr3[0] = "1월";
		arr3[1] = "2월";
		arr3[2] = "3월";
		for (int i = 0; i < 3; i++) {//i = 0, 1, 2
			System.out.println("arr3[" + i + "] =" + arr3[i]);
		}
		//배열의 길이에 대한 이해 : 배열 변수.length
		String [] strArray = {"장나라", "김희선", "김다미"};
		System.out.println("strArray.length =" + strArray.length);
		for (int i = 0; i < strArray.length; i++) {
			System.out.println("strArray[" + i + "] =" + strArray[i]);
			
		}
	}
}

ArrayLengthExample 배열의 길이

package chapter05.sec02.exam04;

//배열의 length 필드 활용 자바 프로그램 소스 코딩입니다.
public class ArrayLengthExample {

	public static void main(String[] args) {
		
		int[] scores = {83, 90, 87};
		System.out.println("scores.length 값 =" + scores.length);
		int sum = 0;
		for (int i = 0; i < scores.length; i++) {
			sum += scores[i]; //sum = sum + scores[i
		}
		System.out.println("총 합계 값 = " + sum);
		
		double avg = (double)sum/scores.length;
		System.out.println("평균 값 = " + avg);
	}

}

변수의 종류


명령라인 입력

 

main() : 메인 함수, 메인 메소드

 

함수: Function(기능 단위, 재사용 목적 활용)

메소드 : method (방법, 수단, 재사용 목적 활용)

 


MainStringArrayArgument

 

실행할 땓 매개값을 주지 않으면 길이 0인 string 배열이 매개값으로 전달되기 때문이다.

따라서 args.length는 0이므로 5라인의 if조건식이 true가 되어 if문의 블록이 실행된것이다.

arguments : 인수 , 어떤 선택된 값을 넣어주는 것

package chapter05.sec02.exam05;

//main() 메서드의 매개변수(Parameter) 활용 자바 프로그램 소스 코딩입니다.
public class MainStringArrayArgument {

	public static void main(String[] args) {
		if (args.length != 2) { //입력된 데이터 개수가 2개가 아닐 경우,
			System.out.println("값의 수가 부족합니다!");
			System.exit(0); // 프로그램 강제 종료 처리를 합니다.
		}
		String strNum1 = args[0]; // 첫번쨰 데이터를 strNum1 변수에 대입 처리합니다
		String strNum2 = args[1]; // 두번째 데이터를 strNum1 변수에 대입 처리합니다
		
		// 앞서, 문자열로 입력된 데이터를 정수형 데이터로 변환 처리합니다.
		int num1 = Integer.parseInt(strNum1);
		// 앞서, 문자열로 입력된 데이터를 정수형 데이터로 변환 처리합니다.
		int num2 = Integer.parseInt(strNum2);
		
		int result = num1 + num2;
		System.out.println(num1 + " + " + num2 + " = " + result);
	}
}

이렇게 실행하면 arg는 {10, 20}배열을 참조하게 되고 args[0]은 "10", args[1]은 "20"을 얻을 수 있다.

문자열은 산술연산을 할 수 없기 때문에 이문자열들을 integer.parseInt() 메소드를 이용해서 정수로 변환


다차원 배열

배열의 정확한 길이를 알고 인덱스를 사용해야한다.

 

 

 

ArrayInArrayExample 배열 속에 배열 활용

new ing [2][ ]

{ { }, { }  }

package chapter05.sec02.exam06;

//배열 속에 배열 활용 자바 프로그램 소스코딩입니다.
public class ArrayInArrayExample {

	public static void main(String[] args) {
		
		int [][] mathScores = new int[2][3];
		for (int i = 0; i < mathScores.length; i++) {
//			System.out.println(i); //0, 1
			for (int k = 0; k < mathScores[i].length; k++) {
//				System.out.println(k); // 0, 1, 2, 0, 1, 2
				System.out.println("mathScores[" + i + "][" + k + "] = " + mathScores[i][k]);
			}
		}
		System.out.println("===========================");
		
		int [][] englishScores = new int[2][];
		englishScores[0] = new int[2];
		englishScores[1] = new int[3];
		
		for (int i = 0; i < englishScores.length; i++) {
//			System.out.println(i); //0, 1
			for (int k = 0; k < englishScores[i].length; k++) {
//				System.out.println(k); // 0, 1, 2, 0, 1, 2
				System.out.println("englishScores[" + i + "][" + k + "] = " + englishScores[i][k]);
			}
		}
		System.out.println("===========================");
		
		int[][] javaScores = { {95, 80}, {92, 96, 80} };
		for (int i = 0; i < javaScores.length; i++) {
//			System.out.println(i); //0, 1
			for (int k = 0; k < javaScores[i].length; k++) {
//				System.out.println(k); // 0, 1, 2, 0, 1, 2
				System.out.println("javaScores[" + i + "][" + k + "] = " + javaScores[i][k]);
			}
		}
	}
}

 


객체를 참조하는 배열

ArrayReferenceObjectExample 객체(Object)를 참조(Reference)하는 배열(Array)

문자열을 비교하기 위해서는 == 대신, equals() 메소드를 사용해야한다.


배열복사

배열은 한번 생성하면 크기를 변경할 수 없기 때문에 더 많은 저장공간이 필요하다면 더 큰 배열을 새로 만들고 이전 배열로부터 항목 값들을 복사해야한다.

 

Array Copy By For Example

package chapter05.sec02.exam08;

// for문으로 배열을 복사하는 자바 프로그램 소스 코딩을 해봅시다.
public class ArrayCopyByForExample {

	public static void main(String[] args) {
		
		int[] oldIntArray = {1, 2, 3,}; // 복사가 될 데이터를 선언하고 초기화 처리합니다.
		
		int[] newIntArray = new int[5];
		
		//앞서 복사가 될 데이터 배열 변수 oldIntArray의 값들을 newIntArray 배열 변수에 
		// 반복적으로 for문을 활용하여, 대입처리해줍니다.
		for (int i = 0; i < oldIntArray.length; i++) {
			newIntArray[i] = oldIntArray[i];
		}
		
		// 반복적으로 for문을 활용하여, newIntArray 배열 변수에 담겨진 값들을
		// 화면으로 출력해서 확인해 봅니다.
		for (int i = 0; i < newIntArray.length; i++) {
			System.out.print(newIntArray[i] + ", ");
		}
	}

}

ArrayCopyExample

package chapter05.sec02.exam09;

//system.arraycopy() 메서드로 배열 복사를 처리하는 자바 프로그램 소스코딩을 해봅니다.
public class ArrayCopyExample {

	public static void main(String[] args) {

		String[] oldStrArray = {"java", "array", "copy"};
		String[] newStrArray = new String[5];
		
		System.arraycopy(oldStrArray, 0, newStrArray, 0, oldStrArray.length);
		
		for (int i = 0; i< newStrArray.length; i++) {
			System.out.println(newStrArray[i] + ", ");
		}
	}

}

 


향상된 for 문 ★

 

Enhanced For Example

 

indexed for문

enhanced for 문 >> 순환 반복자

package chapter05.sec02.exam10;
// 향상된 for문 (Enhanced for문)을 활용한 자바 프로그램 소스 코딩을 해봅니다.
public class EnhancedForExample {

	public static void main(String[] args) {
		
		int[] scores = {95, 71, 84, 93, 87};
		
		int sum = 0;
		
//		for문을 활용한 sum 합계 값처리하기
//		for (int i = 0; i < scores.length; i++) {
//			sum = sum + scores[i];
//		}
		
//		Enhanced for문을 활용한 sum 합계값 처리하기
		for (int score : scores) {
			sum = sum + score;
		}
		
		System.out.println("점수 총합 = " + sum); // 점수 총합 = 430
		
		double avg = (double) sum / scores.length;
		System.out.println("평균 점수 = " + avg); //평균 점수 = 86.0
	}

}

정리

 

728x90
반응형