[CS] 프로그래밍 패러다임과 객체 지향 프로그래밍

yoon Y·2022년 4월 7일
0

프로그래밍 패러다임

코드를 어떻게 작성할 지에 대한 방법론이다.
목표에 따라 적절한 것을 골라서, 혹은 병합해서 사용해야 한다.

  • 명령형 프로그래밍: 어떻게(How) 할 건지를 설명하는 방식
    • 절차지향 프로그래밍: 데이터에 대한 순서를 파악하고 필요한 기능을 함수로 만들어 절차적으로 진행시키는 방법
    • 객체지향 프로그래밍: '데이터와 기능(함수)들을 묶어 하나의 객체’로 만들어 사용하는 방식
  • 선언형 프로그래밍: 무엇(What)을 할 건지를 설명하는 방식
    • 함수형 프로그래밍: 연산의 과정들을 쪼개 순수 함수로 만들어 실행시키는 프로그래밍 패러다임.

객체 지향 프로그래밍

객체란?

  • 사물, 내가 아닌 모든 대상
  • 사물은 자신만의 상태(익은 상태), 속성(빨간색), 동작(먹을 수 있다)을 가지고 있다.
  • 이것을 프로그래밍에 접목하는 것이 객체지향 프로그래밍이다.

객체지향프로그래밍이란?

  • 데이터의 정리 단위를 객체의 의미를 사용해서 정하는 것.
  • 프로그래밍 시에 데이터나 함수를 사용해야할 때 필요한 종류의 객체에서 꺼내 사용하는 것.

객체지향을 사용하는 이유?

  • 프로그램이 복잡하고 거대해지면서 절차형 프로그래밍을 좀 더 체계적이고 효율적으로 사용하도록 보완하기 위해 나온 것.
  • 반대되는 개념이 아니다.

특징

  • 캡슐화
    • 비슷한 역할을 하는 속성과 메소드들을 하나의 클래스로 모은 것
    • 정보 은닉 - 캡슐 내부의 로직이나 변수들을 감추고 외부에는 기능(api)만을 제공하는것
  • 추상화
    • 공통적인 로직만 뽑아내 작성하는 것
    • 인자로 변경점을 받아서 다양하게 사용할 수 있다
  • 상속
    • 상속이란 클래스를 재사용 하는 것
    • 상위 클래스를 하위 클래스에서 상속 받게 되면 상위 클래스의 멤버변수나 메소드를 그대로 물려 받을 수 있다
    • 프로토타입 방식도 있음 - 물려받는 게 아닌 공유하는 방식으로도 상속을 구현할 수 있다.
  • 다형성
    • 같은 모양의 함수가 상황에 따라 다르게 동작 하는것을 의미.
    • 오버로딩: 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의할 수 있음.
    • 오버라이딩: 상위 클래스의 메소드를 하위 클래스에서 똑같은 이름으로 재정의 하는 것을 의미.(덮어씌우기)

객체 생성과 상속

객체는 함수를 통해 만들어 진다. (js관점)

  1. 객체 리터럴
  2. Object( ) 생성자 함수
  3. 사용자 정의 생성자 함수

extends키워드로 다른 생성자 함수의 메소드와 클래스를 물려받거나 공유해 사용할 수 있다.
방법은 크게 Class, Prototype 두 가지가 있다.

인스턴스의 관점에서 내 생성자 말고 확장된 다른 생성자의 값을 어떻게 사용할 것이냐

class (복사)

  • 자신의 상속자와그 상속자에 확장된 모든 생성자값이 복사

prototype (연결)

  • 실제 가지는 건 내 생성자의 값만이고, 확장된 다른 생성자의 값은 그냥 참조로만 접근 가능함

함수형 프로그래밍

연산의 과정들을 쪼개 순수 함수로 만들어 실행시키는 프로그래밍 패러다임.
반환값을 입력으로 이어서 받는 파이프라인의 방식으로 연속 진행시킬 수 있다.
무엇을 실행시킬지 선언만 해주면 되기 때문에 가독성이 좋다.

특징
부수 효과가 없는 순수 함수를 1급 객체로 간주하여 파라미터로 넘기거나 반환값으로 사용할 수 있으며, 참조 투명성을 지킬 수 있다.

  • 순수함수
  • 1급 객체
  • 참조 투명성
  • "for" 또는 "while”대신 재귀함수를 사용함
profile
#프론트엔드

0개의 댓글