프로그래밍 패러다임

98oys·2022년 8월 1일
0

language

목록 보기
8/9
post-custom-banner

프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론입니다.

프로그래밍 패러다임은 크게 2가지로 나뉩니다.
1. 선언형
2. 명령형

선언형은 함수형이라는 하위 집합을 갖습니다. 또한 명령형은 객체지향, 절차지향으로 나뉩니다.

명령형 프로그래밍은 무엇을 어떻게 할 것인가에 가깝고, 선언형 프로그래밍은 무엇을 할 것인가와 가깝다.

🍤 선언형 프로그래밍

'무엇을' 풀어내는가에 집중하는 패러다임이며, "프로그램은 함수로 이루어진 것이다."라는 명제가 담겨 있는 패러다임입니다. 함수형 프로그래밍은 선언형 패러다임의 일종입니다.

어떤 방법으로해야 하는지를 나타내기보단 무엇과 같은지에 대해 설명하는 경우를 선언형 프로그램이이라고 합니다.

  • 필요한 것을 달성하는 과정 하나하나를 기술하는 것이 아니라, 필요한 것을 기술하는데 방점을 두고 애플리케이션의 구조를 세워 나가는 프로그래밍 구조
  • 목표를 명시하지만 알고리즘은 명시하지 않음
  • 선언형 프로그래밍 언어 : SQL, XML, Haskell ...

🍗장점 : 가독성, 재사용성이 좋고, 오류가 적습니다. 프로그램 동작을 변경하지 않고도 관련 값을 대체 할 수 있습니다.

자바스크립트는 단순하고 유연한 언어이며, 함수가 일급 객체이기 때문에 객체지향 프로그래밍보다는 함수형 프로그래밍 방식이 선호됩니다.

순수함수, 고차함수, 일급객체 :
https://velog.io/@oyunseong/Kotlin-Lambda-Expression-%EC%BD%94%ED%8B%80%EB%A6%B0-%EB%9E%8C%EB%8B%A4-%ED%91%9C%ED%98%84%EC%8B%9D

🍚 명령형 프로그래밍

선언형 프로그래밍과 반대되는 개념으로, 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 프로그래밍 패러다임의 일종이다.

  • 코드로 원하는 결과를 달성해 나가는 과정에만 중점을 두는 프로그래밍
  • 어떻게(How) 행동 할지를 프로그래밍, 알고리즘을 명시하지만 목표는 명시하지 않음
  • 명령형 프로그래밍 언어 : C, C++, Java ...

객체지향 프로그래밍

OOP (Object-Oriented Programming)은, 애플리케이션을 객체들의 집합으로 본다.
여기서 객체란, 실제 세계에 존재하는 개념을 코드로 나타낸 것이다.
설계에 많은 시간이 소요되며, 처리 속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느리다.

객체지향 프로그래밍의 특징

  • 추상화 (abstraction)

  • 캡슐화 (encapsulation)

  • 상속성 (inheritance)

  • 다형성 (polymorphism)

※ 추상화 : 특정 개념을 구체화 시키지 않고 모호화 하는 것

구현체를 쉽게 교체할 수 있다는 장점이 있습니다.

예제 코드

  public interface Animal {
      public void move();   //  동물은 움직인다 
  }
  public class human implements Animal {

      private String name;

      @Override
      public void move() {
          // 사람이 걷는 방법
      }
  }
  public class Dog implements Animal {

      private String name;

      @Override
      public void move() {
          // 4족 보행 
      }
  }

동물의 특징에 대해서 표현할 예정인데 어떤 동물을 정하지 못하였다면, 먼저 동물들이 갖는 공통적인 특성을 인터페이스에 선언을 해두고, 사람, 개, 고양이 등등 구체적인 대상을 정했다면 인터페이스를 extend 또는 implements를 하여 구현합니다.

캡슐화란

객체의 속성과 메소드를 하나의 클래스로 묶고, 필요한 부분 외에는 외부에 노출하지 않는 것을 의미합니다.

상속성이란

상위 (부모) 클래스의 특성을 하위 (자식) 클래스가 이어받아서 재사용하는 것입니다.

다형성이란

같은 이름을 가진 메소드가 여러 개 존재할 수 있는 것을 의합니다.

크게 오버로딩, 오버라이딩이 있습니다.

Overloading, 오버로딩

매개변수에 따라 같은 이름을 가진 함수가 구분되는 것

  public class Calculator {

      public int calc (int num) {
          return num*num;
      }

      public int calc (int num1, int num2) {
          return num1 * num2;
      }
  }

  // calc(3) = 9
  // calc(3, 4) = 12

Overriding, 오버라이딩

자식 클래스가 부모 클래스의 메소드를 재정의하는 것

  public class Animal {

      private String name;

      public void move() {
          printf(name + "?");
      }
  }
  public class Cat extends Animal {

      @Override
      public void move() {
          printf(name + " 살금살금");
      }
  }

오버라이딩은 런타임 중에 발생합니다.


객체지향 설계 원칙 SOLID

객체지향 프로그래밍을 설계할 때 지켜야 하는 5가지 원칙

S: 단일 책임 원칙 (SRP; Single Responsibility Principle) :
모든 클래스는 반드시 단 하나의 책임만을 가져야 한다.

O: 개방 폐쇄 원칙 (OCP; Open-Closed Principle) :
모든 클래스는, 확장에는 열려 있고 수정에는 닫혀 있어야 한다.
즉, 기존의 코드는 건드리지 않으며 신규 기능을 확장할 수 있어야 합니다.

L: 리스코프 치환 원칙 (LSP; Liskov Substitution Principle) :
프로그램의 객체는, 프로그램의 정확성을 깨뜨리지 않으며 하위 타임의 인스턴스로 바꿀 수 있어야 한다.
즉, 부모 객체 대신 자식 객체를 넣어도 기능이 동작해야 한다는 의미입니다.

I: 인터페이스 분리 원칙 (ISP; Interface Segregation Principle) :
하나의 일반적인 (general) 인터페이스보다, 여러 개의 구체적인 (specific) 인터페이스를 만들어야 한다.

D: 의존 역전 원칙 (DIP; Dependency Inversion Principle) :
"추상화에 의존해야지, 구체화에 의존하면 안 된다"

절차형 프로그래밍

수행되어야 할 로직을 따라 코드가 작성되는 패러다임

수행해야 하는 일을 순차적으로 코드를 작성하기 때문에 실행 속도가 빠릅니다.

따라서 계산이 많은 작업 등에 유리합니다. ( python을 이용한 머신러닝 )

가장 큰 단점은 유지 보수성이 떨어지고 모듈화가 어렵습니다.

profile
Android Developer, Department of Information and Communication Engineering, Inha University
post-custom-banner

0개의 댓글