OOP, FP

.·2022년 7월 1일
0

blog

목록 보기
28/52

[1] OOP(Object Oriented Programming)

(1) OOP란

  • 객체지향 프로그래밍으로 클래스와 객체 , 인스턴스를 이용한 프로그래밍 방식을 말한다. OOP는 자바,c++에서 사용하는 방식으로 자바스크립트 개발자에게는 친숙하지 않은 방식이다.

  • OOP는 과거부터 현재까지도 사용하는 방식으로 OOP의 4대속성(은닉성, 상속, 다형성, 추상화)이라는 특성을 가지고 있다.

(2) OOP 4대 속성

1. 캡슐화

private, protected, public 과 같이 외부에서 접근할 수 있는 정보와 아닌 정보를 구분하여 보안을 높이고 수정을 바로 되지 않게 해준다.

2. 추상화

구체적으로 기능을 구현하지 않고 어떤 기능이 들어갈 수 있는지를 구현해서 확장과 보수에 용이하게 사용하는 방식이다. interface로 잘 설계된 구조는 확장에 매우 용이하게 대응을 할 수 있다. 추상화과정은 객체 지향의 GOF와 같이 공부를 하면 좀더 좋은 설계를 가능하게 해줄 것이다.

3. 상속

부모 클래스의 메소드나 프로퍼티를 상속함으로써 중복되는 것을 재사용할 수 있고 overriding을 해서 부모 요소와 맞지 않는 프로퍼티나 메소드를 수정도 가능해서 재사용성을 높여준다.

4. 다형성

다형성은

(3) OOP의 5가지 원칙(SOLID)

1. 단일 책임 원칙(Single responsibility principle)

하나의 클래스는 오직 하나의 책임(기능)만을 가져야 한다는 원칙, 예를 들어 로그인 클래스면 로그인만 담당을 해야지 회원가입이나 인증과 같은 기능들을 가지고 있으면 나중에 코드를 수정하거나 문제가 생길 때 파악이 어려울 수 있음

2. 개방 폐쇄 원칙(Open/closed principle)

클래스,모듈 함수 등은 쉽게 확장(코드 추가, 연결)이 되어야하고 수정에 대해서는 쉽게 일어나지 못하게 닫혀있어야 한다는 원칙

3. 리스코프 치환 원칙(Liskov substitution principle)

부모 클래스자리에 자식 클래스를 넣어도 작동이 잘 되어야 한다는 뜻, 자료형P의 객체를 자료형 C의 객체로 교체되어도 문제가 없어야 한다는 원칙

4. 인터페이스 분리 원칙(Interface segregation principle)

큰 덩어리의 인터페이스를 구체적이고 작은 단위들로 분리시킴으로 필요한 메서드 들만 이용한다는 원칙, 필요없는 모듈이나 기능을 가지고 있지 않게 하는 의미도 있고 인터페이스를 작은 단위들로 분리 시켜놓으면 리팩토링, 수정 등을 쉽게 할 수 있다.

5. 의존관계 역전 원칙(Dependency inversion principle)

상위 모듈이 하위 모듈에 종속되어서는 안된다는 원칙, 하위 모듈에서 상위 모듈을 객체로 만들고 그 객체의 상위모듈에 영향을 주게 된다면 제일 하위 모듈에서 코드를 수정하게 되면 상위모듈에 영향을 미치게 되어 수정하기 어려운 경우가 될 수도 있다.

[2] FP

함수형 프로그래밍
대표적인 언어로 Clojure, Swift, Haskell, Scala

(1) 함수형 프로그래밍 원칙

1. 1급 객체

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

2. 고차함수(HOF)

함수의 반환값으로 함수를 반환하여 그 함수를 매개변수로 받아서 처리하는 방법

3. 불변성

원본 데이터를 건드리지 않고 복사본을 만들어서 복사본으로 작업을 해야 한다.

4. 순수함수

동일한 인풋에는 동일한 결과를 반환해야 한다.

(2) 장단점

1. 장점

  • 높은 수준의 추상화를 제공한다
  • 함수 단위의 코드 재사용이 수월하다
  • 불변성을 지향하기 때문에 프로그램의 동작을 예측하기 쉬워진다

2. 단점

  • 순수함수를 구현하기 위해서는 코드의 가독성이 좋지 않을 수 있다
  • 함수형 프로그래밍에서는 반복이 for문이 아닌 재귀를 통해 이루어지는데 (deep copy), 재귀적 코드 스타일은 무한 루프에 빠질 수 있다
  • 순수함수를 사용하는 것은 쉬울 수 있지만 조합하는 것은 쉽지 않다

[참조]

참조1

참조2

0개의 댓글