배열과 리스트의 기초
요약
배열과 리스트의 기본 개념, 선언과 초기화, 인덱스를 통한 접근 방법을 알아봅니다. C언어, Java 배열과 Python 리스트를 비교하며 정보처리기사 실기에 자주 출제되는 핵심 개념을 정리합니다.
배열 핵심 정리
배열 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 배열 선언 | 같은 자료형의 변수를 연속으로 저장 | int arr[5]; |
| 배열 초기화 | 선언과 동시에 값 할당 | int arr[] = {1, 2, 3}; |
| 인덱스 | 배열 요소의 위치 (0부터 시작) | arr[0], arr[1] |
| 개념 | 설명 | 예시 |
|---|---|---|
| 배열 선언 | 같은 자료형의 변수를 연속으로 저장 | int[] arr = new int[5]; |
| 배열 초기화 | 선언과 동시에 값 할당 | int[] arr = {1, 2, 3}; |
| 인덱스 | 배열 요소의 위치 (0부터 시작) | arr[0], arr[1] |
| length | 배열의 크기를 반환하는 속성 | arr.length |
배열이란?
배열(Array) 은 같은 자료형의 데이터를 연속된 메모리 공간에 저장하는 자료구조입니다.


위 코드는 정수 3개를 저장할 수 있는 배열을 만들고, 각각 85, 90, 78로 초기화합니다.
배열의 요소
요소(Element) 는 배열에 저장된 각각의 값을 말합니다. 배열은 여러 개의 요소를 담는 상자라고 생각하면 됩니다.
| 용어 | 설명 | 예시 |
|---|---|---|
| 배열 | 요소들을 담는 전체 공간 | scores |
| 요소 | 배열에 저장된 각각의 값 | 85, 90, 78 |
| 인덱스 | 요소의 위치 번호 (0부터 시작) | 0, 1, 2 |
배열의 각 요소는 개별 변수처럼 사용할 수 있습니다.
배열 인덱스
배열의 각 요소는 인덱스(Index) 를 통해 접근합니다. 인덱스는 0부터 시작합니다.
| 인덱스 | 값 |
|---|---|
scores[0] | 85 |
scores[1] | 90 |
scores[2] | 78 |
배열 크기가 3이면 유효한 인덱스는 0, 1, 2입니다.
scores[3]은 범위를 벗어난 접근입니다.
배열 크기 확인
배열 크기 생략
초기화할 때 배열 크기를 생략하면, 컴파일러가 초기화 값의 개수로 크기를 결정합니다.
for문으로 배열 순회
배열의 모든 요소를 출력하려면 for문을 사용합니다.
2차원 배열
2차원 배열과 포인터를 함께 사용하는 포인터 배열도 시험에 자주 출제됩니다. 포인터 배열은 각 요소가 포인터인 배열로, 2차원 배열의 각 행을 가리킬 수 있습니다.
배열이란?
배열(Array) 은 같은 자료형의 데이터를 연속된 메모리 공간에 저장하는 자료구조입니다.


방법 1로 생성하면 모든 요소가 기본값(int는 0)으로 초기화됩니다. 방법 2는 선언과 동시에 값을 지정합니다.
배열의 요소
요소(Element) 는 배열에 저장된 각각의 값을 말합니다. 배열은 여러 개의 요소를 담는 상자라고 생각하면 됩니다.
| 용어 | 설명 | 예시 |
|---|---|---|
| 배열 | 요소들을 담는 전체 공간 | scores |
| 요소 | 배열에 저장된 각각의 값 | 85, 90, 78 |
| 인덱스 | 요소의 위치 번호 (0부터 시작) | 0, 1, 2 |
배열의 각 요소는 개별 변수처럼 사용할 수 있습니다.
배열 인덱스
배열의 각 요소는 인덱스(Index) 를 통해 접근합니다. 인덱스는 0부터 시작합니다.
| 인덱스 | 값 |
|---|---|
scores[0] | 85 |
scores[1] | 90 |
scores[2] | 78 |
배열 크기 확인
length 속성
Java 배열은 length 속성으로 배열의 크기(요소 개수)를 알 수 있습니다.
for문으로 배열 순회
배열의 모든 요소를 출력하려면 for문을 사용합니다. 이 패턴은 정보처리기사 실기에서 매우 자주 출제됩니다.
단계별 실행 과정
| 반복 | i 값 | 조건 (i < 4) | a[i] | 출력 |
|---|---|---|---|---|
| 1회 | 0 | 참 | a[0] = 0 | 0 |
| 2회 | 1 | 참 | a[1] = 1 | 1 |
| 3회 | 2 | 참 | a[2] = 2 | 2 |
| 4회 | 3 | 참 | a[3] = 3 | 3 |
| 5회 | 4 | 거짓 | - | (종료) |
System.out.print는 줄바꿈 없이 출력하므로 결과가 한 줄에 이어서 나옵니다. print와 println의 차이는 반복문 페이지에서 확인하세요.
2차원 배열
Java에서 2차원 배열은 배열의 배열입니다. 각 행의 열 수가 다를 수 있는 가변 배열(Jagged Array) 을 지원합니다.
| 인덱스 0 | 인덱스 1 | 인덱스 2 | |
|---|---|---|---|
| arr[0] | 45 | 50 | 75 |
| arr[1] | 89 | - | - |
배열 이름은 주소다
C언어에서 배열 이름은 배열의 첫 번째 요소의 주소입니다. 이 개념은 포인터 배열을 이해하는 데 필수적인 지식입니다.
즉, a와 &a[0]은 같습니다.
| 표현 | 의미 | 예시 결과 |
|---|---|---|
a | 배열의 시작 주소 (= &a[0]) | 0x1000 |
a[0] | 첫 번째 요소의 값 | 10 |
&a[0] | 첫 번째 요소의 주소 | 0x1000 |
*a | a가 가리키는 값 (= a[0]) | 10 |
*a와 a[0]이 같은 이유
배열 이름 a가 &a[0]과 같으므로:
주소에 *를 붙이면 그 주소의 값을 가져옵니다. &a[0]은 a[0]의 주소이므로, *(&a[0])은 a[0]의 값입니다.
포인터에 배열 대입
그래서 포인터에 배열을 대입할 때 &를 붙이지 않습니다.
문자 배열 (문자열)
문자(char)를 저장하는 배열은 문자열이 됩니다. 문자열 끝에는 널 문자('\0')가 자동으로 추가됩니다.
| 인덱스 | 0 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|---|
| 값 | 'H' | 'E' | 'L' | 'L' | 'O' | '\0' |
자세한 내용은 문자열 페이지를 참고하세요.
배열 선언 방법 비교
Java에서 배열을 선언하는 다양한 방법이 있습니다.
| 방법 | 크기 지정 | 값 초기화 | 비고 |
|---|---|---|---|
new int[4] | 직접 | 기본값(0) | 나중에 값 대입 |
{0, 1, 2, 3} | 자동 | 직접 | 선언과 동시에만 가능 |
new int[]{0, 1, 2, 3} | 자동 | 직접 | 어디서든 사용 가능 |
리스트 핵심 정리
| 개념 | 설명 | 예시 |
|---|---|---|
| 리스트 선언 | 대괄호로 값을 나열하여 생성 | x = [1, 2, 3] |
| 인덱스 | 0부터 시작, 음수 인덱스 지원 | x[0], x[-1] |
| append | 리스트 끝에 요소 하나 추가 | x.append(4) |
| extend | 다른 리스트의 요소를 모두 추가 | x.extend([5, 6]) |
| pop | 특정 인덱스의 요소를 꺼내고 제거 | x.pop(0) |
| reverse | 리스트를 제자리에서 뒤집기 | x.reverse() |
| enumerate | 인덱스와 값을 함께 반환 | for i, v in enumerate(x): |
| 슬라이싱 | 범위 지정으로 부분 리스트 추출 | x[::2], x[::-1] |
리스트 기초
리스트(List) 는 Python에서 가장 많이 쓰이는 자료구조로, 여러 값을 순서대로 저장합니다. 대괄호 []를 사용하며, 서로 다른 자료형을 함께 담을 수 있습니다.
인덱스로 접근하기
리스트의 각 요소는 인덱스로 접근합니다. 인덱스는 0부터 시작하고, 음수 인덱스를 사용하면 뒤에서부터 접근합니다.
| 인덱스 | 0 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|---|
| 양수 | 10 | 20 | 30 | 40 | 50 |
| 음수 | x[-5] | x[-4] | x[-3] | x[-2] | x[-1] |
리스트 주요 메서드
| 메서드 | 설명 | 예시 |
|---|---|---|
append(값) | 리스트 끝에 요소 하나 추가 | x.append(4) |
extend(리스트) | 다른 리스트의 요소를 모두 추가 | x.extend([5, 6]) |
insert(i, 값) | 인덱스 i 위치에 값 삽입 | x.insert(1, 99) |
pop(i) | 인덱스 i의 요소를 꺼내고 제거 (기본: 마지막) | x.pop(0) |
remove(값) | 처음 나오는 해당 값을 삭제 | x.remove(3) |
reverse() | 리스트를 제자리에서 뒤집기 | x.reverse() |
2차원 리스트
2차원 리스트는 리스트 안에 리스트가 있는 구조로, 행과 열로 이루어진 표처럼 동작합니다.
lol[행][열] 형태로 접근합니다.
enumerate 함수
enumerate()는 리스트를 for문으로 순회할 때 인덱스와 값을 동시에 반환합니다.
리스트 슬라이싱
슬라이싱(Slicing) 은 리스트의 일부를 잘라내는 기능입니다. x[시작:끝:간격] 형식을 사용합니다.
| 슬라이싱 | 의미 | 결과 |
|---|---|---|
x[::2] | 처음부터 끝까지 2칸씩 | [0, 2, 4, 6, 8] |
x[1::2] | 인덱스 1부터 2칸씩 | [1, 3, 5, 7, 9] |
x[::-1] | 역순으로 전체 | [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] |