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

Chaejung·2022년 10월 17일
1

기술면접대비_CS

목록 보기
7/8
post-thumbnail

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

위 도서를 읽고 정리하여 기술 면접에 대비하는 글입니다.

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

새롭게 알게된 점

객체지향 프로그래밍 SOLID 원칙

  1. SRP
    Single Responsibility_단일 책임 원칙
    모든 클래스는 각각 하나의 책임만 가져야하는 원칙
    ex. A로직이 있을 때 어떤 클래스는 A에 관한 클래스이자 수정 시 A와 관련된 수정이어야 함
  2. OCP
    Open Closed_개방-폐쇄 원칙
    유지 보수 사항이 생긴다면 코드를 쉽게 확장할 수 있도록 하고 수정할 때는 닫혀 있어야 하는 원칙
    기존의 코드는 변경이 적으면서 확장은 쉽게 가능하도록 설계하는 것
  3. LSP
    Liskov Substitution_리스코프 치원 원칙
    객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 하는 원칙
    클래스 간 상속 관계에서 계층 간 교환했을 때 문제가 없어야 한다.
  4. ISP
    InterFace Segregation_인터페이스 분리 원칙
    하나의 일반적인 인터페이스보다 구체적인 여러 개의 인터페이스를 만들어야 하는 원칙
  5. DIP
    Dependency Inversion_의존 역전 원칙
    상위 계층은 하위 계층의 변화에 대한 구현으로부터 독립해야하는 원칙

예상 문제

1. 객체지향 언어에 대해 설명 해 보세요.

답변

일종의 프로그램 설계 개념이자 방법론의 일종입니다.

프로그램을 상태와 행위로 이루어진 객체라는 기본단위로 나누고, 객체들의 집합으로 프로그램의 상호작용을 표현하며 설계하고 개발하는 방식입니다.

객체지향 언어의 특징에는 4가지가 있습니다.

샹위 클래스의 특성을 하위 클래스가 이어받아 재사용, 추가, 확장하는 상속성.

복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 추상화.

객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 캡슐화.

하나의 메서드나 클래스가 다양한 방법으로 동작하는 다형성이 있습니다.

  • 출처: 2019년 상반기 건강보험심사평가원 기출

2. 객체지향 언어의 장단점에 대해 설명해 보세요.

답변

장점은 객체지향의 특징 중 하나인 추상화 및 상속성에 따라 재사용이 용이합니다. 이에 때라 생산성도 향상됩니다. 캡슐화라는 특징 덕에 유지보수에 용이합니다.

단점은 설계에 많은 시간이 소요되며, 프로그램 용량이 크고, 처리 속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느립니다.

  • 출처: 2019년 상반기 건강보험심사평가원 기출

여기서부터는 팀원이 출제하고 내가 답하거나 / 부족하게 답한 것들을 정리합니다.

1. 함수형 프로그래밍에 대해 설명해주세요.

답변

함수형 프로그래밍은 선언형 패러다임의 일종으로, 필요한 로직에 따라 함수로 나눈 뒤 해당 함수들을 블록처럼 쌓아 구현한 것입니다.

더불어 구현하면서 고차 함수를 통해 재사용성을 높일 수 있습니다.

1-1. 그렇다면 순수 함수와 고차 함수는 무엇인가요?

답변

순수함수는 출력이 입력에만 의존하는 것을 의미합니다.
매개변수로 받은 인자들 외 전역 변수가 출력에 영향을 주거나 side effect가 있어서는 안됩니다.

고차함수는 함수가 함수를 변수처럼 받을 수 있는 것을 말하고, 고차 함수를 쓰기 위해서는 사용하는 언어가 일급 객체라는 특징을 가져야 합니다.
자바스크립트는 일급 객체가 있기 때문에 콜백함수, 클로저를 구현할 수 있습니다.

1-2. 그렇다면 일급 객체는 무엇인가요?

답변

일급 객체란 변수나 메서드에 함수를 할당할 수 있고, 함수 안에 함수를 매개변수로 담을 수 있고, 함수가 함수를 반환할 수 있는 특징을 가진 객체를 의미합니다.

  • 변수나 데이터 구조안에 담을 수 있다.
  • 파라미터로 전달 할 수 있다.
  • 반환값(return value)으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 동적으로 프로퍼티 할당이 가능하다.

더보기: [JavaScript] 고차 함수와 콜백(Callback) – 일급 객체란?

느낀 점

결국 모든 것은 OOP다... 라는 말을 왕왕 들었었는데,
이걸 React에는 어떻게 적용시킬 것인가를 생각하면 도통 감을 못 잡겠다.
의존성 주입이나 관심사 분리 등을 개발할 때 유념하면 도움이 될까 싶었다.

그리고 스터디 때 함수형 프로그래밍이 질문으로 나올 줄은 상상도 못했다!
객체지향 프로그래밍이 중요해서 그것만 다들 문제로 낼 줄 알았는데...
아무래도 JavaScript는 함수형 프로그래밍 방식이 선호된다고 하니 적당한 예시를 숙지하는 것이 좋을 것 같다.

profile
프론트엔드 기술 학습 및 공유를 활발하게 하기 위해 노력합니다.

0개의 댓글