CS/면접을 위한 CS 전공지식 노트

[CH1.2] 프로그래밍 패러다임

hahahabbb 2024. 12. 6. 14:23

0. 프로그래밍 패러다임

  • 함수형 프로그래밍 지원 - 하스켈
  • 여러 패러다임 지원 - C++, Python, JavaScript, Java(jdk 1.8 이후)

 

1. 선언형과 함수형 프로그래밍

  • 선언형 프로그래밍 : '무엇을' 해야하는지를 기술하고 '어떻게' 하는지는 숨기는 패러다임
  • 함수형 프로그래밍 : '순수 함수'들을 블록처럼 쌓아 로직을 구현, '고차 함수'로 재사용성을 높인 패러다임 => JavaScript
  • 순수 함수 : 출력이 입력(매개변수)에만 의존
  • 고차 함수 : 함수가 함수를 매개변수로 받음

 

2. 객체지향 프로그래밍

  • 객체지향 프로그래밍 : 데이터를 객체로 취급하여 객체 내부에 선언된 메서드 사용하는 방식, 처리 속도 느림
  • 특징
  • 추상화 : 복잡한 시스템으로부터 핵심적 개념 또는 기능을 단순화한 것
  • 캡슐화 : 객체의 일부를 외부에 감춤
  • 상속성 : 상위 클래스 특성을 하위 클래스가 재사용, 추가, 확장하는 것
  • 다형성 : 하나의 메서드나 클래스가 다양한 방식으로 동작하는 것 (ex. 오버로딩, 오버라이딩)
  • 설계 원칙(SOLID)
  •  S  단일 책임 원칙 : 모든 클래스는 각각 하나의 책임만 가져아 한다
  •  O  개방-폐쇄 원칙 : 유지 보수 사항이 생긴다면 코드를 쉽게 확장 가능해야 하고, 수정할 때는 닫혀 있어야 한다.
  •  L  리스코프 치환 원칙 : 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  •  I  인터페이스 분리 원칙 : 하나의 일반적인 인터페이스보다 구체적인 여러 개의 인터페이스를 만들어야 한다.
  •  D  의존 역전 원칙 : 상위 계층은 하위 계층의 변화에 대한 구현으로부터 독립적이어야 한다.

 

3. 절차형 프로그래밍

  • 절차형 프로그래밍 : 로직이 수행되어야 할 연속적인 계산 과정, 처리 속도 빠름 => 포트란, 머신러닝
  • 단점 : 모듈화 어려움. 유지 보수성 떨어짐

 

마무리하며..

상황에 따라 패러다임을 통일하는 것이 좋을 수 있고, 때에 따라 다양한 패러다임의 장점만 취해 조합하는 것이 좋을 수도 있다고 한다. 예로 머신 러닝 파이프라인과 거래 관련 로직이 있을 경우, 머신 러닝 파이프라인은 절차지향형 패러다임, 거래 관련 로직은 함수형 프로그래밍을 적용하는 게 좋다고 한다. 결국 패러다임을 효율적으로 쓰려면 각 패러다임의 장단점을 제대로 알고, 실무에서는 어떤 기능에 어떤 패러다임을 주로 쓰는지를 많이 조사해봐야함을 느꼈다.

'CS > 면접을 위한 CS 전공지식 노트' 카테고리의 다른 글

[CH2.4] IP 주소  (0) 2024.12.13
[CH2.3] 네트워크 기기  (0) 2024.12.12
[CH2.2] TCP/IP 4계층 모델  (0) 2024.12.11
[CH2.1] 네트워크의 기초  (1) 2024.12.11
[CH1.1] 디자인패턴  (0) 2024.12.04