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 |