ssung_항해일지/CS 지식 및 기술면접

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

ssungcohol 2023. 5. 17. 15:01

절차지향 프로그래밍 (Procedural Programming)

 - 일이 진행되는 순서대로 프로그래밍하는 방법

  • 장점
    • 코드의 가독성이 좋음
    • 컴퓨터의 처리구조와 비슷해 실행 속도가 빠름
  • 단점
    • 각각의 코드가 순서에 민감하게 연결 되어있어, 유지보수 및 분석이 어려움

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

 - 모든 데이터를 객체 (Object)로 취급

 - 객체가 처리 요청을 받았을 때, 객체 내부에 있는 기능을 사용해 처리

 - 서로 연관되어 있는 함수와 변수들을 객체라는 것을 그룹핑

 - 객체에 들어있는 함수들을 호출해서 다른 함수들과 분리/구분해줌

  • 특징
    • 추상화 : 공통적인 속성이나 기능을 하나로 묶어 이름을 정의함
    • 캡슐화 : 데이터를 은닉하고 데이터 기능을 노출시키지 않음 (보안 강화)
    • 상속성 : 상위 부모 객체의 속성과 특징을 하위 객체가 물려 받는 것
      (만약 어떤 객체가 이미 존재하는 객체의 특성을 가지고 있다면, 기존 객체의 특성을 상속시켜 만들 수 있음)
    • 다형성 : 같은 함수가 있어도 매개변수에 따라 각자 다른 일을 하는 것
      • 오버로딩 : 하나의 클래스 내에서 같은 이름의 메서드를 여러 개 가질 수 있지만 메서드의 인자는 다름
      • 오버라이딩 : 상속 관계에 있는 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 같은 시그니쳐를 갖는 메서드로 다시 정의하는 것
  • 장점
    • 코드의 재사용이 가능 (확장과 유지보수에 용이)
    • 분석과 설계의 전환이 쉬움
    • 캡슐화로 정보를 은닉할 수 있어 보안성이 높음
  • 단점
    • 처리 속도가 상대적으로 느림
    • 설계에 많은 시간이 소요

함수형 프로그래밍

 - "순수 함수"를 사용해 상태를 제어하기보단, 빠르게 처리하는데 초점을 둔 방법

 - 실행 순서를 지정할 필요가 없기 때문에 '비절차형 언어' 라고도 함

  • 순수 함수란?
    • 동일한 입력 값을 넣었을 때 항상 동일한 리턴값을 반환하며 외부의 영향을 받지 않음
    • 함수의 실행이 프로그램에 영향을 주지 않음
    • 비상태 불변성 유지 (전달된 데이터를 변경하는 것이 아니라 새로운 버전, 새로운 오브젝트를 만들어 결과값으로 전달해야 함)
      => 여러가지 동시다발적인 멀티쓰레딩 환경에서도 안정적으로 동작 가능
  • 장점
    • 함수의 동작부가 간결해져 객체지향 프로그래밍에 비해 코드 이해도와 가독성이 좋아짐
    • 테스트가 쉬움
  • 단점
    • 외부 데이터 혹은 내부 데이터의 상태를 조작할 수 없음

절차형 프로그래밍과 객체지향 프로그래밍의 차이

  • 절차형 프로그래밍 위에서 객체지향형 프로래밍이 탄생한 것
  • 절차형 프로그래밍이 갖고 있는 부족함을 객체지향형 프로그래밍이 보완해줌
  • 절차형 프로그래밍과 객체지향형 프로그래밍 모두 함수가 있지만, '객체'라는 개념에서 차이가 있음

함수형 프로그래밍과 객체지향 프로그래밍의 차이

  • 함수형 프로그래밍에서는 함수(function) 자체가 일급 객체가 되지만, 객체지향 프로그래밍에서는 클래스 (또는 객체)가 일급 객체가 된다
    • 일급 객체?
      • 다른 요소들과 차별이 없는 객체
      • 즉, 함수의 인자로 넘겨질 수 있고, 변수에 대입도 가능한 객체를 말함
    • 일급 객체의 명확한 정의
      • 모든 일급 객체는 함수의 실질적인 매개변수가 될 수 있음
      • 모든 일급 객체는 함수의 반환값이 될 수 있음
      • 모든 일급 각체는 할당의 대상이 될 수 있음
      • 모든 일급 객체는 비교 연산(==, equal)을 적용할 수 있음
  • 객체지향 프로그래밍에서는 프로그램을 상호작용하는 객체들의 집합으로 볼 수 있지만, 함수형 프로그래밍에서는 상태 값을 지니지 않는 함수들의 연속으로 볼 수 있음
    • 객체지향 프로그래밍
      • 클래스 디자인과 객체들의 관계를 중심으로 코드 작성이 이루어짐
      • 즉, 상태, 멤버변수, 메서드 등이 긴밀한 관계를 가짐
      • 특히, 멤버변수가 어떤 상태를 가지고 있는가에 따라 결과가 달라짐
    • 함수형 프로그래밍
      • 값의 연산 및 결과 도출 중심의 코드작성
      • 함수는 인자로 받은 값을 별도로 저장하지 않고, 간결한 과정으로 처리하고 매핑하는데 목적을 둠
      • 어느 하나가 우위에 있다고 말할 수 있다기보다는 필요에 따라 합쳐서 사용하기도 하고, 원하는 목표에 따라 적절한 것을 잘 골라 사용해야 함
728x90

'ssung_항해일지 > CS 지식 및 기술면접' 카테고리의 다른 글

RDB & NoSQL  (0) 2023.05.18
오버로딩과 오버라이딩  (0) 2023.05.18
Stack & Queue / Array & LinkedList  (0) 2023.05.16
Web Server 와 WAS  (0) 2023.05.16
TCP와 UDP  (0) 2023.05.15