프로그래밍 패러다임 – 객체지향 프로그래밍, 함수형 프로그래밍, 절차지향형 프로그래밍

a man who is in front of computer

프로그래밍 패러다임

프로그래밍 패러다임(programming-paradigm)이란 프로그래밍을 할 때의 전반적인 기준이 되는 관점, 방식을 의미합니다. 개발자로 일을 하다보면 하나의 프로그램을 만들기 위해 수십, 수백개의 파일을 효율적으로 동작하게끔 만들어야 하는데요. 이 때 어떤 스타일을 지양하거나, 어떤 표현은 지향하는 등의 코드의 전체적인 방향을 결정해주는 것이 있다면 좋겠죠. 이러한 프로그래밍 전략이 되어 주는 것이 바로 프로그래밍 패러다임입니다.

프로그래밍 패러다임은 프로그래밍 언어와 짝꿍을 이뤄 설명되는 것이 일반적인데요. 프로그래밍 언어는 각자 지원하는 프로그래밍 패러다임을 기준으로 필요한 기능들이 개발되어 왔습니다. Java는 대표적인 객체지향 프로그래밍 언어라고 할 수 있습니다. 조금 추상적인 내용이라 대표적인 프로그래밍 패러다임을 알아보면서 이해해보면 좋겠네요.

절차적 프로그래밍

절차적 프로그래밍(Procedural Programming)은 프로시저(procedure) 호출을 기반으로 작업을 진행하는 프로그래밍 방식입니다. 여기서 절차란 특정 목표를 수행하기 위한 작업이자 순서의 개념입니다. 프로그래머는 여러 기능들을 프로시저(메서드, 함수 등의 형태)로 만들고, 프로시저를 호출하면서 전체 프로그램이 동작하도록 코드를 작성합니다.

프로그램의 흐름을 추적하기가 쉬우므로 코드의 가독성이 높은 장점이 있습니다. 하지만 순차적인 단계에 따라 실행되는 구조이기 때문에 오류를 잡거나 순서를 바꿔야할 경우 등의 코드 보수 작업에는 어려움이 따르는 경우가 있습니다.

객체 지향 프로그래밍

점차 복잡한 소프트웨어의 개발이 필요하게 되면서, 프로그램은 단순한 순서도에 의해서만 진행되지 않는 경우가 많아졌습니다. 이런 상황에서 좀 더 프로그램을 유연하게 하고, 변경을 쉽게 하기 위해 객체 지향 프로그래밍이 인기를 끌게 되었어요.

객체 지향 프로그래밍(Object-Oriented Programming, OOP) 속성과 기능을 가진 객체(object)들을 만들고 이를 활용해 프로그램을 동작하게 하는 프로그래밍 방식입니다. 객체들이 서로 상호작용하면서 원하는 방식대로 동작할 수 있도록 프로그래밍하는 것이죠.

객체 지향 프로그래밍은 캡슐화, 다형성, 추상화, 상속 등의 특징이 있습니다.

추상화

공통의 속성이나 기능을 클래스로 묶어 정의하는 것을 추상화라고 합니다. 이 때에 불필요한 세부사항은 제거한 후 가장 본질적이고 공통적인 부분만 추출하여 표현하는 것에 중점을 두어야 합니다.

캡슐화

클래스 안에 속성과 기능을 하나의 캡슐로 만들어 밖에서 접근이 불가능(은닉)하도록 만드는 것을 캡슐화라고 표현합니다.

다형성

어떤 객체의 속성과 기능이 필요에 따라 여러가지 형태가 될 수 있는 성질을 의미합니다. 상속을 통해 기능을 확장하는 것도 다형성 구현의 한 예시이며, 메서드 오버라이딩, 오버로딩을 통해서도 구현될 수 있습니다.

상속

기존의 클래스에 새로운 기능을 추가해서 새로운 클래스를 작성하기도 하는데 이를 상속이라고 합니다.

객체 지향 프로그래밍은 반복적인 코드를 최소화하고 간결하게 만들어서 코드 유지,보수 할 때에 유연하게 할 수 있는 것이 특징입니다. 하지만 전체적인 코드를 설계하고 작성하는 데 많은 시간이 소요되기도 합니다. 객체 지향 프로그래밍을 지원하는 언어는 Java, Python 등이 있습니다.

함수형 프로그래밍

함수형 프로그래밍은 주어진 문제를 작은 문제로 나눈 뒤, 작은 문제를 해결할 수 있는 순수 함수들을 작성하고 이를 조합해서 소프트웨어를 만드는 방식을 의미합니다. 순수 함수란 외부에 영향을 받지 않아 동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하는 함수를 의미합니다.

대부분의 함수가 굉장히 간결하기 때문에 코드 이해도와 가독성이 높고 테스트가 쉬운 장점이 있습니다. 하지만 변수의 상태를 변경하지 않는 것을 원칙으로 하기 때문에 새로운 객체를 할당하는 등의 방식을 사용합니다. 때문에 메모리 사용량이 증가하거나 Garbage Collection 비용이 높아질 수 있습니다. 함수형 프로그래밍을 지원하는 대표적인 언어로는 C++, Python, JavaScript 등이 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *