프로그래밍 패러다임 알아야 하는 이유

이도현·2023년 8월 27일
0

호기심 천국

목록 보기
5/13
post-custom-banner

0. 개요

Kotlin에 매개변수로 람다가 사용되는 것이 궁금했고, 람다란 이름이 없는 함수로서, 매개변수로 전달되고, 결과 값으로 반환될 수 있다. 이 것은 함수형 프로그래밍에서 중요한 역할을 한다고 하며 함수형 프로그램이란 프로그래밍에 한 종류이다. 그렇다면 여기서 프로그래밍 패러다임이란 무엇인가, 프로그래밍 패러다임의 종류는 무엇이 있는가, 각각의 특징은 무엇인가에 대해 알아볼 필요성이 있다.

1. 프로그래밍 패러다임이란?

  • 프로그래밍이나 소프트웨어 개발에 접근하는 특정한 방식, 철학, 또는 관점을 의미.
  • 다시말해, 프로그래머가 문제를 해겨하는데 사용하는 기법 방법론, 혹은 스타일
  • 각 패러다임 특성, 장점, 단점을 가지고 있으며, 모든 문제에 적합한 것은 아님.

2. 프로그래밍 패러다임 알아야 하는 이유

1) 적절한 도구 선택: 문제 해결에 대한 접근 방식을 정의. 예를 들어, 병렬 처리나 동시성 문제는 함수형 프로그래밍으로 처리하기 적합
2) 유연성 및 적응성: 새로운 문제나 요구사항에 대응할 수 있는 유연성과 적응성을 갖게 됩니다.
3) 효과적인 소통: 서로 다른 백그라운드나 경험을 가진 사람들이 효과적으로 의사 소통하려면, 기본적인 프로그래밍 패러다임에 대한 공통된 이해가 필요
4) 코드의 품질 향상: 특정 패러다임은 코드의 재사용성, 유지보수성, 가독성 등을 향상. 예를 들어, 객체지향 프로그래밍은 코드의 모듈화와 재사용성을 증가시키는 반면, 함수형 프로그래밍은 코드의 예측 가능성과 안정성을 향상 시킬수 있다.
5) 기술 트렌드 이해: 현대적인 프로그래밍 방식을 습득해야한다. 프로그래밍의 세계는 끊임 없이 변화하고 발전
6) 문제 해결 능력: 다양한 패러다임을 알고 이해함으로써, 문제 해결에 대한 다양한 관점과 방식을 학습. 문제를 다양한 관점으로 보고 더 나은 해결책을 찾을 수 있게 됨

3. 프로그래밍 패러다임의 종류

1) 절차형 프로그래밍(Procedural Programming)

  • 패러다임은 프로그램을 일련의 절차나 단계로 나누어 작성. 데이터와 프로세스(함수)가 명확하게 분리됨, 대표적 언어: C

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

  • 데이터와 그 데이터를 조작하는 함수를 하나의 '객체'로 묶어서 다룸. 이 패러다임은 캡슐화, 상속, 다형성, 추상화와 같은 특성, 대표적 언어: Java, C++, Python
  • 클래스: 클래스(붕어빵 틀), 객체 인스턴스(붕어빵) 생성
  • 상속: 클래스 간의 상속을 지원하여, 코드의 재사용성 증가
  • 다형성: 한 인터페이스나 부모 클래스를 여러 자식 클래스가 구현하거나 상속받아 다양한 방식으로 작동
  • 캡슐화: 데이터와 기능을 하나로 묶어 외부의 접근을 제한하거나 허용

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

  • 프로그램을 순수 함수 집합으로 보고, 상태 변경과 변이(Mutation)을 최소화 하여 부작용을 줄임. 대표적 언어: Haskell, Listp, Scala, Erlang 등
  • 일급 함수(First-class functions): 함수를 다른 함수의 매개변수로 전달, 함수로부터 반환하거나, 변수에 저장
  • 람다 표현식(Labmda expressions): 익명 함수를 생성하고 사용
  • 불변성(Immutability): 불변 변수 선언. ex) kotlin의 val
  • 확장 함수(Extension functions): 기존 클래스를 수정하지 않고 새로운 함수를 추가
  • 고차 함수(Higher-order functions): 함수를 매개변수로 받거나 반환하는 함수를 정의
  • 컬렉션 연산: 데이터 컬렉션(리스트, 세트, 맵 등)에 대해 수행되는 연산 또는 조작을 의미. 데이터의 변환, 필터링, 그룹화, 정렬, 탐색 등 다양한 작업을 포함

4) 논리형 프로그래밍(Logic Programming)

  • 문제를 논리와 명제로 표현하고, 시스템이 그 해답을 추론. 대표적 언어: Prolog

5) 반응형 프로그래밍(Reactive Programming)

  • 데이터의 변화에 따라 시스템이 자동으로 반응하도록 프래그래밍하는 방식. 주로 비동기 프로그래밍 환경에서 사용

4. 프로그래밍 패러다임별 사용되는 분야

1) 절차

  • 활용 분야: 시스템 프로그래밍, 응용 프로그램, 기본적인 데이터 처리 작업
  • 특징: 순차적인 명령, 상태와 데이터 변환에 중점
  • 예: C 언어를 사용한 시스템 프로그래밍

2) 객체지향

  • 활용 분야: 사용자 인터페이스, 게임, 시뮬레이션, 웹 애플리케이션, 복잡한 비즈니스 로직
  • 특징: 객체와 클래스를 기반으로 데이터와 동작을 캡슐화, 상속, 다형성, 캡슐화의 원칙을 따름
  • 예: Java나 C++를 사용한 엔터프라이즈 소프트웨어 개발

3) 함수형

  • 활용분야: 병렬 처리, 분산 시스템, 데이터 변환 및 분석, 리액티브 시스템 등
  • 특징: 상태와 불변성에 중점. 고차 함수, 순수 함수, 람다 표현식 등을 활용
  • 예: Haskell이나 Scala를 사용한 복잡한 데이터 처리

4) 논리형

  • 활용 분야: 인공 지능, 데이터베이스 쿼리, 기호 연산, 제약 조건 풀기 등
  • 특징: 문제에 대한 해결책을 논리와 제약 조건을 통해 정의, 시스템이 해당 해결책을 찾음
  • 예: Prolog를 사용한 인공 지능 개발

5) 반응형

  • 활용 분야: 리얼타입 웹 애플리케이션, 비동기시스템, 사용자 인터페이스, 스트리밍 데이터 처리 등
  • 특징: 데이터 흐름과 변화의 전파에 중점을 둡니다. 이벤트 기반의 아키텍처를 사용
  • 예: RxJava나 React.js를 사용한 웹 애플리케이션 개발

5. 방법 목적에 따른 패러다임 재분류(How/What)

1) 명령형 프로그래밍(Imperactive Programming)

  • 절차형, 객체지향적, 병렬 프로세싱 프로그래밍
  • HOW: 공통된 목표 주의사항 -> 세부과정 관리 -> 생산
    2) 선언형 프로그래밍(Declearactive Programming)
  • 함수형, 논리형, 데이터베이스, 반응형 프로그래밍
  • WHAT: 목표 -> 생산지시 -> 생산

6. 다중 패러다임,Kotlin

  • 초기 다중 패러다임의 의미는 객체지향 패러다임 외의 함수형 프로그래밍을 지원한다는 뜻
  • 이점: 유연성,생산성, 방대한 APi

1) 도메인 특화 언어

  • 코틀린을 선언적 스타일로 토딩할 수 있다
    2) 동시성 프로그래밍
  • 코루틴을 도입하면서 코틀린도 동시성 프로그래밍을 지원
  • 자바 등에서도 지원하지만 코틀린은 새로운 프로그래밍 접근 방법을 가능하게 해주는 풍부한 프로그래밍 패턴을 제공

Reference

profile
좋은 지식 나누어요
post-custom-banner

0개의 댓글