📕 배열(Array)
- 데이터 타입이 동일한 여러 값을 하나의 변수 이름으로 관리하는 자료 구조
- 연속된 메모리 공간에 데이터를 저장
- 각 요소(element)에 인덱스(주소)를 사용해 접근한다.
- 크게 정적 배열(Static Array)과 동적 배열(Dynamic Array)으로 나뉜다.
- 추후 동적 배열 파트에서 둘의 차이를 비교할 예정.
📕정적 배열(Static Array)
- 컴파일 시점에 크기, 데이터 타입이 결정되는 배열
- 이후 배열의 크기가 변경될 수 없음.
📗 특징
- 배열 크기 고정 : 선언 시 정한 크기로 고정됨
- 데이터 타입 고정 : 하나의 배열에 하나의 자료형만 선언됨
- 연속된 메모리 공간에 저장됨
- 인덱스를 통해 요소에 접근
- 컴파일 시 stack 영역에 할당됨
📘 메모리 영역
이번 주에 다룰 정적 배열과 동적 배열의 이해를 위해서 메모리 영역을 간단하게 정리하였다.
- Code : 실행할 프로그램의 코드가 저장되는 영역
- Data : 프로그램의 전역 변수, 정적 변수가 저장되는 영역. 프로그램 시작 시 생성되며 종료 시 삭제됨.
- Heap : 사용자에 의해 동적으로 할당되고 해제되는 영역.
- Stack : 지역변수와 매개변수가 저장되는 영역. 스택 구조(LIFO; Last in, First out)
📗 구조
int[] example = {1, 2, 3, 4;
index | 0 | 1 | 2 | 3 |
value | 1 | 2 | 3 | 4 |
📗 장단점
장점
- 구현 난이도 낮음
- 메모리 사용량 예측 가능 : 배열 크기가 미리 고정됨
- 인덱스 통한 빠른 데이터 접근 가능
단점
- 크기 고정 : 실행 중 배열의 크기를 변경할 수 없어 유연성이 떨어짐
- 스택 메모리 사용으로 인해 큰 크기 배열 선언이 어려움
- 함수에서 큰 배열을 선언했을 때 배열이 생성 및 초기화되며 스택 오버플로우가 발생할 수 있음.
📗 예시 코드
public class Main {
public static void main(String[] args) {
int[] scores = {85, 90, 78, 92, 88};
int sum = 0;
for (int score : scores) { // 향상된 for문 사용
sum += score;
}
System.out.println("평균 점수: " + (sum /scores.length));
}
}
📗 참고 자료
1. 그래서, 스택이랑 힙이 뭔데? : https://www.jiwon.me/explain-heap-and-stack/
2. [자료구조] 정적 배열(Array)과 동적배열(Vector) : https://jinhos-devlog.tistory.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%EC%A0%95%EC%A0%81%EB%B0%B0%EC%97%B4Array%EA%B3%BC-%EB%8F%99%EC%A0%81%EB%B0%B0%EC%97%B4Vector
'🏕 멋사 Java 백엔드 13기 > 자료구조' 카테고리의 다른 글
1주차 : 복잡도(Complexity)와 Big-O notation (2) | 2024.12.13 |
---|