객체 지향 | 절차 지향 | 함수형 프로그래밍

가오리·2022년 11월 18일
0

let me borrow your CS

목록 보기
13/25
post-thumbnail
✔️ 객체 지향 프로그래밍은 절차지향 프로그래밍의 단점을 극복하기 위해, 함수형 프로그래밍은 객체지향 프로그래밍의 단점을 극복하기 위해 등장하였다

✔️ 어느 하나가 우위에 있는 것이 아닌 필요에 따라 합쳐서 사용하기도 하고 원하는 목표에 따라 적절한 것을 골라서 사용해야 한다.


절차 지향 프로그래밍: Procedural Programming

  • 일이 진행되는 순서대로 프로그래밍하는 방법
  • 장점: 코드의 가독성, 컴퓨터 처리 구조와 유사하여 실행 속도가 빠르다
  • 단점: 유지보수 및 분석이 어렵다, 실행 순서가 정해져 있기 때문에 순서가 바뀌면 동일한 결과를 보장하기 어렵다

객체 지향 프로그래밍: Object Oriented Programming

  • 모든 데이터를 객체로 취급하고 객체가 처리 요청을 받으면 객체 내부에 있는 기능을 사용해 처리하는 방법

    객체

    프로그램에서 사용되는 데이터 또는 식별자에 의해 참조되는 공간
    값을 저장할 변수와 작업을 수행할 메소드를 서로 연관된 것끼리 묶어서 만들 것을 말한다.

  • 서로 연관되어 있는 함수와 변수들을 객체로 그룹핑하고 그 객체가 들어잇는 함수들을 호출해서 다른 함수들과 분리/구분한다.

  • 장점: 코드의 재사용 가능(→ 확장 및 유지보수 용이), 분석과 설계의 전환이 쉽다.

  • 단점: 처리 속도가 상대적으로 느리고 설계에 많은 시간이 소요된다.

  • 특징: 추상화, 캡슐화, 상속성, 다형성
    1. 추상화: 공통적인 속성이나 기능을 묶어서 이름을 붙인다.
    2. 캡슐화: 데이터를 은닉하고 데이터 기능을 노출시키지 않는다.
    3. 상속성: 상위 부모 객체의 속성과 특징을 하위 객체가 물려받는다

        객체가 이미 존재하는 객체의 특성을 가진다면 기존 객체의 특성을 상속시켜 만들 수 있다
        
    4. **다형성**: 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 한다.


함수형 프로그래밍: Functional Programming

  • 부수효과가 없는 순수함수1급 객체로 간주하여 파라미터나 반환값으로 사용할 수있으며 참조 투명성을 지킬 수 있다.
  • 장점: 함수의 동작부가 간결해지기 때문에 객체지향 프로그래밍보다 코드 이해도와 가독성이 좋다
  • 단점: 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없다.

부수효과: side Effect

변수의 값이 변경되거나 자료구조를 제 자리에서 수정하거나 객체의 필드값을 설정하거나 예외나 오류가 발생하며 실행이 중단되거나 콘솔 또는 파일 I/O가 발생하는 작업을 의미한다.

순수함수: Pure Function

동일한 입력값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부에 영향을 받지 않는 함수를 말한다.
여러가지 동시다발적인 멀티스레딩 환경에서도 안정적으로 동작할 수 있다.

function funcAdd(a, b){
	return a+b;
} // 인자로 들어온 값만 참조하여 리턴한다
function funcAdd3(a, b){
	return a+b+c;
} // c에 따라 리턴값이 변경된다.

일급 객체

다른 요소들과 아무런 차별이 없는 객체, 함수의 인자로도 넘겨질 수 있고 변수에 대입도 가능한 객체를 말한다.

명확한 정의

  • 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있고 함수의 반환값이 될 수 있다
  • 모든 일급 객체는 할당의 대상이 될 수 있고 비교 연산을 적용할 수 있다.

참조 투명성: Referential Transparency

동일한 인자에 대해 항상 동일한 결과를 반환해야하고 참조 투명성을 통해 기존의 값은 변경되지 않고 유지되어야 한다.



절차지향 vs. 객체지향

  • 절차지향 프로그래밍이 가지고 있는 부족함을 객체지향 프로그래밍이 보완해준다.
  • 절차지향 프로그래밍도 객제지향 프로그래밍도 함수가 존재하지만 객체지향 프로그래밍에는 객체라는 개념이 있다.

함수형 vs. 객체 지향

  • 함수형 프로그래밍에서 함수 자체가 일급 객체가 되지만 객체 지향 프로그래밍에서는 클래스가 일급 객체가 된다.
  • 객체 지향 프로그래밍
    • 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어진다
    • 상태, 멤버 변수, 메서드 등이 긴밀한 관계를 가지고 있고 멤버 변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라진다
  • 함수형 프로그래밍
    • 값의 연산 및 결과 도출 중심으로 코드 작성이 이루어진다
    • 함수는 인자로 받은 값을 별도로 저장하지 않고 간결한 과정으로 처리하고 매핑하는데 주 목적을 둔다
profile
가오리의 코딩일기

0개의 댓글