6주차 질문리스트(디자인패턴 & 프로그래밍 패러다임과 네트워크-1)
6주차 질문리스트(디자인패턴 & 프로그래밍 패러다임과 네트워크-1)
- 구성원 : 이성호(@seonghoo1217), 김보민(@bm4656), 박수빈(@Siby1lA), 신태우(@frommF12), 임시은(@sineTlsl), 최낙주(@Gawq), 김지현(@debussySuh)
이성호
디자인패턴 1. 싱글톤 패턴이 멀티스레드 환경에서 가지는 문제점과 해결방안을 서술하시오.
⇒ 멀티스레드에서 싱글톤 패턴이 가지는 문제점으로는 두개 이상의 스레드에서 하나의 객체에 한해서 인스턴스를 얻기 위해 getInstance() 메서드에 접근할 경우 두개 이상의 인스턴스가 생성될 수 있습니다.
이를 해결하기 위해선 총 4가지 방법이 존재합니다.
1.인스턴스를 미리 생성하는 방법이지만 불필요한 리소스 낭비가 발생합니다. 2.`getInstance()` 메서드를 동기화 하는 방법이지만 일반적으로 성능이 100배 정도 저하됩니다. 3.DCL(Double Check Locking) 기법을 사용하는 방법으로, 현재는 권고되지 않습니다. 4.LazyHolder 기법을 사용하는 것으로 동기화도 필요없으며, 자바 버전도 영향을 받지않는 방법입니다. Singleton 클래스의 getInstance() 메서드에서 `LazyHolder.INSTANCE`를 참조하는 순간 Class가 로딩되며 초기화가 진행됩니다. Class를 로딩하고 초기화하는 시점은 thread-safe를 보장하기 때문에 volatile이나 synchronized 같은 키워드가 없어도 됩니다.
java
class Singleton {
private Singleton() {}
public static Singleton getInstance() {
return LazyHolder.INSTANCE;
}
private static class LazyHolder {
private static final Singleton INSTANCE = new Singleton();
}
}
2. 옵저버패턴을 이용할 경우 solid 원칙 중 어느 것을 준수할 수 있나요?
⇒ 개방 폐쇄 원칙과 단일책임 원칙을 가장 준수할 수 있습니다. 옵저버 패턴을 사용함으로서 값의 변화를 직접 지정하여 변경하는 것이 아니기에 기존의 코드에 수정이 일어나지 않으며, 단일 책임원칙또한 객체가 객체만의 정보를 가지고 있고 정보를 최신화하는 메서드만을 포함하기에 OCP와 SRP를 가장 잘 지킬 수 있습니다.
3. 전략 패턴에 대하여 서술해주세요
⇒ 전략 패턴은 알고리즘을 객체 단위로 캡슐화하는 디자인 패턴입니다. 해당 패턴에서 알고리즘은 인터페이스를 통해 정의 및 이용되고 해당 인터페이스를 따르는 클래스를 통해 구현됩니다. 해당 패턴을 통해서 사용자는 알고리즘을 필요에 따라 바꿔서 사용할 수 있게 됩니다. 전략 패턴은 객체지향 설계의 SOLID 원칙 중 개방 폐쇄 원칙(OCP)에 부합한 패턴입니다.
전략 패턴은 가교 패턴과 구조가 비슷하지만 목적에 차이가 있습니다. 가교 패턴이 추상과 구현의 분리를 통한 독립적 개발의 용이성에 중점을 둔다면 전략 패턴은 알고리즘의 캡슐화를 통한 알고리즘 변경의 유연성에 중점을 둡니다.
프로그래밍 패러다임 1.Functional Programming 과 OOP의 차이에 대해서 서술해주세요.
=> 가장 큰 차이로는 함수의 취급입니다.FP에서는 함수를 일급 객체 취급하지만, OOP는 함수가 아닌 객체자체를 일급객체 취급합니다. 또한 OOP는 동작부를 캡슐화하여 코드의 이해를 돕는다면, 함수형 프로그래밍은 동작부를 최소화하여 코드의 이해를 돕습니다.
2.LSP를 만족하지 않으면, OCP가 깨지는 사례를 말해주세요
=> 클라이언트 코드 입장에서는 상위타입을 이용할텐데, LSP를 위반하는 구현 상속이 있다면, 신뢰가 깨져서 객체가 추가될 때마다 instanceOf를 호출해줘야하기때문에, OCP가 깨지게됩니다.
3.OOP의 특징 중 다형성을 구현하기 위한 방법이 무엇이 있는지 서술하세요.
=> 객체지향에서 다형성을 구현하기 위해 상속을 통해 구현되며, 대표적으로 오버로딩과 오버라이딩이 존재하고 다형성을 사용할시 코드가 간결해지며 유지보수에 용이해집니다.
네트워크 1.처리량과 대역폭의 차이를 설명해주세요
=> 대역폭은 지정기간동안 네트워크를 통해 전달할 수 있는 최대 트래픽 양이며, 처리량의 경우 평균치를 고려하는 점이 다릅니다.
2.HTTP와 TCP의 차이에 대해 서술하세요.
=> 우선 작동 계층의 차이가 존재합니다. TCP/IP의 경우 데이터링크 계층에서 작동하며, HTTP는 응용 계층에서 사용됩니다. 또한 HTTP의 경우 TCP를 기반으로 작성되었으며 헤더의 유무 차이와 TCP는 byte Array 단위로 통신을 하며 HTTP는 String 단위로 동작합니다.
신태우
디자인 패턴 질문
1. 디자인 패턴의 3가지 분류 2. 싱글톤 패턴이 무엇이고 단점을 설명해주세요 3. MVC 패턴 중 모델 1방식과 모델 2방식의 차이점을 간단히 설명해주세요
프로그래밍 패러다임 및 네트워크 기초 질문
1. 객체지향이 무엇인지 설명해주세요 2. SOLID 원칙 중 가장 중요하다고 생각하는 원칙을 설명해주세요 3. 오버로딩과 오버라이딩에 대해서 설명해주세요 4. 고차 함수에 대해서 간단히 설명해주세요 5. 일급 객체에 대해서 간단히 설명해주세요
임시은
디자인 패턴 CS 질문
1. MVC pattern을 간략하게 설명하고, 발생할 수 있는 문제점에 대해 이야기 해보세요.
=> MVC는 Model, View, Controller로 구성 요소를 세 가지 역할로 구분되어 있습니다.
Model은 데이터의 형태를 정의하고 수정하는 역할을 합니다. View는 모델을 UI로 표현하며, 사용자에게 입력을 받아 Controller에 전달합니다. Controller는 입력받은 이벤트를 애플리케이션 내에 어떻게 처리할지 판단하고 가공하여 Model 또는 View를 조작하는 역할을 합니다.
MVC 패턴은 각 구성요소들끼리 양방향으로 통신하게 되므로 연쇄적인 변화가 발생하여 결국 애플리케이션의 동작 흐름을 분석하거나 예측할 수 없는 문제가 발생할 수 있습니다.
2. React의 Virtual DOM은 무엇인가요?
=> 실제 DOM은 요소가 바뀔 때마다 새로운 render tree를 생성하여 렌더링 효율이 떨어집니다.
Virtual DOM은 가상으로 UI를 메모리에 저장했다가, 실제 DOM과 동기화하는 프로그래밍 개념 또는 UI 객체를 말합니다.
React에서는 ReactDOM과 같은 라이브러리에 의해 실제 DOM과 동기화하는데, 이런 과정을 재조정(reconciliation)이라 하고, 변화가 일어난 부분만 다시 렌더링하도록 합니다.
재조정은 React에게 원하는 UI 상태를 알려주고, DOM은 해당 상태와 일치하도록 합니다.
이 과정에서 이벤트 처리, 수동, DOM 업데이트를 추상화합니다.
3. CORS는 무엇이고, CORS 에러를 방지하려면 어떻게 해야하나요?
=> CORS는 Cross Origin Resource Sharing의 줄임말로, 교차 출처 리소스 공유이며, 브라우저는 동일 출처 정책에 의해 출처가 다른 리소스 요청을 방지하는 HTTP 헤더 기반 메커니즘입니다.
출처가 다르다는 것은 도메인, 하위도메인, 포트, 프로토콜이 다르다는 것을 의미하는데, CORS에 의해 요청이 차단되지 않으려면 이 네 가지가 모두 동일해야 합니다.
또는 프론트엔드에서는 프록시 서버를 만들어 동일한 출처로 만드는 방법도 있고, 백엔드에는 express의 cors 미들웨어 라이브러리를 사용하거나, 응답 헤더에 Access-Control-Allow-Origin에 허용하고자 하는 도메인을 세팅하는 방법이 있습니다.
프로그래밍 패러다임과 네트워크
1. 프로그래밍 패러다임을 간단하게 설명하세요.
프로그래밍 패러다임은 프로그램 스타일을 의미하고, 전체적인 프로그래밍 방식을 의미합니다.
프로그래밍 개발을 위하여 전략을 수립하여야 하는데, 이때 전략은 어떤 언어를 사용하고, 어떤 것을 지양하거나 지향할지 등 다양한 방법을 수립합니다.
1.1. 명령형과 선언형 프로그래밍의 차이를 예를 들어 이야기 하세요.
=> [예시 1]' 오랜만에 '가족들끼리 외식하러 식당에 도착하여 카운터에서 다가가 이렇게 이야기할 수 있습니다.
명령형: “1번 테이블에 자리가 비어있습니다. 우리는 저 쪽 자리에 앉을 것 입니다.”
선언형: “4명 앉을 자리를 부탁해요.”
=> [예시 2] 나는 현재 집에 나와 동양미래대학교를 가려고 합니다. 어떻게 가야할까요?
명령형: 엘레베이터를 타고 지하 6층으로 가서 쭉 직진을 한 뒤, 신흥역 2번 출구로 들어가세요. 들어간 다음 잠실역 방향 8호선을 탄 후, 잠실역에서 내려 신도림역 방향으로 2호선을 갈아타세요. 신도림역 1번 출구로 나간 후, 신호등을 건너 동양미래대학교 방향으로 버스를 타세요.
선언형: 서울특별시 구로구 경인로 445 (동양미래대학교) 입니다.
=> [예시 3] 수동 스틱과 오토 스틱 자동차
선언형: 수동 스틱(1종)
명령형: 오토 스틱(2종)
2. 네트워크 토폴리지는 무엇인지 간단하게 설명하세요.
=> 네트워크 토폴리지는 컴퓨터의 네트워크 요소들(링크, 노드)을 물리적으로 연결해놓은 것을 말합니다. 네트워크 토폴리지는 노드, 링크와 같은 요소들 배치에 의해 결정하는 물리적 토폴리지와 노드들 사이의 데이터 흐름이 결졍되는 논리적 토폴리지가 존재합니다.
네트워크 토폴리지는 대표적으로 다섯 가지로 분리할 수 있는데 버스, 스타, 링, 트리, 메시 토폴리지로 나누어지게 됩니다.
2.1. 예를 들어, 복층인 집에 와이파이를 설치하려고 할 때, 어떤 네트워크를 사용해야하는지 이야기 해보세요.
=> 메시 네트워크를 사용하는게 적합하다고 생각합니다.
다른 토폴리지와 다르게 메시는 다 대 다 기기 간 통신을 지원합니다. 모든 네트워크와 컴퓨터가 개별적으로 연결되어 있어, 특정 통신 회선에 문제가 발생하여도 다른 경로로 데이터 전송이 가능합니다.
그러다보니 일반 공유기 하나만 설치하였을 때는 거리가 멀어지면 인터넷 속도가 느려지거나 네트워크 연결이 불안정한 문제점을 해결해줍니다.
3. 스니핑과 스푸핑의 차이를 이야기 해보세요.
=> 스니핑과 스푸핑의 차이는 크게 공격의 범위로 분류할 수 있습니다.
스니핑은 네트워크에서 교환되는 패킷 또는 데이터를 훔쳐보는 정도의 소극적인 공격의 범위라면, 스푸핑은 임의로 IP 주소를 숨기고 타인의 IP로 위장하여, 시스템을 공격하는 범위를 가지고 있습니다.
한마디로 타인의 IP를 가로채기 위해 어느 부분이 취약한지 염탐하는 부분이 스니핑이고, 염탐을 한 다음 IP를 가로채고 해킹 및 공격을 하는 행위가 스푸핑입니다.
+ 스누핑은 스니핑보다 조금 더 발전하여, 염탐하는 것 뿐만 아니라 획득까지 하게 됩니다.
4. 객체지향 프로그래밍(OOP)의 특징을 이야기 해보세요.
=> 객체지향 프로그래밍은 추상화, 캡슐화, 상속성, 다형성이라는 특징이 있습니다.
캡슐화는 데이터와 코드의 형태를 외부로부터 보호하여, 데이터의 구조와 역할, 기능을 하나의 캡슐 형태로 만드는 방법입니다.
추상화는 클래스들의 공통적인 변수나 메소드들을 묶어 표현한 것입니다.
상속화는 부모 클래스에서 정의된 변수 및 메서드를 자식 클래스에서 상속 받아 사용하는 것 입니다.
다형화는 다양한 여러 형태로 표현이 가능한 구조를 말합니다.
5. 오버로딩과 오버라이딩의 차이점을 이야기 해보세요.
=> 오버로딩은 메서드의 이름은 같지만, 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미합니다. 오버라이딩은 상위 클래스의 메서드를 하위 클래스가 재정의 하는 것을 의미합니다.
오버로딩은 기존에 없던 새로운 메서드를 정의하는 것이고, 오버라이디은 상속 받은 메서드의 내용만 변경하는 것이다.
박수빈
프로그래밍 패러다임
1. DNS란 무엇인가?
=> Domain Name Service의 준말로 IP를 통해 데이터 교환을 하는 것이 접근성이 떨어져 도메인 이름을 IP와 매핑시켜서 도메인만으로도 접근할
수 있게 해주는 서비스이다.
2. Routing이란 무엇인가?
=> 라우팅이란 최적, 또는 최상의 경로를 결정하는 과정을 말한다.
그러한 과정은 네트워크에서 다른 네트워크로 패킷을 보낼 때 이뤄지는데 인터넷 통신이 라우팅의 가장 대표적인 예이다.
3. OOP의 4가지의 특징이 무엇인지 설명하시오
=> 캡슐화, 상속, 추상화, 다형성
4. SOILD 원칙 중 하나인 단일 책임 원칙은 왜 사용해야 할까?
=> 단일 책임 원칙이 잘 적용되어 있다는 것은 각 클래스의 수정 이유가 단 한가지라는 뜻입니다. 즉, 특정 기능을 수정할 때 하나의 클래스만 수정하면 되기 때문에 유지보수가 편리해집니다. (만약 단일 책임 원칙이 잘 지켜지지 않았다면 여러개의 클래스를 수정해야 할 것이다.)
또한 단일 책임 원칙에 따라 하나의 클래스가 하나의 책임만을 맡는다면 이후에 기능을 수정할 때 발생할 수 있는 사이드 이펙트를 막을 수 있습니다.
5. 특정 도메인에 매핑된 IP를 확인하기 위해 사용하는 네트워크 분석 명령어는?
=> nslookup
디자인패턴
1. 프록시 서버를 설명하고 사용 사례에 대해 설명해보세요.
=> 프록시 서버란 서버 앞단에 둬서 캐싱, 로깅, 데이터 분석을 서버보다 먼저 하는 서버를 말합니다. 이를 통해 포트 번호를 바꿔서 사용자가 실제 서버의 포트에 접근하지 못하게 할 수 있으며 공격자의 DDOS 공격을 차단하거나 CDN을 프록시 서버로 달아서 캐싱 처리를 용이하게 할 수 있습니다. nginx로 Node.js로 이루어진 서버의 앞단에 둬서 버퍼 오버플로우를 해결하거나 CloudFlare를 둬서 캐싱, 로그 분석 등을 하는 사용 사례가 있습니다.
2. 옵저버 패턴을 어떻게 구현하나요?
=> 여러 가지 방법이 있지만 프록시 객체를 써서 구현하곤 합니다. 프록시 객체를 통해 객체의 속성이나 메소드 변화 등을 감지하고 이를 미리 설정해 놓은 옵저버들에게 전달하는 방법으로 구현합니다.
3. 디커플링이 무엇인지 설명해주세요
=> 의존성 주입으로 인해 서로 의존하던 관계를 끊어낸 것을 디커플링이라고도 한다.
+ 3.1 의존성 주입이 무엇인지 설명해주세요
=> 의존하는 클래스를 직접 생성하는 것이 아닌 주입해줌으로써 체 간의 결합도를 줄이고 좀 더 유연한 코드를 작성할 수 있게되는 것입니다.
즉, 한 클래스를 수정하였을 때, 다른 클래스도 수정해야 하는 상황을 막아줄 수 있습니다.
최낙주
프로그래밍 패러다임
객체지향 언어의 장단점에 대해 설명해 보세요.
답변
> 장점은 객체지향의 특징 중 하나인 추상화 및 상속성에 따라 재사용이 용이합니다. 이에 때라 생산성도 향상됩니다. 캡슐화라는 특징 덕에 유지보수에 용이합니다.
단점은 설계에 많은 시간이 소요되며, 프로그램 용량이 크고, 처리 속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느립니다.
캡슐화에 대해 설명해 보세요.
답변
> 캡슐화는 객체의 속성과 메서드를 하나로 묶고, 일부를 외부에 감추어 은닉하는 것을 말한다. 이를 통해 코드의 중복을 줄이고 데이터를 처리하는 동작 방식을 외부에서 알 필요가 없다.
LAN과 WAN의 차이를 설명해 보세요.
답변
> Local과 Wide의 차이이다.
네트워크가 얼마나 연결되어 있냐의 차이라고 말할 수 있다.
일반적으로 게이트웨이 안에 있는 것을 LAN이라고 한다. >
병목 현상에 대해 설명해 보세요.
답변
> 병목 현상은 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다. 서비스에서 이벤트를 열었을 때 트래픽이 많이 생기고 그 트래픽을 잘 관리하지 못하면 병목 현상이 생겨 사용자는 웹 사이트로 들어가지 못한다. >
병목 현상이 발생하는 원인에 대해 설명해보세요.
답변
- 네트워크 대역폭
- 네트워크 토폴로지
- 서버 CPU, 메모리 사용량
- 비효율적인 네트워크 구성
디자인 패턴의 3가지 분류를 말씀해주시고, 분류별로 한 가지 사례를 설명해주세요.
답변
> 디자인 패턴은 생성, 구조, 행위 3가지로 나뉠 수 있습니다.
생성의 경우 단 하나의 객체만을 생성하는 Singleton 패턴이 있으며, 구조에는 클래스 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 Adapter 패턴이 있고, 마지막으로 행위에는 알고리즘을 캡슐화해 필요한 것으로 교체할 수 있는 Strategy 패턴이 있습니다. >
Template Method 패턴의 정의와 장점을 설명해주세요.
답변
> Template Method 패턴은 알고리즘 구조를 메소드에 정의하고, 하위 클래스에서 알고리즘 구조 변경 없이 알고리즘을 재정의하는 패턴입니다.
AbstractClass, ConcreteClass로 구분되어 있는데, AbstractClass는 템플릿 메소드를 정의하는 클래스로 이 클래스에 공통 알고리즘을 정의하고, 하위 클래스에서 구현할 기능들은 abstract로 정의합니다.
ConcreteClass는 AbstractClass를 상속받거나 구현해 abstract로 정의된 메소드들을 실제로 구현하는 역할을 합니다.
전체적인 레이아웃은 같지만, 상속받은 클래스가 구체적으로 abstract 메소드가 어떤 일을 할지 결정하여 확장할 수 있다는 장점이 있습니다.
어댑터 패턴의 2가지 방식과 특징을 설명해주세요.
답변
> 어댑터 패턴에는 오브젝트 어댑터와 클래스 어댑터 방식이 있습니다.
오브젝트 어댑터는 반드시 Adaptee 객체를 만들어줘야 사용 가능하며, 클래스 어댑터는 상속을 이용하기 때문에 다중 상속이 지원되는 언어에서만 사용 가능하다는 특징이 있습니다.
김지현
질문
디자인 패턴
1. 팩토리 패턴의 간략한 설명과 종류, 그 차이를 말씀해주세요.
- 팩토리 패턴은 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴입니다. 그 종류로 팩토리 메소드 패턴과 추상 팩토리 패턴이 있는데, 팩토리 메소드 패턴은 한 종류의 객체를 생성하기 위해 사용되지만, 추상 팩토리 패턴은 연관되거나 의존적인 객체로 이루어진 여러 종류의 객체를 생성하기 위해 사용되는 차이가 있습니다.
1. 디자인 패턴을 따를때의 장점은 무엇인가요?
- 가장 바깥쪽 계층인 framework 계층을 수정해도 안쪽 비즈니스 로직이 이 수정사항에 의해 영향받지 않습니다. 즉, 독립적으로 뷰계층을 수정하거나 Data source를 바꿀 수 있습니다.
- 가장 내부에 위치한 모델 컴포넌트는 다른 컴포넌트들로부터 데이터 구조와 같은 내부적인 사항을 숨길 수 있고, 이때 interface를 선언해준다면 로직 재사용이 가능해집니다.
- 또한, 해당 컴포넌트에 관련된 코드를 분리시켜 다른 컴포넌트로 옮겨가는 것 또한 수월해집니다.
1. MVC 패턴을 쓰는 이유에 대해 말씀해주세요.
- 효율적인 개발 및 유지보수를 위해서입니다. 모델, 뷰, 컨트롤러로 각각 분리하여 개발하면 중복 개발되는 부분을 방지할 수 있어 개발시 효율성이 증대될 뿐만 아니라, 추후 프로그램의 유연한 확장성을 가질 수 있습니다. 어떠한 부분에서 문제가 발생하더라도, 다른 부분에 최소한의 영향을 주며 변경할 수 있습니다.
네트워크
1. 네트워크 토폴로지에 대해 설명해주세요.
- 네트워크 토폴로지는 컴퓨터 네트워크의 물리적 레이아웃이며 컴퓨터, 장치, 케이블 등이 서로 연결되는 방식입니다. 버스형, 스타형, 링형이 있으며 버스형은 하나의 전송매체를 복수의 기기가 공유하는 형태입니다.
1. 네트워크 망의 종류와 그 차이를 말씀해주세요.
- LAN와 WAN가 있습니다. Local 과 Wide의 차이로, 네트워크가 얼마나 연결되어 있냐의 차이입니다. 또한 기본적으로는 WAN에 접속할 수 있는 인터넷을 여러 기기가 LAN을 통해서 공유해서 사용하는 형식이라고 볼 수 있습니다.
프로그래밍 패러다임
1. OOP와 함수형 프로그래밍의 가장 큰 차이점은 무엇인지 설명해주세요.
- 각각의 프로그래밍에서 일급객체의 비교에따라 간접적 비교가 가능하다. 함수형 프로그래밍의 일급 객체는 함수 자체가 일급객체가 됩니다. 객체지향 프로그래밍에서는 객체, 클래스 등이 일급 객체가 됩니다. 객체지향은 객체의 특성에 의거하여 접근대상을 제어하고 속에있는 데이터를 제어하는 등 제어에 목적이 집중되어있는 반면 함수형 프로그래밍은 간결함을 모티브로 나온 프로그래밍 이기에 입력값이 있으면 출력값이 나오고 프로그램에 영향을 주지 않는다는 간단한 개념으로 상태의 변형을 주지 않기 때문에 간결한 프로그래밍에 적합합니다.
1. TDD의 장단점을 설명해주세요.
- 테스트 주도 개발의 장점으로, 철저하게 테스트 주도로 가면 유지보수하기 편한 코드를 짜게 되어 있다는 점과 설계를 고치는 시간이 줄어든다는 것이 있습니다. 단점으로는 규모가 작거나 시간적으로 단기인 프로젝트에서 쓰기에는 생산성 저하와 비효율을 유발할 수 있다는 점입니다.
1. 함수형 프로그래밍의 특징을 설명해주세요.
- 함수형 프로그래밍은 사이드 이펙트가 없고 실행이 외부에 영향을 주지 않는 순수 함수들을 조합한 프로그래밍 패러다임입니다. 상태, 가변 데이터를 멀리한다는 특징과 일급 객체를 다룬다는 특징이 있습니다.
- 5.1. 함수형 프로그래밍에 기반하여 순수함수와 1급 객체란 무엇인지 설명해주세요. - 순수함수는 출력이 입력에만 의존하는 함수이며, 일급 객체란 변수나 데이터 구조로 담을 수 있고, 함수 파라미터와 반환값으로 사용될 수 있는 객체를 의미합니다.
김보민
1. 함수형 프로그래밍이란 무엇인가요?
=> 순수함수와 보조함수의 조합을 통해 로직내에 존재하는 조건문과 반복문을 제거하여,
복잡성을 해결하고 변수의 사용을 억제하여 상태 변경을 피하려는 프로그래밍 패러다임이다.
2. 함수형 프로그래밍에서 순수함수란 무엇이죠?
=> 순수함수는 같은 입력이 주어지면 같은 출력을 반환해야하고, side effect(부작용)이 없어야한다.
결국, 함수형 프로그래밍은 순수함수를 통해 sideeffect를 최대한 억제하여 오류를 피하고 프로그램의 안전성을 높이려는 노력의 한 방법이다.
3. OOP와 함수형 프로그래밍의 가장 큰 차이점은 무엇인가요?
=> [1](https://futurecreator.github.io/2018/10/05/why-functional-programming/)
객체지향은 동작하는 부분을 캡슐화해서 이해할 수 있게 하고, 함수형 프로그래밍은 동작하는 부분을 최소화해서 코드 이해를 돕는다.
즉, 객체지향과 함수형의 차이는 상태를 관리하는 점이다.
객체 지향은 상태를 저장하는 필드와 필드를 이용해 기능을 제공하는 메소드를 붙여서 클래스를 만든다. 즉, 항상 새로운 자료구조를 사용하게 되는 셈이다.
하지만 함수형 프로그래밍은 몇몇 자료구조(list, set, map)를 이용해 최적화된 동작을 만들어낸다.
4. 고차함수 (High-Order Function)란 무엇인지 설명해주세요.
=> 고차 함수는 함수를 파라미터로 받거나 함수를 리턴하는 함수를 말한다. 반복적으로 실행되는 어떤 작업을 추상화시키는 수단으로 사용한다.
고차 함수의 고전적인 예제는 `Array.prototype.map` 함수다. 배열을 기반으로 새로운 배열을 만들 때 사용하는데, 이런저런 과정을 생략하고 맵핑 로직만 전달하면 되기 때문에 코드가 무척 간결해진다.
자바스크립트 Array의 `forEach`, `filter`, `reduce`등도 모두 고차 함수이다.
5. OOP란 무엇인가요?
=> 객체지향 프로그래밍 입니다.
OOP란 Object-oriented programming의 준말로 컴퓨터 프로그램을 객체의 모임으로 파악하려는 프로그래밍 패러다임입니다. 프로그래밍을 객체 단위로 나눠서 작성하는 것으로, 예를 들어 사람을 하나의 객체라고 한다면 사람을 구성하는 뇌부터 눈, 코, 입, 귀, 팔, 다리 등을 각각 나눠서 관리하고 서로 상호작용하여 결국 사람이 밥을 먹거나, 코딩을 하는 등의 동작을 하도록 만드는 것입니다.
6. 오버로딩과 오버라이딩의 차이에 대해 말해주세요.
=> 둘 다 다형성의 대표적인 예로,
오버라이딩은 부모한테 상속받은 메소드를 자식 클래스에서 필요에 따라 재정의해서 사용하는 것이고
오버로딩은 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며, 그 결과도 다르게 구현할 수 있다. 오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 개수나 타입이 다르면 된다.
[디자인 패턴]
1. MVVM 모델에 대해서 설명해주세요.
=> Model View, View, Model의 약자로 프로그램의 비지니스 로직과, 프레젠테이션 로직을 UI로 명확하게 분리하는 패턴입니다. 데이터를 관리하는 로직과 UI로직을 깔끔하게 분리하면, 애플리케이션을 보다 쉽게 테스트, 유지보수 할 수 있습니다. 또한 코드의 재 사용성을 크게 개선하고 개발자와 UI 디자이너가 애플리케이션의 각 부분을 개발 할 때보다 쉽게 협업 할 수 있는 디자인 패턴 입니다.
- Model은 프로그램에서 사용되는 실제 데이터이며, 불러오거나(Query) 업데이트하는 로직이 있습니다.두뇌와 같은 역할을 합니다.
- View는 사용자가 상호 작용하는 UI 계층으로, 쉽게 말하자면 유저가 보는 화면을 의미합니다.주로 비지니스 로직을 처리하지 않고, UI에 연관된 로직만 수행합니다.몇몇 사람들은 UI에 연관된 로직수행과 Input에 대한 부분을 수행하는 것을View Controller라고 부르기도 합니다.
- ViewModel은 모델에 액세스하고 비즈니스 로직을 처리합니다.
2. 옵저버 패턴은 무엇이고 어떤 상황에서 유용한지 설명해주세요.
=> 주체가 객체(subject)의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버들에게 변화를 알려주는 패턴이다.
Observer 패턴은 하나의 상태에 의존하는 여러 개의 객체들이 존재하는 케이스에서 유용하다.
React에서는, 서로 연결되진 않았지만 데이터가 동기화 되어 있으면 하는 두 컴포넌트가 존재할 때 유용하다.