[CS] 디자인 패턴과 프로그래밍 패러다임3
프로그래밍 패러다임
프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론
객체지향 프로그래밍은 프로그래머들이 프로그램을 상호 작용하는 객체들의 집합으로 볼 수 있게 하는 반면, 함수형 프로그래밍은 상태 값을 지니지 않는
함수 값들의 연속으로 생각할 수 있게 해준다.
ㅁ 선언형 > 함수형 프로그래밍
‘무엇을’ 풀어내는가에 집중한 패러다임으로 프로그램은 함수로 이루어진 것이다.
라는 명제가 담겨있다.
배열만 받아서 누적한 결괏을 반환하는 순후 함수 reduce()를 이용한 예시로, 작은 *‘순수 함수’들을 블록처럼 쌓아 로직을 구현하고 *‘고차 함수’를 통해 재사용성을 높인 패러다임.
JS는 함수가 일급 객체이기에 함수형 프로그래밍 방식이 선호된다.
const list = [1,2,3,4,5,11,12]
const ret = list.reduce((max, num)=>num > max ? num : max,0)
console.log(ret) //12
ㅁ 명령형 > 객체지향 프로그래밍
객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급해 객체 내부에 선언된 메서드를 활용하는 방식.
설계에 많은 시간이 소요되며, 처리속도가 느림.
const ret=[1,2,3,4,5,11,12]
class List {
constructor(list) {
this.list = list
this.max = list.reduce((max, num)=>num > max ? num : max, 0)
}
getMax() {
return this.max
}
}
const a = new List(ret)
console.log(a.getMax()) //12
ㅁ 객체지향 프로그래밍 특징
> 추상화
복잡한 시스템으로부터 핵심적인 개념 또는 기능을 간추려내는 것
> 캡슐화
객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉하는 것
> 상속성
상위 클래스의 특성을 하위 클래스가 이어받아서 재사용하거나 추가, 확장 하는 것으로, 코드의 재사용 측면, 계층적인 관계 생성, 유지 보수성 측면에서 중요
> 다형성
하나의 메서드나 클래스가 다양한 방법으로 동작하는 것으로 오버로딩, 오버라이딩이 대표적이다.
ㅁ 객체지향과 설계원칙(SOLID)
S - 단일 책임
O - 개방 - 폐쇄
L - 리스코프 치환
I - 인터페이스 분리
D - 의존 역전
용어 정리
ㅁ 순수 함수
출력이 입력에만 의존하는 것
const pure = (a,b) => {
return a + b
}
ㅁ 고차 함수
함수가 함수를 매개변수로 받아 로직을 생성하는 것
ㅁ 일급 객체
다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체를 뜻하며 아래 특징을 가진다.
- 변수나 메서드에 함수를 할당할 수 있다.
- 함수 안에 함수를 매개변수로 담을 수 있다.
- 함수가 함수를 반환할 수 있다.
ㅁ 커링
여러개의 인자를 받는 함수를 단일 인자를 받는 함수들의 체인으로 변환하는 것
function add(a){
return function (b){
return a+ b
}
}
const add5 = add(5)
console.log(add5(5)) //10
- 특정 인자를 미리 적용한 함수 생성 가능(코드 가시성 증가)
- 코드 재사용성 향상
ㅁ 오버로딩 같은 이름을 가진 메서드를 여러 개 두는 것. 메서드의 타입, 매개변수의 유형, 개수 등으로 여러 개를 둘 수 있고 컴파일 중 발생하는 ‘정적’다형성 이다.
ㅁ 오버라이딩
주로 메서드 오버라이딩을 말하며, 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의 하는 것을 의미한다. 런타임 중에 발생하는 ‘동적’ 다형성 이다.
댓글남기기