OOP
는 능숙해야한다는 피드백을 받았다.이 기술이 왜 쓰이고 있지?
를 먼저 고민하는 성향이다. 그래서 OOP를 본격적으로 공부하기 전에, 그 배경을 간략하게라도 알아보고 싶었다.개념
프로그래밍 시, 순차적인 처리를 중요시 하는 프로그래밍 기법. 절차지향프로그래밍에 기반한 언어로는 포트란, 베이직, C언어 등이 있다.
특징
데이터와 함수를 별개로 처리한다. 즉, 특정 기능 수행을 위해서는 그 일을 하는 함수를 직접 호출해야한다.
하나의 큰 기능을 작은 단위의 기능들로 나누어 처리하는 방식, 즉 Top-Down 방식으로 프로그래밍을 전개한다.장/단점
장점: OOP에 비해 빠르다
단점: 유지보수가 어렵다 / 순차성을 강조하므로, 프로그래밍 시에 순서를 바꾸어야 하는 이슈가 발생하면 처리가 복잡하다 / 프로그램 가독성이 낮다.
개념
프로그램을 수많은 "객체"의 집합으로 간주하여, 프로그램의 구성요소를 "객체"를 기본단위로 쪼개어 설계하고, 이 객체 간의 상호작용으로 프로그램을 개발하는 패러다임이다.
객체란 유사한 특징, 속성을 가진 것들의 집합이라고 할 수 있다.
객체지향 프로그래밍에 기반한 언어는 Python, Java, Ruby, Javascript 등이 있다.특징
1. 추상화
객체지향 프로그래밍은 두루뭉술한 하나의 개념을 공통된 속성과 역할을 기준으로 구체적으로 쪼개어 추출하는 "추상화" 기법에 기반한다.
예컨대, Javascirpt의 Math, Date와 같이 기본적으로 제공되는 메소드들은 이러한 추상화에 따라 수학/날짜와 관련된 변수와 메소드들을 제공하는, 객체에 기반한 기능들이다.2. 캡슐화
캡슐화란 실제 구현 내용을 외부로부터 감추는 것을 의미한다.
메소드와 변수를 객체를 중심으로 구성함으로써, OOP는 특정 속성이나 메소드를 사용자가 조작할 수 없도록 방지한다.3. 상속
상속이란 기존에 존재하는 객체의 특성을 참조하여 새로운 클래스를 생성하는 것을 의미한다.
상속을 통해, OOP는 코드 재사용성이 매우 높은 특징을 가지고 있다.4. 다형성
같은 메소드를 호출하더라도, 메소드가 속한 객체에 따라 동작은 달라질 수 있다.
장점
코드 가독성/재사용성이 높다.
그래서 유지보수가 용이하다.
그래서 대형 프로젝트에 적합하다.단점
속도가 절차지향에 비해 느리다
추상화 작업이 중요하므로, 프로그래밍 설계에 많은 재원이 소모된다.
객체가 많을수록 용량이 커진다.
개념
거의 모든 기능을 순수 함수로 구성하는 프로그래밍 기법
작은 단위의 문제를 해결하기 위한 함수들을 순수 함수로 작성하고, 이들을 묶어서 하나의 프로그램을 구성하는 것이 함수형 프로그래밍이다.특징
1. 순수함수
순수함수란, 동일한 INPUT에 동일한 OUTPUT이 나와야 하는 함수를 의미한다.
함수 내부에 외부 인자에 영향을 받거나, 프로그램 상태에 영향을 주는 Side effect가 없어야한다.
그래서 순수함수는 안정성이 큰 장점을 가진다.
순수함수 예시
let a = 1
function sum(b,c){
return b+c+a
}
=> 외부 인자 값에 따라 output이 변경되므로, 순수함수 X
function sum(b,c){
return b+c
}
=> 외부 인자 값에 따라 output이 변경되지 않으므로, 순수함수
2. 데이터 비상태성, 불변성
함수형 프로그래밍에서 프로그램을 구성하는 데이터는 변하지 않는 특징을 가진다.
데이터에 변경이 이루어지더라도, 원본이 아니라 복사본을 변경하도록 한다.3. 선언형 함수
if, for 등 여러 문장을 사용하는 것은 함수형 프로그래밍이 아니다.
장점
사이드이펙트를 미연에 방지한다.
비절차형이 아니다.
코드 가독성이 높다.
객체지향보다 코드가 간결하다단점
데이터 상태를 조작할 수 없다.
다른 요소들과 아무런 차별이 없는 객체, 함수의 인자로도 넘겨질 수 있고, 변수에 대입도 가능한 객체를 의미한다.