본문 바로가기

Java

배열 ( Array )

배열 (Array)이란?

연관된 데이터를 모아서 통으로 관리하기 위해서 사용하는 데이터 타입이다. 변수가 하나의 데이터를 저장하기 위한 것이라면 배열은 여러 개의 데이터를 하나의 변수에 저장하기 위한 것이리고 할 수 있다.

 

배열의 특징

  • 동일한 자료형의 순차적 자료 구조
  • 인덱스 연산자[]를 이용하여 빠른 참조가 가능
  • 물리적 위치와 논리적 위치가 동일
  • 배열의 순서는 0부터 시작 (인덱스라고 한다)
  • 자바에서는 객체 배열을 구현한 ArrayList를 많이 활용함

 

배열 선언와 초기화

배열 선언하기

int[] arr1 = new int[10];
int arr2[] = new int[10];

 

 

자료 구조에 대한 개념

자료 구조는 데이터를 어떻게 조직화하고 저장하며 접근할지를 결정하는 방법이다.

 

자료구조의 특징

  • 효율성 : 데이터를 효율적으로 저장, 검색, 삽입, 삭제할 수 있어야 한다.
  • 추상화 : 데이터의 논리적인 구조와 물리적인 구현을 분리하여 추상적으로 정의해야 한다.
  • 재사용성 : 여러 응용 프로그램에서 재사용할 수 있도록 일반적이고 유연한 구조여야 한다.

자주 사용되는 자료 구조

  • 배열(Array) : 동일한 데이터 타입의 요소들을 연속된 메모리 공간에 저장하느 자료 구조이다.
  • List, Map, Set, 스택, 큐, 트리 등이 있다.

연습 문제

package basic.ch13;

public class ArrayTest1 {

	// 코드의 시작점 - 메인 함수
	public static void main(String[] args) {

		// 배열이란?
		// 연관된 데이터를 모아서 통으로 관리하기 위한 데이터 타입

		// 배열의 특징 (중요)
		// 배열은 사용하기 전에 반드시 몇 개의 데이터가 들어갈지
		// 크기를 지정해야 사용할 수 있다.

		// 배열 메모리 공간 만들기
		int[] numbers = new int[3];
		int intBoxes[] = new int[5];

		// 값 넣기 (초기화)
		// 배열의 길이 -> 3
		// 인덱스의 길이 -> 2
		numbers[0] = 1000;
		numbers[1] = 1001;
		numbers[2] = 1002;
		// numbers[3] = 1003; // -> 인덱스의 길이를 벗어 났음, 오류 발생
		
		// 사전 기반 지식
		// 모든 프로그래밍의 인덱스 번호 시작은 0부터 시작한다.
		
		// 배열의 선언과 동시에 초기화
		int[] grades = new int[] {5, 3, 1};
		int[] grades2 = {5, 3, 1}; // new int[] 생략 가능
		
		// 문제 1
		// 5개의 크기를 가지는 double 타입의 배열을 선언하시오.
		// 단, 배열의 이름은 마음대로 작성하세요.
		double[] num = new double[5]; // [][][][][]
		
		// 문제 2
		// 위에서 선언한 배열의 값을 인덱스 0 ~ 2 까지 초기화 하시오.
		// 값은 아무거나 상관없음
		num[0] = 10.5;
		num[1] = 20.45;
		num[2] = 30.65;
		// 값을 넣지 않으면 실수로 초기화
		// num[3] = 0.0;
		// num[4] = 0.0;
		
		// 문제 3
		// String 타입의 배열을 선언, 배열의 크기는 3개
		// 선언과 동시에 초기화 하세요.
		String[] food = new String[] {"떡볶이", "만두", "튀김"};
		String[] food2 = {"떡볶이", "만두", "튀김"};
		
	}// end of main

}// end of class

 

배열과 인덱스의 크기 차이로 인한 오류

 

연습 문제 - 인덱스의 크기는 n - 1개이다.

package basic.ch14;

public class ArrayTest2 {

	public static void main(String[] args) {
		
		String[] names = new String[5]; // 5칸 짜리 메모리 공간 할당 
		
		// 생성 - Create  
		names[0] = "김씨";
		names[1] = "나씨";
		names[2] = "박씨";
		// names[3] = null
		// names[4] = null 
		
		// 조회 - Read 
		System.out.println(names);
		System.out.println(names[0]);
		System.out.println(names[1]);
		System.out.println(names[2]);
		System.out.println(names[3]);
		System.out.println(names[4]);
		// System.out.println(names[5]);
		
		// 수정 - Update 
		names[0] = "Mr. Kim";
		names[1] = "Mr. Na";
		names[2] = "Mr. Park";

		// 삭제 - Delete
		names[0] = null; 
		names[1] = null;
		names[2] = null;
		
		// 자바에서 null 값은 할당 되지 않은 상태를 의미합니다. 
		// Object 타입에서 사용 가능 
		
		// 1단계 
		// 배열에 길이와 인덱스 길이에 대한 이해 --> 인덱스에 길이는 n - 1 이다. 
		System.out.println("배열에 크기 : " + names.length);
		System.out.println("인덱스에 크기(n - 1) : " + (names.length - 1));
		
		// 문제 2 
		// 배열에 크기가 50개이면 인덱스에 길이는 얼마인가? --> 49 
		// 배열에 크기가 100개이면 인덱스에 길이는 얼마인가? --> 99
		// 배열에 크기가 375개이면 인덱스에 길이는 얼마인가? --> 374

	} // end of main 

} // end of class

연습문제 - 배열의 길이와 요소 (elements)

배열의 길이와 요소의 개수는 꼭 동일하지 않다. -> 배열은 반복분과 함께 많이 사용된다.

package basic.ch14;

public class ArrayTest3 {

	public static void main(String[] args) {
		
		char[] alpahbets = new char[26];
		char ch1 = 'A';
		alpahbets[0] = ch1;
		
		char ch2 = 'B';
		alpahbets[1] = ch2;
		
		char ch3 = 'C'; 
		alpahbets[2] = ch3;
		
		char ch26 = 'z'; 
		alpahbets[25] = ch26;
		
		System.out.println("---------------");
		System.out.println(alpahbets[3]);
		if(alpahbets[3] == 0) {
			System.out.println("동작함");
		}
		System.out.println("---------------");
		
		// 배열은 반복문과 함께 많이 사용 된다. 
		int forCount = 0; 
		int eCount = 0; 
		
		for(int i = 0; i < alpahbets.length; i++) {
			if(alpahbets[i] != 0 ) {
				eCount++;
			}
			//alpahbets[i];
			System.out.println(alpahbets[i]);
			forCount++;
		}
        
		System.out.println("for 동작 횟수 " + forCount);
		System.out.println("배열안에 요소의 개수는 ? " + eCount);

	}// end of main  

} // end of class
package basic.ch14;

public class ArrayTest4 {
	
	public static void main(String[] args) {
		
		String[] arrayStr = new String[26];
		
		arrayStr[0] = "A";
		arrayStr[1] = "B";
		arrayStr[2] = "C";
		arrayStr[3] = "D";
		arrayStr[3] = "E";
		arrayStr[25] = "Y";
		
		System.out.println(arrayStr[4]); // --> null 
		// 배열안에 요소의 개수를 출력 하시오 
		// 값이 있다면 콘솔창에 출력
		// 반복문 활용
		int eCount = 0; 
		for (int i = 0; i < arrayStr.length; i++) {
			if(arrayStr[i] != null) {
				// 요소의 개수 저장
				eCount++;
				System.out.println(arrayStr[i]);
			}
		}
        
		System.out.println("요소의 개수 : " + eCount);
		
	} // end of main 
} // end of class
728x90

'Java' 카테고리의 다른 글

상속 ( Inheritance )  (1) 2024.04.23
메서드 오버로딩 ( Overloading )  (0) 2024.04.23
static 메소드 (함수)  (0) 2024.04.19
static 변수  (0) 2024.04.19
this  (0) 2024.04.19