ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 절차적 사고 vs. 객체지향적 사고: 개발자의 인지적 차이
    프로그래밍 2025. 2. 8. 10:12

    1. 절차적 사고: 순차적 문제 해결과 명확한 실행 흐름

    절차적 사고(Procedural Thinking)는 순차적 실행과 명령의 흐름을 중시하는 사고방식으로, 주어진 문제를 단계별로 해결하는 방식이다. 이는 전통적인 명령형 프로그래밍(Imperative Programming)과 밀접한 관련이 있으며, 대표적인 절차적 언어로는 C, Pascal, Fortran 등이 있다.

    이 사고방식에서는 **"무엇을 할 것인가?"**보다 **"어떻게 실행할 것인가?"**에 집중하며, 프로그램은 일련의 단계(순서)를 따라 진행된다. 예를 들어, 은행 계좌에서 돈을 인출하는 기능을 구현한다고 가정하자. 절차적 사고 방식에서는 이를 다음과 같은 단계로 분해할 수 있다.

    1. 사용자 입력을 받아 계좌 정보를 확인한다.
    2. 계좌 잔액을 조회한다.
    3. 출금 가능한지 확인한 후 금액을 차감한다.
    4. 업데이트된 계좌 정보를 저장한다.
    5. 사용자에게 결과를 반환한다.

    위 과정처럼, 절차적 프로그래밍에서는 각 단계가 명확한 실행 흐름을 가지고 있으며, 순서대로 수행되는 것이 핵심이다. 이 때문에 절차적 사고를 가진 개발자는 문제를 작은 단위의 절차로 나누고, 실행 흐름을 논리적으로 정리하는 능력을 갖추게 된다.

    하지만 절차적 사고에는 한계가 있다. 프로그램의 규모가 커질수록 코드가 복잡해지고 유지보수가 어려워질 수 있으며, 코드의 재사용성이 낮아지는 경향이 있다. 이러한 문제를 해결하기 위해 등장한 것이 **객체지향적 사고(Object-Oriented Thinking)**다.

     

     

    절차적 사고 vs. 객체지향적 사고: 개발자의 인지적 차이


    2. 객체지향적 사고: 문제를 객체로 추상화하여 모델링하기

    객체지향적 사고(Object-Oriented Thinking)는 절차적 사고와는 다른 접근 방식을 취한다. 절차적 사고가 **"어떤 절차로 해결할 것인가?"**에 집중한다면, 객체지향적 사고는 **"문제를 어떻게 객체로 추상화할 것인가?"**에 집중한다.

    객체지향 프로그래밍(OOP, Object-Oriented Programming)의 핵심 개념은 **객체(Object)**다. 객체는 데이터(속성)와 이를 조작하는 동작(메서드)을 하나로 묶은 개체로 볼 수 있다. 예를 들어, "은행 계좌"를 하나의 객체로 정의할 수 있으며, 이 객체는 다음과 같은 속성과 메서드를 가질 수 있다.

    속성:

    • 계좌번호
    • 잔액

    메서드:

    • 입금(deposit)
    • 출금(withdraw)
    • 잔액 조회(getBalance)

    이러한 객체지향적 접근 방식은 현실 세계의 개념을 프로그램 내에서 보다 직관적으로 모델링할 수 있도록 돕는다. 예를 들어, BankAccount라는 클래스를 만들면, 특정 사용자의 계좌를 account1 = BankAccount("123-456", 50000)과 같이 인스턴스화할 수 있다.

    객체지향적 사고를 가진 개발자는 문제를 절차의 흐름이 아니라 "객체 간의 상호작용"으로 바라보는 경향이 있다. 이는 특히 재사용성, 유지보수성, 확장성을 높이는 데 큰 장점을 제공한다.

    그러나 객체지향적 사고에도 단점이 있다. 객체 간의 관계를 잘못 설계하면 클래스 간의 의존성이 복잡해지고, 코드가 예상보다 비효율적으로 작동할 수도 있다. 또한, 절차적 사고에 익숙한 개발자는 객체지향적 사고 방식으로 전환하는 데 시간이 필요할 수 있다.


    3. 절차적 사고와 객체지향적 사고의 인지적 차이

    절차적 사고와 객체지향적 사고는 단순한 프로그래밍 스타일의 차이가 아니라, 개발자의 인지적 프레임워크(cognitive framework)에 영향을 미친다. 각각의 사고방식을 비교하면 다음과 같은 차이를 발견할 수 있다.

    비교 항목 절차적 사고 객체지향적 사고

    문제 해결 방식 순차적 단계로 문제 해결 개념을 객체로 추상화하여 해결
    핵심 개념 명령, 제어 흐름, 변수 조작 객체, 클래스, 상속, 다형성
    코드 구조 함수 중심의 코드 구성 데이터와 동작이 결합된 구조
    재사용성 함수 재사용 가능하지만 제한적 객체와 클래스를 활용한 높은 재사용성
    유지보수성 규모가 커질수록 코드 복잡도 증가 모듈화가 잘 되어 유지보수가 용이
    개발자의 사고방식 논리적 흐름을 세밀하게 설계 시스템을 추상적 개념으로 모델링

    절차적 사고는 논리적 흐름을 선형적(Linear)으로 구성하는 것에 강점을 가진다. 반면, 객체지향적 사고는 문제를 추상화하고, 객체 간의 관계를 정의하는 것에 능숙하다.

    개발자가 절차적 사고에 익숙하다면, 프로그램의 실행 흐름을 세밀하게 조작하는 능력이 뛰어나지만, 복잡한 시스템을 설계할 때는 유지보수가 어려울 수 있다. 반면, 객체지향적 사고를 익힌 개발자는 더 유연한 코드 구조를 설계할 수 있으며, 확장성과 유지보수성을 고려한 개발을 수행할 수 있다.


    4. 절차적 사고와 객체지향적 사고의 조화: 상황에 맞는 사고방식 선택

    절차적 사고와 객체지향적 사고는 반드시 대립되는 개념이 아니다. 실제 소프트웨어 개발에서는 이 두 가지 사고방식을 적절히 조화하여 활용하는 것이 중요하다.

    예를 들어, 간단한 프로그램을 만들 때는 절차적 프로그래밍 방식이 효율적일 수 있다. 그러나 규모가 크고 복잡한 소프트웨어에서는 객체지향적인 접근이 훨씬 유리하다.

    • 간단한 스크립트 작성: 데이터 가공, 자동화 작업 등에서는 절차적 프로그래밍이 효과적이다.
    • 대규모 애플리케이션 개발: 웹 애플리케이션, 게임 개발 등에서는 객체지향 프로그래밍이 유지보수성과 확장성을 높여준다.

    개발자가 유연한 사고방식을 가지려면, 절차적 사고를 기반으로 객체지향적 사고를 병행하여 활용하는 능력이 필요하다. 객체지향적 사고를 익히기 위해서는 클래스 설계 원칙(SOLID), 디자인 패턴, 객체 간의 관계 설정에 대한 이해가 필수적이다.

    결론적으로, 프로그래밍 패러다임은 개발자의 사고방식에 큰 영향을 미치며, 특정 사고방식에만 고착되지 않고 다양한 접근 방식을 익히는 것이 중요하다. 절차적 사고와 객체지향적 사고를 모두 이해하고 활용하는 개발자는 더욱 유연한 문제 해결 능력과 구조적인 코드 설계 능력을 갖춘 개발자로 성장할 수 있다.

Designed by Tistory.