내가 개발해볼게!!

[면접을 위한 CS 전공지식 노트] 1.2 프로그래밍 패러다임 본문

CS

[면접을 위한 CS 전공지식 노트] 1.2 프로그래밍 패러다임

보송송희 2023. 6. 23. 22:59
[ 면접을 위한 CS 전공지식 노트 ] 플래너
1일차 2일차 3일차 4일차 5일차
1.1 1.2 1장 예상질문 2.1 2.2
6일차 7일차 8일차 9일차 10일차
1장, 2장 복습 3.1 3.2 3.3 3.4
11일차 12일차 13일차 14일차 15일차
4.3 4.4 4.5 4.6 4.7

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=292815727 

 

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

디자인 패턴, 네트워크, 운영체제, 데이터베이스, 자료 구조 등 면접에 필요한 CS 전공지식을 모두 담고 있다. 200여 개의 그림과 코드로 이론을 자세히 설명하고, 실무 활용법을 함께 다뤄 이론과

www.aladin.co.kr

해당 교재를 공부하며 아카이브합니다!


1.2 프로그래밍 패러다임
1.2.1 선언형과 함수형 프로그래밍
1.2.2 객체지향 프로그래밍
1.2.3 절차형 프로그래밍
1.2.4 패러다임의 혼합

 

1.2 프로그래밍 패러다임

  • 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론
  • 특정 패러다임을 지원하는 언어들이 존재한다
    • jdk 1.8 이전의 자바는 객체지향 프로그래밍을 지원한다
      jdk 1.8 이후로 함수형 프로그래밍을 지원하기 위해 람다식, 생성자 레퍼런스, 메서드 레퍼런스를 도입했고 선언형 프로그래밍을 위해 스트림 등의 표준 API 등이 추가됨
    • 하스켈은 함수형 프로그래밍을 지원한다
    • C++, 파이썬, 자바스크립트는 여러 종류의 패러다임을 지원한다

프로그래밍 패러다임의 분류

 

1.2.1 선언형과 함수형 프로그래밍

선언형 프로그래밍(declarative programming) : '무엇을' 풀어내는가에 집중하는 프로그래밍

함수형 프로그래밍(functional programming)

  • 선언형 프로그래밍의 일종
  • 작은 단위의 순수 함수들을 쌓아 로직을 구현하고, 고차 함수를 통해 재사용성을 높인 프로그래밍 패러다임
    • 고차 함수 : 함수가 함수를 매개변수로 받아 로직을 생성할 수 있는 것
      • 이때 고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 한다
        (자바스크립트의 함수는 일급 객체이기 때문에 함수형 프로그래밍 방식이 선호된다)
      • 일급 객체의 특징
- 변수나 메서드에 함수를 할당할 수 있다
- 함수 안에 함수를 매개변수로 담을 수 있다
- 함수가 함수를 반환할 수 있다

 

1.2.2 객체지향 프로그래밍(OOP, Object-Oriented Programming)

  • 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하고, 객체들의 집합으로 프로그램의 상호 작용을 표현하는 방식
  • 설계가 오래 걸리고, 다른 프로그래밍 패러다임에 비해 상대적으로 느리다
  • 객체지향 프로그래밍의 특징
    • 추상화 : 복잡한 시스템으로부터 핵심적인 개념, 기능을 간추려내는 것
    • 캡슐화 : 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것
    • 상속성 : 상위 클래스의 속성을 하위 클래스가 이어받아서 재사용, 추가, 확장하는 것
    • 다형성 : 하나의 메서드나 클래스가 다양한 방법으로 동작하는 것
      • overloading : 같은 이름을 가진 메서드를 여러 개 두는 것. 메서드의 타입, 매개변수의 유형, 개수를 다르게 둘 수 있다. 컴파일 중 발생하는 정적 다형성
      • overriding : 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의하는 것. 런타임 중 발생하는 동적 다형성
  • 설계 원칙 - 객체지향 프로그래밍을 설계할 때 지켜야 하는 SOLID 원칙
    • 단일 책임 원칙(SRP, Single Responsibility Principle)
      : 모든 클래스는 각각 하나의 책임만 가져야 한다는 원칙
    • 개방-폐쇄 원칙(OCP, Open Closed Principle)
      : 기존 코드는 잘 변경하지 않으면서도(폐쇄) 확장은 쉽게 할 수 있어야 한다(개방)
    • 리스코프 치환 원칙(LSP, Liskov Substitution Principle)
      : 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다
    • 인터페이스 분리 원칙(ISP, Interfact Segregation Principle)
      : 하나의 일반적인 인터페이스보다 구체적인 여러 개의 인터페이스를 만들어야 한다
    • 의존 역전 원칙(DIP, Dependency Inversion Principle)
      : 상위 계층은 하위 계층의 변화에 대한 구현으로부터 독립해야 한다. 
        자신보다 변하기 쉬운 것에 의존하면 안된다

 

1.2.3 절차형 프로그래밍

  • 수행되어야 할 연속적인 계산 과정으로 이루어진 로직
  • 코드의 가독성이 좋고 실행 속도가 빨라 계산이 많은 작업에 쓰인다
  • 예) fortran을 이용한 대기 과학 관련 연산 작업, 머신 러닝의 배치 작업

➖ 모듈화하기 어렵고 유지 보수성이 떨어진다

 

1.2.4 패러다임의 혼합

하나의 패러다임만을 기반으로 서비스를 구축하는 것도 좋지만, 여러 패러다임의 장점만 취해 서비스를 개발하는 것이 좋다

'CS' 카테고리의 다른 글

[면접을 위한 CS 전공지식 노트] 1.1 디자인 패턴  (0) 2023.06.19