모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.

19강 / 전체 25강

Python과 언어의 특성

10분 읽기 조회 0

Python 슬라이싱·바닥 나눗셈·가변 기본값·클래스와 절차적·객체지향·스크립트·선언형 언어 분류, 라이브러리와 프로토타입을 정리합니다.

🎯 이 강의 학습 목표

출제기준 위치는 [3과목 프로그래밍 언어 활용 › 2. 프로그래밍 언어 활용 › 2. 언어특성 활용(절차적·객체지향·스크립트·선언형) · 3. 라이브러리 활용(라이브러리·프로토타입)]입니다. 앞의 C·Java와 다르게 동작하는 Python 문법을 정리한 뒤, 세 언어를 패러다임 기준으로 다시 분류합니다. 이 강을 마치면 다음을 할 수 있습니다.

  • Python 슬라이싱·나눗셈·대입 결과를 손으로 계산하고, 가변 객체와 불변 객체의 차이를 설명한다.
  • 처음 보는 언어 이름도 절차적·객체지향·스크립트·선언형 중 어디에 속하는지 근거를 들어 분류한다.
  • 라이브러리와 프레임워크, C의 함수 원형과 JavaScript의 프로토타입을 구분한다.

💡 Python — C·Java와 다른 지점

Python은 인터프리터가 실행하는 동적 타입 언어입니다. 변수는 타입을 선언하지 않고 객체에 붙인 이름표이며, 블록은 중괄호가 아니라 들여쓰기로 구분합니다. 묶음 자료형은 list([ ], 가변), tuple(( ), 불변), dict(키 중복 불허, 3.7부터 삽입 순서 유지), set(중복 불허)이 핵심입니다. 빈 {}는 빈 dict이고 빈 집합은 set(), 원소 하나인 튜플은 (1,)입니다. str과 tuple은 불변이라 원소 대입이 TypeError입니다.

슬라이싱 s[a:b:k]는 a부터 b 바로 앞까지 k칸씩이고, 음수 인덱스는 뒤에서부터(-1이 마지막), s[::-1]은 뒤집은 사본입니다. 나눗셈은 /가 항상 실수 결과(7 / 2 = 3.5), //는 바닥 나눗셈이라 더 작은 쪽으로 내림합니다(-7 // 2 = -4, C·Java의 -7 / 2는 -3). %의 결과 부호는 나누는 수를 따르고(-7 % 3 = 2), **는 오른쪽부터 계산합니다. 논리 연산은 and·or·not이고 ++·-- 연산자는 없습니다. ==는 값, is는 같은 객체인지를 봅니다.

range(start, stop, step)의 stop은 포함하지 않습니다. 반복문 뒤의 else는 break 없이 끝까지 돌았을 때만 실행됩니다. 인자 전달은 공식 FAQ 표현으로 「대입에 의한 전달」이라, 매개변수는 같은 객체에 붙은 새 이름표입니다. 함수 안에서 리스트에 append하면 밖에서도 보이고, b = a도 복사가 아니라 이름표를 하나 더 붙이는 일입니다. 기본값은 함수를 정의할 때 한 번만 평가되므로 box=[] 같은 가변 기본값은 호출마다 쌓입니다.

클래스에서는 인스턴스 메서드의 첫 매개변수 self를 반드시 명시하고, 객체 생성에 new를 쓰지 않으며, 부모 메서드는 super()로 부릅니다. 클래스 본문의 변수는 모든 객체가 공유하는 클래스 변수, self.이름은 객체마다 따로인 인스턴스 변수입니다. 접근 제어자는 없고 밑줄은 관례입니다. 아래는 Python 3.12 실행 결과입니다.

s = "PROGRAM"
print(s[1:4], s[-3:], s[::-1], s[::2])
print(7 / 2, 7 // 2, -7 // 2, -7 % 3, 2 ** 3 ** 2)

a = [1, 2, 3]
b = a          # 같은 리스트에 이름표 하나 더
c = a[:]       # 복사본
b.append(4)
print(a, c, a is b)

def add(item, box=[]):     # 기본값은 정의할 때 한 번만 만들어진다
    box.append(item)
    return box

print(add("x"))
print(add("y"))

for n in range(1, 10, 4):
    if n > 9:
        break
else:
    print("break 없이 끝남", n)

class Counter:
    total = 0                  # 클래스 변수
    def __init__(self, name):
        self.name = name       # 인스턴스 변수
        Counter.total += 1

c1, c2 = Counter("a"), Counter("b")
print(Counter.total, c1.name, round(2.5), round(3.5))
ROG RAM MARGORP PORM
3.5 3 -4 2 512
[1, 2, 3, 4] [1, 2, 3] True
['x']
['x', 'y']
break 없이 끝남 9
2 a 2 4

두 번째 add 호출이 ['y']가 아니라 ['x', 'y']인 것이 가변 기본값 함정입니다. range(1, 10, 4)는 1·5·9이고 break가 없어 else가 실행됐습니다. 마지막 줄의 round(2.5)가 2인 것은 공식 문서대로 정확히 중간인 값을 짝수 쪽으로 반올림하기 때문입니다.

💡 언어의 특성·라이브러리·프로토타입

언어를 나누는 기준은 「프로그램을 어떤 단위로 생각하는가」입니다. 절차적·객체지향은 어떻게(how)를 단계별로 지시하는 명령형이고, 선언형은 무엇을(what) 원하는지만 쓰고 실행 절차는 처리 시스템에 맡깁니다.

구분핵심대표 언어
절차적명령 순서와 함수 호출, 데이터와 함수가 분리FORTRAN, COBOL, ALGOL, Pascal, C
객체지향데이터와 메서드를 객체로 묶음, 캡슐화·상속·다형성Smalltalk, C++, Java, C#
스크립트컴파일 단계 없이 인터프리터가 바로 실행JavaScript(클라이언트), PHP·Python·Ruby·Perl(서버), Bash
선언형원하는 결과만 기술함수형 LISP·Haskell, 논리형 Prolog, SQL

현대 언어는 여러 패러다임을 함께 지원하므로 시험에서는 대표 특성으로 분류합니다. 실행 방식으로는 소스 전체를 미리 기계어로 번역해 빠르게 실행하는 컴파일(C), 실행 시점에 한 문장씩 해석해 수정 즉시 실행해 볼 수 있는 인터프리터, 바이트코드로 컴파일한 뒤 JVM이 실행하는 Java의 중간 형태가 있습니다.

라이브러리는 자주 쓰는 기능을 재사용하도록 모은 코드 묶음으로, 개발자가 필요할 때 호출합니다. 반대로 프레임워크는 전체 흐름을 쥐고 개발자의 코드를 호출합니다(제어의 역전). C는 #include로 헤더(stdio.h 입출력, stdlib.h 메모리·변환, string.h 문자열, math.h 수학)를, Java는 import로 패키지(java.lang은 자동 import, java.util은 컬렉션)를, Python은 import로 모듈을 불러오고 외부 패키지는 pip로 설치합니다.

「프로토타입」은 두 뜻으로 나옵니다. C의 함수 원형(int square(int n);)은 반환형·이름·매개변수 타입만 미리 선언해 컴파일러가 호출을 검사하게 하는 것이고, 표준 헤더가 바로 라이브러리 함수 원형의 모음입니다. JavaScript의 프로토타입 기반 객체지향은 클래스 없이 객체가 다른 객체를 원형으로 삼아, 속성을 찾을 때 객체 자신 → 프로토타입 → 그 프로토타입 순으로 체인을 따라 올라갑니다.

⚠️ 시험에 나오는 함정

혼동 쌍구분 기준
/ vs //항상 실수 vs 바닥 나눗셈(-7 // 2 = -4)
b = a vs b = a[:]같은 객체에 이름 추가 vs 새 리스트로 복사
{} vs set()빈 dict vs 빈 set
함수형 vs 논리형LISP·Haskell(함수 조합) vs Prolog(사실·규칙·추론)
라이브러리 vs 프레임워크개발자가 호출 vs 프레임워크가 개발자 코드를 호출
C 함수 원형 vs JS 프로토타입호출 검사용 선언 vs 속성을 물려주는 원형 객체

📝 핵심 요약 — 암기표

  • Python: 동적 타입·들여쓰기, 슬라이스 끝 미포함, 불변 = int·float·str·tuple / 가변 = list·dict·set
  • //는 바닥 나눗셈, %의 부호는 나누는 수, **는 오른쪽부터, for-else는 break 없을 때 실행
  • 인자는 대입에 의한 전달, 가변 기본값은 한 번만 생성, self 명시·new 없음·super()
  • 절차적 C·COBOL·FORTRAN / 객체지향 Smalltalk·C++·Java·C# / 스크립트 JavaScript·PHP·Python / 선언형 LISP·Haskell·Prolog·SQL
  • Java는 바이트코드 → JVM, java.lang 자동 import, Python round()는 동률일 때 짝수 쪽

이 주제의 자세한 이론과 실전문제 8문항은 필기+실기 과정 혜택 교재 「정보처리기사 필기 완전정복 50강」의 35·36강에서 다룹니다.

다음 20강 「운영체제와 네트워크 기초」에서는 프로세스 상태와 CPU 스케줄링, 메모리 관리와 페이지 교체, OSI 계층과 IP 서브넷 계산을 다룹니다.

📋 확인 문제

  1. s = "ENGINEER"일 때 print(s[2:5], s[-3:], s[::3])의 출력은?

    ① GIN EER EIE
    ② GINE EER EIE
    ③ GIN NEER EIE
    ④ NGI EER EIE

  2. print(7 // -2, -7 % 3, 2 ** 3 ** 2)의 출력은?

    ① -3 -1 64
    ② -3 2 512
    ③ -4 2 512
    ④ -4 -1 64

  3. 다음 Python 코드의 출력은?

    def f(x, acc=[]):
        acc.append(x)
        return len(acc)
    
    a = [1, 2]
    b = a
    b += [3]
    print(f(1), f(2), len(a))

    ① 1 1 2
    ② 1 2 3
    ③ 1 1 3
    ④ 2 2 3

  4. 사실과 규칙을 주고 질의에 대한 답을 추론하게 하는 논리형(선언형) 언어는?

    ① Prolog
    ② Smalltalk
    ③ COBOL
    ④ C#

  5. 라이브러리와 프로토타입에 대한 설명으로 옳은 것은?

    ① 라이브러리는 전체 흐름을 쥐고 개발자의 코드를 호출하는 구조다.
    ② Java의 java.util 패키지는 import 없이 자동으로 사용할 수 있다.
    ③ Python의 round(2.5)는 3이다.
    ④ C의 함수 원형은 반환형·이름·매개변수 타입을 미리 선언해 컴파일러가 호출을 검사하게 한다.

✅ 정답과 해설

  1. 정답 ① — 인덱스 2~4는 G·I·N이라 「GIN」, 마지막 세 글자는 「EER」, 0·3·6번은 E·I·E입니다. ②는 끝 인덱스 5를 포함한 오답, ③은 s[-4:]로 네 글자를 자른 값, ④는 s[1:4]를 구한 오답입니다(python3 실행으로 확인).

  2. 정답 ③ — 7 // -2는 -3.5를 더 작은 쪽으로 내려 -4, -7 % 3은 나누는 수의 부호를 따라 2, 2 ** 3 ** 2는 오른쪽부터 3² = 9를 먼저 계산해 512입니다. ①·②의 -3은 C·Java처럼 0 쪽으로 버린 값, 64는 왼쪽부터 계산한 값입니다.

  3. 정답 ② — 가변 기본값 acc는 한 번만 만들어져 f(1)은 1, f(2)는 2를 돌려줍니다. b는 a와 같은 리스트이고 리스트의 +=는 그 자리에서 확장하므로 a의 길이도 3입니다. ①·③은 기본값이 매번 새로 생긴다고 본 오답입니다.

  4. 정답 ① — Prolog가 대표 논리형 언어입니다. Smalltalk·C#은 객체지향, COBOL은 절차적 언어입니다.

  5. 정답 ④ — 함수 원형은 호출 검사를 위한 선언입니다. ① 흐름을 쥐고 개발자 코드를 호출하는 것은 프레임워크입니다. ② 자동 import되는 것은 java.lang이고 java.util은 import가 필요합니다. ③ round(2.5)는 짝수 쪽으로 반올림해 2입니다.

📚 참고 자료

관련 주제

  • 정보처리기사
  • 필기
  • 3과목
  • Python
  • 프로그래밍 패러다임
  • 스크립트 언어
  • 라이브러리
  • 프로토타입
  • 자격증
  • 자격증 강의
  • 정보처리기사 필기 25강 — 2027 출제기준 핵심 요약
  • 무료강의
  • 무료 온라인 강의
  • NUGUNA
  • 누구나

📚 시리즈 전체 공유

정보처리기사 필기 25강 — 2027 출제기준 핵심 요약

이 강의가 속한 시리즈는 총 25강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.

댓글

0/1000

불러오는 중...