배열과 리스트의 기초
선수학습(1개)
요약
배열과 리스트의 기본 개념, 선언과 초기화, 인덱스를 통한 접근 방법을 알아봅니다. 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) 은 같은 종류의 데이터를 메모리에 나란히 저장하는 구조입니다.
변수가 값을 하나만 담는 빈 상자라면, 배열은 같은 종류의 빈 상자가 나란히 이어져 있는 것입니다. 각 상자에 번호(인덱스)가 붙어 있어서, 번호로 원하는 상자를 찾아 값을 넣거나 꺼낼 수 있습니다.

int: 정수를 저장하겠다는 뜻 (자료형1)scores: 배열의 이름[3]: 칸을 3개 만들겠다는 뜻{85, 90, 78}: 각 칸에 넣을 값

위 코드는 정수 3개를 저장할 수 있는 배열을 만들고, 각각 85, 90, 78로 초기화2합니다.
배열 크기 생략
초기화할 때 배열 크기를 생략하면, 컴파일러3가 값의 개수를 보고 크기를 자동으로 결정합니다.
배열의 요소 쌩기초
요소(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]은 범위를 벗어난 접근입니다. C에서는 에러 메시지 없이 쓰레기 값이 출력되거나 프로그램이 비정상 종료될 수 있어서 특히 주의해야 합니다.
printf는 화면에 값을 출력하는 함수이고,%d는 정수를 출력하라는 의미입니다. 자세한 내용은 출력 함수 페이지를 참고하세요.
2차원 배열 심화
2차원 배열은 행과 열로 이루어진 표 형태의 배열입니다. 2차원 배열과 포인터를 함께 사용하는 포인터 배열도 시험에 자주 출제됩니다.
2차원 배열의 선언, 초기화, 접근 방법 등 자세한 내용은 2차원 배열 페이지에서 확인하세요.
배열이란? 쌩기초
배열(Array) 은 같은 종류의 데이터를 메모리에 나란히 저장하는 구조입니다.
변수가 값을 하나만 담는 빈 상자라면, 배열은 같은 종류의 빈 상자가 나란히 이어져 있는 것입니다. 각 상자에 번호(인덱스)가 붙어 있어서, 번호로 원하는 상자를 찾아 값을 넣거나 꺼낼 수 있습니다.


방법 1(new int[3])로 생성하면 값을 지정하지 않았으므로 모든 칸이 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 속성4으로 배열의 크기(요소 개수)를 알 수 있습니다.
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]) | 100 |
a[0] | 첫 번째 요소의 값 | 10 |
&a[0] | 첫 번째 요소의 주소 | 100 |
*a | a가 가리키는 값 (= a[0]) | 10 |
*a와 a[0]이 같은 이유
여기서 두 가지 기호를 알아야 합니다.
&(주소 연산자): 변수 앞에 붙이면 그 변수의 주소를 가져옵니다.&a[0]은a[0]이 저장된 주소입니다.*(역참조 연산자): 주소 앞에 붙이면 그 주소에 저장된 값을 가져옵니다.*ptr은 ptr이 가리키는 곳의 값입니다.
int *ptr에서의*는 "이 변수는 포인터입니다"라는 선언 표시이고,*a에서의*는 "이 주소의 값을 가져와라"라는 역참조 동작입니다. 같은 기호지만 의미가 다릅니다.
배열 이름 a가 &a[0]과 같으므로:
&a[0]은 a[0]의 주소이고, 주소에 *를 붙이면 그 주소의 값을 가져오므로, *(&a[0])은 a[0]의 값(10)입니다.
포인터에 배열 대입
그래서 포인터에 배열을 대입할 때 &를 붙이지 않습니다.
문자 배열 (문자열) 기초
문자(char)를 저장하는 배열은 문자열이 됩니다. 문자열 끝에는 **널 문자('\0')**가 자동으로 추가됩니다. 널 문자는 문자열의 끝을 표시하는 보이지 않는 특수 문자입니다.
"HELLO"는 5글자이지만, C에서는 문자열 끝에 자동으로 '\0'이 붙으므로 실제 배열 크기는 6이 됩니다.
| 인덱스 | 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] |
| 리스트 컴프리헨션 | 한 줄로 리스트 생성 | [x*2 for x in lst] |
| len() | 리스트의 요소 개수 반환 | len(x) |
| sum() | 리스트 요소의 합 반환 | sum(x) |
리스트 기초
리스트(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차원 리스트는 리스트 안에 리스트가 있는 구조로, 행과 열로 이루어진 표처럼 동작합니다.
| 열 0 | 열 1 | 열 2 | |
|---|---|---|---|
| lol[0] | 1 | 2 | 3 |
| lol[1] | 4 | 5 | 6 |
| lol[2] | 7 | 8 | 9 |
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] |
리스트 컴프리헨션
리스트 컴프리헨션(List Comprehension) 은 반복문과 조건식을 한 줄로 압축하여 새 리스트를 만드는 문법입니다.
기본 형식
for 문이 한 번 돌 때마다 표현식의 결과가 새 리스트의 요소로 들어갑니다.
예시 1: 모든 요소를 2배로
이는 다음 for문과 동일합니다.
예시 2: 조건 필터링
if 절을 붙이면 조건을 만족하는 요소만 포함합니다.
예시 3: 표현식에 연산 적용
len()과 sum() 함수
len()과 sum()은 리스트와 함께 자주 쓰이는 내장 함수입니다. 메서드처럼 점(.)을 찍지 않고, 함수 이름 뒤 괄호 안에 리스트를 넣어 호출합니다.
len() — 요소 개수
len(리스트) 는 리스트에 들어 있는 요소의 개수를 반환합니다.
문자열의 길이를 구할 때도 같은 함수를 사용합니다.
sum() — 요소의 합
sum(리스트) 는 리스트에 들어 있는 숫자 요소의 합을 반환합니다.
평균 계산 패턴
sum()과 len()을 함께 사용하면 평균을 한 줄로 구할 수 있습니다.
| 함수 | 설명 | 예시 | 결과 |
|---|---|---|---|
len(x) | 요소 개수 | len([1, 2, 3]) | 3 |
sum(x) | 요소의 합 | sum([1, 2, 3]) | 6 |
sum(x) / len(x) | 평균 | sum([1, 2, 3]) / len([1, 2, 3]) | 2.0 |