정처기 감자정처기 감자
공통 기초배열/문자열

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

배열과 리스트의 기초

코딩C언어JavaPython
읽는데 21분 소요
처음 쓰인 날: 2026-02-03
마지막 수정일: 2026-05-22
조회수: —
선수학습(1개)
  • 반복문 (for, while) - 루프의 기초

요약

배열과 리스트의 기본 개념, 선언과 초기화, 인덱스를 통한 접근 방법을 알아봅니다. 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개가 나란히 이어져 있고, 각각 0, 1, 2 번호가 붙어 있는 모습
변수가 상자 하나라면, 배열은 상자가 나란히 이어져 있는 것입니다. 앞으로 배열은 대괄호 안에 넣겠습니다.
c
코드 하이라이팅 중…
  • int: 정수를 저장하겠다는 뜻 (자료형1)
  • scores: 배열의 이름
  • [3]: 칸을 3개 만들겠다는 뜻
  • {85, 90, 78}: 각 칸에 넣을 값
초기화된 배열
scores[0]에는 85, scores[1]에는 90, scores[2]에는 78이 저장됩니다.

위 코드는 정수 3개를 저장할 수 있는 배열을 만들고, 각각 85, 90, 78로 초기화2합니다.

배열 크기 생략

초기화할 때 배열 크기를 생략하면, 컴파일러3가 값의 개수를 보고 크기를 자동으로 결정합니다.

c
코드 하이라이팅 중…

배열의 요소

요소(Element) 는 배열에 저장된 각각의 값을 말합니다. 배열은 여러 개의 요소를 담는 상자라고 생각하면 됩니다.

c
코드 하이라이팅 중…
용어설명예시
배열요소들을 담는 전체 공간scores
요소배열에 저장된 각각의 값85, 90, 78
인덱스요소의 위치 번호 (0부터 시작)0, 1, 2

배열의 각 요소는 개별 변수처럼 사용할 수 있습니다.

c
코드 하이라이팅 중…

배열 인덱스

배열의 각 요소는 인덱스(Index) 를 통해 접근합니다. 인덱스는 0부터 시작합니다.

c
코드 하이라이팅 중…
인덱스값
scores[0]85
scores[1]90
scores[2]78

배열 크기가 3이면 유효한 인덱스는 0, 1, 2입니다. scores[3]은 범위를 벗어난 접근입니다. C에서는 에러 메시지 없이 쓰레기 값이 출력되거나 프로그램이 비정상 종료될 수 있어서 특히 주의해야 합니다.

printf는 화면에 값을 출력하는 함수이고, %d는 정수를 출력하라는 의미입니다. 자세한 내용은 출력 함수 페이지를 참고하세요.


2차원 배열

2차원 배열은 행과 열로 이루어진 표 형태의 배열입니다. 2차원 배열과 포인터를 함께 사용하는 포인터 배열도 시험에 자주 출제됩니다.

2차원 배열의 선언, 초기화, 접근 방법 등 자세한 내용은 2차원 배열 페이지에서 확인하세요.


배열이란?

배열(Array) 은 같은 종류의 데이터를 메모리에 나란히 저장하는 구조입니다.

변수가 값을 하나만 담는 빈 상자라면, 배열은 같은 종류의 빈 상자가 나란히 이어져 있는 것입니다. 각 상자에 번호(인덱스)가 붙어 있어서, 번호로 원하는 상자를 찾아 값을 넣거나 꺼낼 수 있습니다.

빈 배열 — 빈 상자 3개가 나란히 이어져 있고, 각각 0, 1, 2 번호가 붙어 있는 모습
변수가 상자 하나라면, 배열은 상자가 나란히 이어져 있는 것입니다. 앞으로 배열은 대괄호 안에 넣겠습니다.
java
코드 하이라이팅 중…
초기화된 배열
scores[0]에는 85, scores[1]에는 90, scores[2]에는 78이 저장됩니다.

방법 1(new int[3])로 생성하면 값을 지정하지 않았으므로 모든 칸이 0으로 채워집니다. 방법 2는 선언과 동시에 원하는 값을 넣습니다.


배열의 요소

요소(Element) 는 배열에 저장된 각각의 값을 말합니다. 배열은 여러 개의 요소를 담는 상자라고 생각하면 됩니다.

java
코드 하이라이팅 중…
용어설명예시
배열요소들을 담는 전체 공간scores
요소배열에 저장된 각각의 값85, 90, 78
인덱스요소의 위치 번호 (0부터 시작)0, 1, 2

배열의 각 요소는 개별 변수처럼 사용할 수 있습니다.

java
코드 하이라이팅 중…

배열 인덱스

배열의 각 요소는 인덱스(Index) 를 통해 접근합니다. 인덱스는 0부터 시작합니다.

java
코드 하이라이팅 중…
인덱스값
scores[0]85
scores[1]90
scores[2]78
인덱스는 0부터 시작합니다
배열 크기가 3이면 유효한 인덱스는 0, 1, 2입니다. scores[3]에 접근하면 ArrayIndexOutOfBoundsException(배열 범위 초과) 오류가 발생합니다.

배열 크기 확인

length 속성

Java 배열은 length 속성4으로 배열의 크기(요소 개수)를 알 수 있습니다.

java
코드 하이라이팅 중…
length는 메서드가 아니라 속성입니다
배열의 크기를 구할 때는 a.length처럼 괄호 없이 사용합니다. 문자열(String)의 길이는 str.length()처럼 괄호가 필요하지만, 배열은 괄호 없이 사용합니다.

for문으로 배열 순회

배열의 모든 요소를 출력하려면 for문을 사용합니다. 이 패턴은 정보처리기사 실기에서 매우 자주 출제됩니다.

java
코드 하이라이팅 중…

단계별 실행 과정

반복i 값조건 (i < 4)a[i]출력
1회0참a[0] = 00
2회1참a[1] = 11
3회2참a[2] = 22
4회3참a[3] = 33
5회4거짓-(종료)

System.out.print는 줄바꿈 없이 출력하므로 결과가 한 줄에 이어서 나옵니다. print와 println의 차이는 반복문 페이지에서 확인하세요.


2차원 배열

Java에서 2차원 배열은 배열의 배열입니다. 각 행의 열 수가 서로 다를 수 있는 가변 배열(Jagged Array) 을 지원합니다.

java
코드 하이라이팅 중…
인덱스 0인덱스 1인덱스 2
arr[0]455075
arr[1]89--
java
코드 하이라이팅 중…
가변 배열이란?
Java의 2차원 배열은 각 행마다 열 수가 다를 수 있습니다. 위 예시에서 arr[0]은 3개, arr[1]은 1개의 요소를 가집니다. 이를 가변 배열(Jagged Array)이라고 합니다.

배열 이름은 주소다

C언어에서 배열 이름은 배열의 첫 번째 요소의 주소입니다. 이 개념은 포인터 배열을 이해하는 데 필수적인 지식입니다.

주소란 메모리에서 데이터가 저장된 위치를 가리키는 번호입니다. 모든 변수는 메모리 어딘가에 저장되고, 그 위치에 주소가 부여됩니다. 포인터를 아직 배우지 않았다면, 이 섹션은 가볍게 읽고 넘어가도 됩니다.

c
코드 하이라이팅 중…

즉, a와 &a[0]은 같습니다.

배열과 포인터 — 배열 a의 시작 주소를 포인터 ptr이 가리키는 모습
배열 이름 a는 첫 번째 요소의 주소(100)입니다. 포인터 ptr에 a를 대입하면 같은 주소를 가리킵니다.
표현의미예시 결과
a배열의 시작 주소 (= &a[0])100
a[0]첫 번째 요소의 값10
&a[0]첫 번째 요소의 주소100
*aa가 가리키는 값 (= a[0])10

*a와 a[0]이 같은 이유

여기서 두 가지 기호를 알아야 합니다.

  • & (주소 연산자): 변수 앞에 붙이면 그 변수의 주소를 가져옵니다. &a[0]은 a[0]이 저장된 주소입니다.
  • * (역참조 연산자): 주소 앞에 붙이면 그 주소에 저장된 값을 가져옵니다. *ptr은 ptr이 가리키는 곳의 값입니다.

int *ptr에서의 *는 "이 변수는 포인터입니다"라는 선언 표시이고, *a에서의 *는 "이 주소의 값을 가져와라"라는 역참조 동작입니다. 같은 기호지만 의미가 다릅니다.

배열 이름 a가 &a[0]과 같으므로:

c
코드 하이라이팅 중…

&a[0]은 a[0]의 주소이고, 주소에 *를 붙이면 그 주소의 값을 가져오므로, *(&a[0])은 a[0]의 값(10)입니다.

포인터에 배열 대입

그래서 포인터에 배열을 대입할 때 &를 붙이지 않습니다.

c
코드 하이라이팅 중…

문자 배열 (문자열)

문자(char)를 저장하는 배열은 문자열이 됩니다. 문자열 끝에는 널 문자('\0') 가 자동으로 추가됩니다. 널 문자는 문자열의 끝을 표시하는 보이지 않는 특수 문자입니다.

c
코드 하이라이팅 중…

"HELLO"는 5글자이지만, C에서는 문자열 끝에 자동으로 '\0'이 붙으므로 실제 배열 크기는 6이 됩니다.

인덱스012345
값'H''E''L''L''O''\0'

자세한 내용은 문자열 페이지를 참고하세요.

배열 선언 방법 비교

Java에서 배열을 선언하는 다양한 방법이 있습니다.

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]
얕은 복사바깥 리스트만 새로 만듦, 안쪽은 공유b = m[:]
리스트 컴프리헨션한 줄로 리스트 생성[x*2 for x in lst]
len()리스트의 요소 개수 반환len(x)
sum()리스트 요소의 합 반환sum(x)

리스트 기초

리스트(List) 는 Python에서 가장 많이 쓰이는 구조로, 여러 값을 넣은 순서 그대로 저장합니다. 대괄호 []를 사용하며, 서로 다른 종류의 데이터를 함께 담을 수 있습니다.

Python의 리스트는 C/Java의 배열 역할을 합니다
Python에는 별도의 배열이 없고, 리스트가 그 역할을 대신합니다. 단, C/Java 배열은 크기가 고정이고 같은 자료형만 저장할 수 있지만, Python 리스트는 크기가 자유롭게 변하고 서로 다른 자료형을 함께 담을 수 있습니다.
python
코드 하이라이팅 중…

인덱스로 접근하기

리스트의 각 요소는 인덱스로 접근합니다. 인덱스는 0부터 시작하고, 음수 인덱스를 사용하면 뒤에서부터 접근합니다.

python
코드 하이라이팅 중…
인덱스01234
양수1020304050
음수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()
python
코드 하이라이팅 중…
append와 extend의 차이
x = [1, 2, 3]일 때, x.append([4, 5])를 하면 리스트 안에 리스트가 들어가 [1, 2, 3, [4, 5]]가 됩니다. x.extend([4, 5])를 하면 요소가 개별적으로 추가되어 [1, 2, 3, 4, 5]가 됩니다. 정보처리기사 실기에서 자주 출제되는 차이점입니다.

2차원 리스트

2차원 리스트는 리스트 안에 리스트가 있는 구조로, 행과 열로 이루어진 표처럼 동작합니다.

python
코드 하이라이팅 중…
열 0열 1열 2
lol[0]123
lol[1]456
lol[2]789

lol[행][열] 형태로 접근합니다.

python
코드 하이라이팅 중…

enumerate 함수

enumerate()는 리스트를 for문으로 순회할 때 인덱스와 값을 동시에 반환하는 내장 함수입니다. 기본 사용법·start 매개변수·enumerate 없이 같은 동작을 구현하는 패턴은 내장 함수 페이지의 enumerate() 섹션에서 자세히 다룹니다.


리스트 슬라이싱

슬라이싱(Slicing) 은 리스트의 일부를 잘라내 새 리스트로 반환하는 기능입니다. x[시작:끝:간격] 형식을 사용합니다. 잘라낸 결과는 원본과 다른 새 객체이므로, x[:]처럼 전체 범위로 슬라이싱하면 얕은 복사가 됩니다.

python
코드 하이라이팅 중…
슬라이싱의미결과
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]

리스트 연결 — +, +=, extend

리스트 두 개를 이어 붙이는 방법은 세 가지입니다. 같은 결과처럼 보이지만 동작 방식이 다릅니다.

python
코드 하이라이팅 중…
방식원본 변경반환값동일 동작
c = a + b변경 안 함새 리스트—
a += b변경함(None)a.extend(b)와 동일
a.extend(b)변경함Nonea += b와 동일

핵심: +는 새 리스트를 만들어 돌려주고, +=·extend는 왼쪽 리스트 자체를 늘립니다. 한쪽 리스트를 공유하는 다른 변수가 있을 때 차이가 크게 벌어집니다.

python
코드 하이라이팅 중…

이 차이가 2차원 리스트에서 어떻게 함정이 되는지는 얕은 복사와 깊은 복사 페이지에서 다이어그램·26년1회 기출과 함께 자세히 다룹니다.

+= 와 extend는 같은 동작입니다
리스트에 대한 a += b는 내부적으로 a.extend(b)와 같습니다. 둘 다 왼쪽 리스트를 제자리에서 늘리고 None을 돌려줍니다. 반면 a = a + b는 새 리스트를 만들어 a에 다시 대입하는 형태로, 원본과 같은 리스트를 공유하는 다른 변수에는 영향을 주지 않습니다.

얕은 복사와 깊은 복사

Python의 리스트 복사는 안쪽 객체 공유 여부에 따라 얕은 복사(b = m[:])와 깊은 복사(b = copy.deepcopy(m))로 나뉩니다. 26년1회 기출(python_2026-1_20)에서 출제된 만큼 자세한 추적과 다이어그램은 별도 페이지에 정리했습니다.

얕은 복사와 깊은 복사 →


리스트 컴프리헨션

리스트 컴프리헨션(List Comprehension) 은 반복문과 조건식을 한 줄로 압축하여 새 리스트를 만드는 문법입니다. 기본 형식·예시·조건 필터링·일반 for문과의 대응 관계, 그리고 딕셔너리·집합·제너레이터 컴프리헨션과의 비교는 컴프리헨션 통합 정리 페이지에서 한 자리에 정리합니다.


len()과 sum() 함수

len()과 sum()은 리스트와 함께 자주 쓰이는 내장 함수입니다. 사용법과 예시는 내장 함수 페이지의 len()·sum() 섹션에서 자세히 다룹니다. 두 함수를 결합한 평균 계산 패턴도 같은 페이지에서 확인할 수 있습니다.


정보처리기사 실기 기출 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.

Footnotes

  1. 자료형은 저장할 데이터의 종류를 컴퓨터에게 알려주는 표시입니다. int는 정수, char는 문자, float는 소수점이 있는 숫자를 의미합니다. ↩

  2. 초기화란 변수나 배열에 처음으로 값을 넣어주는 것을 말합니다. ↩

  3. 컴파일러는 코드를 실행 가능한 프로그램으로 변환해주는 도구입니다. ↩

  4. 속성이란 배열에 딸려 있는 정보로, 괄호 없이 접근합니다. 마치 사람이 '이름'이라는 정보를 갖고 있듯, 배열은 'length'라는 크기 정보를 갖고 있습니다. ↩


메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(11개)
  • 문자열의 기초
  • C언어 2차원 배열
  • C언어 포인터 배열과 2차원 배열
  • C언어 구조체 배열
  • C언어 선택정렬 (Selection Sort)
  • C언어 구조체
  • Java for-each문 (향상된 for문)
  • Java 정렬과 순위 알고리즘
  • Python 컴프리헨션 통합 정리
  • Python 제너레이터 표현식
  • 얕은 복사와 깊은 복사 (Shallow / Deep Copy)
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999