Skip to content

구조적 프로그래밍

프로그래밍 패러다임은 제품 생산 공정처럼 순차, 선택, 반복, 구조로 표현될 수 있다.

명령형 프로그래밍 패러다임의 하위 개념

  • 제어 흐름만으로 구성하는 프로그래밍 패러다임
    • 순차(sequence)구조
    • 선택(selection)구조
    • 반복(iteration)구조
  • 제어 흐름을 블록 단위로 계층화하고 지역화
  • 프로그램 실행 흐름이 간결하고 작은 규모로 조직화가 용기
  • 프로그램 예측 가능성과 검증 가능성을 보장

실행의 흐름을 주어지는 명령의 위치적 흐름에 따라 수행하는 구조

설계 → 생산 → 조립

  • 명령 라인 위에서 아래로 흐르는 가장 직관적인 구조
  • 다버깅 용이

설계, 결함 논리적 실수 또는 문법 오류로 프로그램이 의도한 대로 결과를 생성하지 못하는 상황

  • 구문 오류 (syntax error) 문법 체계에 적합하지 않는 명령문 입력 시 발생 프로그램이 실행되기 전, 인터프리터/컴파일러가 탐지
  • 실행 오류 (runtime error) 실행되지만 실행 중에 잘못된 상황 발생으로 프로그램이 중단되는 오류
  • 의미 오류 (semantic error) 프로그래머의 의도와 다른 잘못된 결과를 생성 논리적/의미적으로 잘못 해석되는 명령문 작성 시 발생

한 데이터를 다른 데이터 타입으로 변환
데이터 타입 변환 내장 함수

  • 문자열 : str()
  • 정수 : int()
  • 소수 : float()

여러 개의 데이터 단일 함수로 출력 가능

  • 파라미터로 데이터를 콤마(,)로 구분하여 입력
  • 데이터 사이에 공백(default)이 자동으로 추가
  • sep 옵션을 변경하여 공백 변경 가능

print(“상자에”, “사과가”, number, “개”, “들어있습니다.”) → 상자에 사과가 5 개 들어있습니다.
print(“상자에”, “사과가”, number, “개”, “들어있습니다.”, sep="") → 상자에사과가5개들어있습니다.

원뿔의 부피&겉넓이 계산 프로그램

Section titled “원뿔의 부피&겉넓이 계산 프로그램”
rad = int(input('반지름을 입력하세요 :'))
hei = int(input('높이를 입력하세요 :'))
sla = pow(rad ** 2 + hei ** 2, 0.5)
#부피 & 겉넓이 출력
vol = 1 / 3 * 3.14 * rad ** 2 * hei
suf = 3.14 * rad ** 2 + 3.14 * rad * sla
print("원뿔의 부피는 : ", str(vol) + "입니다.", sep='|')
print("원뿔의 겉넓이는 : ", str(suf) + "입니다." )

특정 영역 내의 명령문에 대한 실행 여부를 프로그램 실행 과정 중 조건의 참, 거짓에 따라 결정하는 구조

  • 동일한 입력에 대해 항상 같은 행동을 하는 게 아닌 상황에 따라 다르게 행동하게 만드는 지능의 시작
  • 오류 처리, 예외 상황 대응 등 프로그램의 안정성을 책임
if rad >= 0 and hai >= 0
# 모선 계산
sla = pow(rad ** 2 + hei ** 2, 0.5)
#부피 & 겉넓이 출력
vol = 1 / 3 * 3.14 * rad ** 2 * hei
suf = 3.14 * rad ** 2 + 3.14 * rad * sla
print("원뿔의 부피는", str(vol) + "입니다.")
print("원뿔의 겉넓이는", str(suf) + "입니다.")
  • 비교 연산자를 사용하여 결과가 불리언(Boolean) 타입으로 생성되는 표현식
  • 비교 연산자의 종류
연산자수학적 표현의미
<<작다.
<=작거나 같다.
>>크다.
>=크거나 같다.
===같다.
!=같지 않다.

표현식에 사용된 여러 연산자의 연산 순서를 결정

① 괄호 내부의 수식 ② 거듭제곱(**) 연산자 ③ 곱셈, 실수 나눗셈, 정수 나눗셈, 모듈로 연산자 (왼쪽에서 오른쪽 순서로 적용) ④ 덧셈, 뺄셈 연산자 - (왼쪽에서 오른쪽 순서로 적용) ⑤ 비교 연산자(<, <=, >, >=, ==, !=) ⑥ 할당 연산자

논리값인 참(Frue)과 거짓(False)의 값만 표현할 수 있는 데이터 타입

참, 거짓을 구별할 수 있는 명제를 대상으로 명제의 집합을 위해 고안한 연산자

  • 명제 : 참과 거짓 중 하나의 진리값만을 갖는 서술문
  • 불리언식에 작용하여 또 하나의 불리언 값을 산출하는 연산체계

두 개의 논리값을 연산하여 참 또는 거짓을 결과로 생성하는 연산자

  • and(논리곱), or(논리합), not(논리부정), 연산자 가용
  • 왼쪽에서 오른쪽의 방향으로 결합

두 논리값이 모두 True 일 때 True이고 어느 하나가 False일 경우 False를 반환

두 논리값이 모두 False일 때 False이고 어느 하나가 True일 경우 True 반환

단항 연산자로 논리값을 반전하여 False는 True로 True는 False로 반환

불리언식의 논리 연산 결과가 이미 결정되면, 전체 연산 결과를 도출하기 전 나머지 피연산자를 평가하지 않는 기법
대상 연산자: and, or

  • A and B : A가 False이면, B의 평가를 생략
  • A or B : A가 True면 B의 평가를 생략

이분 선택 구조의 구문 형식과 제어의 흐름

Section titled “이분 선택 구조의 구문 형식과 제어의 흐름”

if 불리언식 : 명령문 집합1 else : 명령문 집합2

특정 영역의 명령문을 여러 번 재실행하는 구조

  • 동일한 코드를 반복적으로 작성하지 않고도 지정된 작업을 여러 번 수행 가능
  • 반복 횟수를 조건에 따라 결정
  • loop, iterate, repeat 용어를 혼용
  • 조건 제어 반복의 구문 형식
    while 반복-계속-조건:
    명령문 집합
  • 계수 제어 반복의 구문 형식
    for 계수-제어-변수 in 시퀀스:
    명령문 집합
# 메시지 저장
msg = "저는 파이썬을 잘 합니다."
# 5회 반복 출력
count = 0
while count < 5:
print(msg)
count += 1

변수의 현재 값에 특정 값을 증가 또는 차감한 후 그 결과를 동일한 변수에 재할당하는 연산

  • 카운팅, 값의 누적, 문자열 연결 등의 목적으로 사용

읽기: 메모리에서 count의 현재 값 읽기
계산: 현재 값에 + 1 연산
저장: 결과를 같은 이름 count에 덮어쓰기

변수의 값을 변경하고 결과를 다시 그 변수에 할당하는 과정을 간결하게 처리하는 연산자
일반 이항 연산자(+, // 등)와 할당 연산자의 결합

연산자예시의미
+=a += ba = a + b
-=a -= ba = a - b
_=a _= ba = a * b
/=a /= ba = a / b
%=a %= ba = a % b
**=a **= ba = a ** b
//=a //= ba = a // b
  • 단계 1: 반복되어야 하는 명령 블록을 작성
  • 단계 2: 반복되어야 하는 명령문을 다음과 같이 반복 구조로 작성 while True:
    명령 블록
  • 단계 3: 반복-계속-조건을 작성하고 반복 구조를 제어하기 위해 반복 제어 명령문을 추가 while 반복-계속-조건:
    명령 블록
    반복 제어 명령문
# 단계 1
sum += i
# 단계 2
while True:
sum += i
# 단계 3
sum = 0
i = 1
last = int(input("합산할 숫자를 입력하세요: "))
while i <= last:
sum += i
i += 1
print("1부터", str(last)+"까지의 합은", str(sum)+"입니다.")

여러 개의 데이터(값)를 순서대로 묶어서 저장하는 자료구조

  • 원소(element)의 나열을 저장할 수 있는 시퀀스 타입 · 시퀀스: 리스트, 튜플 등
  • 데이터가 저장된 순서가 명확하게 유지
  • 단일 식별자로 연속된 저장 공간 접근 수단 제공 · 각 데이터는 0부터 시작하는 고유한 ‘순번’(인덱스)이 지정
  • 개별 원소의 값을 수정, 추가, 삭제 가능
  • 중복된 값 뿐만 아니라 숫자, 문자열, 다른 리스트 등 서로 다른 데이터 타입의 데이터 저장 가능

직접 참조하는 일반 변수와 달리, 리스트는 값들의 주소가 담긴 목록을 참조하는 간접 참조 방식
구문 형식 : 인용부호 [와]를 사용하여 표현, 각 원소는 콤마(,) 로 구분

시퀀스 타입의 원소에 접근하는 연산자

  • 접근 연산자 [ , ] 사용
  • 원소에 부여된 인덱스 번호로 지칭
  • 인덱스 번호는 0부터 시작 [0] [1] [2] [4]
  • 계수-제어 변수와 시퀀스 사용
  • 반복 시 계수-제어-변수에 원소를 순차적으로 할당
# 구문 형식
for 계수-제어-변수 in 시퀀스:
명령문 집합
# 리스트 생성
hei_list = [1, 4, 14, 26, 31]
# 리스트 원소 출력
for hei in hei_list:
print(hei)