프로그래밍 패러다임
프로그래밍 패러다임은 프로그래밍의 관점이나 철학을 의미합니다. 즉, 특정 관점과 접근 방식에 따른 개발자의 코딩 방식입니다. 프로그래밍 패러다임은 크게 다음과 같이 구분할 수 있습니다:
- 절차적 프로그래밍
- 객체지향 프로그래밍
- 함수형 프로그래밍
등장 순서는 함수형 -> 객체지향 -> 절차적 입니다.
절차적 프로그래밍
절차적 프로그래밍이란 단순히 순차적인 명령 수행이 아니라 루틴, 서브루틴, 메소드,
함수 등(이를 통틀어 프로시저라고 한다.)을 이용한 프로그래밍 패러다임을 뜻한다.
프로시저란, 특정 행동 또는 목표를 수행하기 위한 일련의 작업이자 순서입니다.
장점
- 함수(프로시저)를 사용하기 때문에 코드의 재사용성을 높일 수 있습니다.
- 프로그램의 흐름이 명확하여 이해하고 작성하기 쉽습니다.
단점
- 프로그램의 코드가 길어지면 코드의 복잡도가 증가하여 유지보수가 어렵습니다.
- 함수 단위의 재사용은 가능하지만, 객체지향의 비해 큰 단위의 재사용은 제한적입니다.
- 프로그램 규모가 커질수록 전체 구조를 파악하기 어렵습니다.
- 확장성이 부족하여 새로운 기능을 추가하기에 어렵습니다.
객체지향 프로그래밍
객체지향 프로그래밍은 데이터를 객체 단위로 묶고, 그 객체들을 상호작용하여 프로그램을 구성하는 방식입니다.
특징
객체지향 설계에는 4가지 특징이 있습니다.
- 캡슐화: 데이터와 데이터를 처리하는 메서드를 하나로 묶고, 클래스 내부에서만 데이터에 접근할 수 있도록 하는 것입니다. 데이터의 유지보수성을 높여줍니다.
- 추상화: 객체의 공통적인 속성과 기능을 추출하여 정의하는것을 의미합니다. 코드를 단순화하고 프로그램의 유연성을 항샹시킵니다.
- 상속: 기존 클래스가 상위에 있는 클래스의 속성을 물려받는 개념입니다. 코드의 재사용성을 늘려줍니다.
- 다형성: 같은 이름의 메서드가 다른 기능을 수행할 수 있게 합니다.메소드 오버로딩과 오버라이딩이 있습니다.
단점
- 객채지향 설계에 대한 러닝커브가 상대적으로 높습니다.
- 초기설계 시간이 길어, 개발 시간이 오래 걸립니다.
함수형 프로그래밍
함수형 프로그래밍은 순수 함수들의 조합으로 작성하는 방법입니다. 상태와 변경을 피하는 프로그래밍 패러다입니다.
특징
- 순수함수: 동일한 입력값을 넣었을 때 항상 동일한 값을 반환해주는 함수입니다. 변경 가능한 상태를 없앰으로써 프로그램의 동작을 예측가능하게 만들어 코드의 안정성과 신뢰를 높여줍니다.
- 고차함수: 함수를 인자로 받거나 함수를 반환하는 함수입니다. 필요에 따라 함수를 변수에 할당하고 호출할 수 있기 때문에 함수를 데이터 다루듯 다룰 수 있고, 코드 재사용성과 추상화 수준을 끌어올려줍니다.
- 재귀: 반복 대신 재귀를 사용하여 문제를 해결합니다. 재귀로 하여금 루프 단계마다 갱신되는 반복 변수를 제거함으로써 코드를 간결하고 가독성 좋게 만들 수 있어요.
단점
- 반복문 대신 재귀를 사용하기에 스택 오버플로우를 일으킬 가능성이 있고, 반복문에 비해 성능이 떨어진다.
- 함수형 프로그래밍의 다양한 개념을 이해하고 배우는데 러닝 커브시간이 깁니다.
- 순수 함수로는 상태 변경을 다루는 것이 복잡할 수 있습니다.
참고
https://iosdevlime.tistory.com/entry/CSBasic-%EC%A2%80-%EB%8D%94-%EB%82%98%EC%9D%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84-%EC%9C%84%ED%95%B4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%ED%8C%A8%EB%9F%AC%EB%8B%A4%EC%9E%84
https://www.inflearn.com/pages/infcon-2023-tech-oopfp
https://dev-jwblog.tistory.com/86
https://velog.io/@majaeh43/%EC%A0%88%EC%B0%A8%EC%A7%80%ED%96%A5-%EA%B0%9D%EC%B2%B4%EC%A7%80%ED%96%A5-%ED%95%A8%EC%88%98%ED%98%95-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D