구조적 프로그래밍(Structure Programming)

본 글은 로버트 C.마틴 저자(송준이 엮음)의 [클린 아키텍처: 소프트웨어 구조와 설계의 원칙] 도서를 읽고 작성하였습니다.


1. 정의

  • 프로그램을 피라미드와 같은 구조로 만들고 Top-Down 형태로 제어하도록 함
  • 구조를 이루는 각각의 단위는 순차, 제어(if/then/else 등), 반복(do/while/until 등)의 세 구조로 이루어진 패러다임

2. 비구조적 프로그래밍

  • 하나의 함수나, 코드 몸체에 연속된 코드를 작성하는 프로그래밍 패러다임
    • 구조(함수, 서브루틴 등)를 따로 두지 않고, 하나의 큰 코드 안에 전체 프로그램 코드가 들어있는 형태로 작성
    • 초기 프로그래밍 언어(초기 고급언어나, 어셈블리어)들에서 이러한 비구조적인 문법을 찾아볼 수 있음
  • 비구조적 프로그래밍의 대표적인 흐름 제어로 GOTO 문이 있음
    • 로직이 꼬이게 되고, 이는 곧 흐름을 방해하기 때문에 오히려 더 복잡해질 수 있음
  • 유지보수가 어렵고, 흐름이 복잡해져 코드의 파악이 어려우며, 코드 재사용성을 떨어트림

3. 구조적 설계 방법

  • 순차 구조 : 직전형 구조. 제어 흐름이 위에서 아래로, 왼쪽에서 오른쪽으로 순차적으로 실행되는 구조
  • 제어 구조 : 분기형 구조. 주어진 조건이 만족 여부에 따라 처리 대상과 순서를 달리할 때 사용되는 구조
  • 반복 구조 : 반복형 구조. 주어진 조건이 만족될 때까지 일정 부분을 반복적으로 처리하는 구조

4. 장점

  • 흐름 제어(GOTO 문)를 사용하지 않으므로 코드 가독성 향상
  • 기능을 함수 등으로 모듈화함으로써 유지 보수 용이
  • 코드 의미 파악이 쉬우며, 코드의 재사용성 향상

Reference

  • 로버트 C.마틴, 2019, 클린 아키텍처: 소프트웨어 구조와 설계의 원칙
  • https://4rang.tistory.com/316
  • https://velog.io/@bami/%EB%B9%84%EA%B5%AC%EC%A1%B0%EC%A0%81-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EA%B3%BC-%EA%B5%AC%EC%A1%B0%EC%A0%81-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D