Programming Paradigm

참새·2023년 4월 4일
0

객체지향 프로그래밍(Object-Oriented Programming, OOP)

  • 프로그램을 객체(Object)들의 모임으로 바라보고 객체들 간의 상호작용을 통해 프로그램을 설계하고 구현하는 방식.
  • 객체를 기반으로 프로그램을 구성하며, 객체들 간의 상호작용을 통해 프로그램을 구현하며 객체는 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism)이라는 세 가지 개념을 바탕으로 구현.
  • 코드의 재사용성, 유지보수성, 확장성 등의 장점을 가지고 있어서 현재까지 많은 소프트웨어 개발에서 이용되고 있음.

절차지향 프로그래밍(Procedural Programming)

  • 프로그램을 순차적인 절차나 함수의 모음으로 바라보고, 이러한 절차나 함수들을 이용하여 프로그램을 구현하는 방식.
  • 프로그램을 처리해야 할 데이터와 처리할 절차를 분리하여 생각하고 이러한 분리된 절차들은 서브루틴, 함수, 메서드 등의 형태로 구현되며, 프로그램의 주요 기능은 이러한 절차들을 순차적으로 호출하는 것으로 이루어짐.
  • 프로그램의 구현에 필요한 데이터와 함수들이 전역변수나 전역함수로 선언하여 변수나 함수의 이름 충돌이 발생하거나 코드의 유지보수가 어렵게 만드는 등의 문제점이 있음.
  • 큰 프로그램을 작은 단위로 쪼개서 작성하는 방식으로 이루어지기 때문에, 프로그램의 규모가 커지면 코드의 복잡도 상승과 유지보수성이 저하됨.
  • 간단하고 직관적인 구조를 가지고 있어서 이해하기 쉽고 빠른 개발이 가능하고 하드웨어와의 상호작용이 많은 프로그램을 작성할 때는 유리한 경우도 있지만 코드의 재사용성이나 유지보수성은 떨어지며, 규모가 큰 프로젝트에는 적합하지 않음.

함수형 프로그래밍(Functional Programming)

  • 수학적 함수의 개념을 프로그래밍에 도입하여 함수를 이용한 계산으로 문제를 해결하는 방식.
  • 상태를 변경하는 대신에 함수를 이용하여 값을 계산하며, 이러한 함수는 입력값만으로 출력값을 계산하므로 부작용이 없음. 이에 따라, 함수형 프로그래밍에서는 같은 입력값에 대해서는 항상 같은 결과가 나오도록 보장되어야 하며, 이러한 특성을 '참조 투명성(referential transparency)'이라고 함.
  • 함수를 일급 객체로 취급하여 함수를 변수에 할당하거나 함수를 인자로 전달하거나 함수를 반환하는 등의 작업이 가능. 이러한 특성을 이용하여 코드를 간결하게 작성할 수 있으며, 코드의 재사용성과 유지보수성이 높아짐.
  • 함수형 프로그래밍에서는 불변성(Immutability)을 강조. 즉 변수의 값이 한번 설정되면 변경되지 않도록 하여 코드의 안정성을 높이고 병렬처리를 보다 쉽게 할 수 있도록 함.
  • 루프 대신 재귀를 이용하여 반복문을 구현하여 코드의 가독성을 높이고, 스택 오버플로우 등의 예외상황에 대한 대처가 용이.

결론

  • 객체지향 프로그래밍은 절차지향 프로그래밍보다 코드의 재사용성과 유지보수성이 높지만, 설계가 복잡해질 수 있음.
  • 절차지향 프로그래밍은 객체지향 프로그래밍과 달리 데이터와 함수가 분리되어 있으며, 다형성이나 상속 등의 개념을 지원하지 않음.
  • 함수형 프로그래밍은 부작용이 없는 순수 함수를 이용하므로 코드의 안정성이 높지만, 성능 문제가 발생할 수 있음.
profile
응애 나 아기 개발자

0개의 댓글