디자인 패턴과 프로그래밍 패러다임

junwoo·2022년 6월 21일
0

CS

목록 보기
1/6
post-thumbnail

라이브러리 VS 프레임워크

  • 공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것
  • 프레임워크에는 제어의 역전(Inversion Of control)이 적용되어 있다
    : 프레임워크와 라이브러리의 차이는 흐름(Flow)에 대한 제어 권한이 어디에 있느냐의 차이. 프레임워크는 전체적인 흐름을 자체적으로 가지고 있으며, 프로그래머가 그 안에 필요한 코드를 작성하는 반면에 라이브러리는 사용자가 흐름에 대해 제어를 하며 필요한 상황에 가져다 쓰는 것

1.1 디자인 패턴


과거 SW 개발 과정에서 발견한 설계 노하우를 패턴으로 정리한 것으로 장점으로는 범용적인 코드 스타일로 의사소통을 효율적으로 할 수 있고요, 검증된 구조이므로 설계를 빠르게 할 수 있습니다. 목적에 따라서 생성패턴, 구조패턴, 행동패턴으로 나눠지게 됩니다.

1.1.1 싱글톤 패턴

싱글톤 패턴은 인스턴스를 오직 1개만 생성하는 패턴입니다. 예를들면 디비 커넥션이나 스레드 풀 객체를 생성할 때 사용합니다. 만드는 방법으로는 이른 초기화 방식, 게으른 초기화 방식, 그리고 Holder에 의한 초기화 방식이 있습니다.

1.1.2 팩토리 패턴

팩토리 패턴은 객체를 직접 생성하지 않고 객체를 생성하는 Factory 객체를 사용하는 패턴입니다. 장점으로는 직접 객체를 생성하는 것을 막아줘서 결합도를 낮춰주는 효과가 있습니다.

1.1.3 전략 패턴

전략(정책) 패턴은 객체의 행위를 동적으로 바꾸고 싶은 경우 '캡슐화한 알고리즘'(전략)을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다.

간단히 말해서 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴입니다.

1.1.4 옵저버 패턴

옵저버 패턴은 주체가 관찰 대상(subject)의 상태 변화를 관찰하다가 변화가 있을 때 모든 옵저버(subscriber)들에게 변화를 알려주는 디자인 패턴입니다.

해당 패턴을 사용하지 않는다면 polling을 사용하는데 이를 사용하면 이벤트가 발생했는지 확인 하기 위해서 1s, 1m, 1h마다 확인해야됩니다 -> 리소스 낭비

따라서 이벤트가 일어난 순간 옵저버가 반응하도록 옵저버 패턴을 사용하여 구현해야 합니다.

1.1.5 프록시 패턴

대상 객체에 접근하기 전 흐름을 가로채 객체 앞단의 인터페이스 역할을 하는 패턴으로 객체에 대한 접근 제어(security), 캐싱, 로깅 등에 사용합니다.

프로시 서버

서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램

1.1.6 이터레이터 패턴

이터레이터(iterator)를 사용하여 컬렉션의 요소들에 접근하는 패턴으로 Aggregator의 종류에 상관없이 이터레이터라는 하나의 인터페이스로 순회가 가능하다는 장점이 있습니다.

Container / Aggregator : 동일한 데이터의 집합 (종류. Array, Linked List, Tree, Graph, Table...)

1.1.7 노출모듈 패턴

즉시 실행 함수를 통해 private, public 같은 접근 제어자를 만드는 패턴

1.1.8 MVC 패턴

1.1.9 MVP 패턴

1.1.10 MVVM 패턴


1.2 프로그래밍 패러다임


프로그래밍 패러다임은 프로그래머들이 프로그래밍을 더 쉽게, 그리고 더 잘하기 위해서 만든 프로그래밍 방식, 방법론

1.2.1 선언형과 함수형 프로그래밍

선언형 프로그래밍이란 ‘무엇을’ 풀어내는가에 집중하는 패러다임
“프로그램은 함수로 이루어진 것이다.”라는 명제가 담겨 있는 패러다임

  • 작은 ‘순수 함수’들을 블록처럼 쌓아 로직을 구현하고 ‘고차 함수’를 통해 재사용성을 높인 프로그래밍 패러다임

1.2.2 객체지향 프로그래밍

객체지향 프로그래밍(OOP)은 객체들의 집합으로 프로그램의 상호 작용을 표현

  • 설계에 많은 시간이 소요, 처리 속도가 다른 프로그래밍 패러다임에 비해 상대적으로 느림
  • 특징

오버로딩 VS 오버라이딩

오버로딩(overloading)은 같은 이름을 가진 메서드를 여러 개 두는 것. 메서드의 타입, 매개변수의 유형, 갯수 등으로 여러 개를 둘 수 있으며 컴파일 중에 발생하는 ‘정적’ 다형성.
오버라이딩(overriding)은 주로 메서드 오버라이딩을 말하며 상위 클래스로부터 상속받은 메서드를 하위 클래스가 재정의하는 것을 의미하며 런타임 중에 발생하는 ‘동적 다형성’

  • 설계 원칙 (SOLID 원칙)

1.2.3 절차적 프로그래밍

절차형 프로그래밍은 로직이 수행되어야 할 연속적인 계산 과정으로 이루어 짐.
정해진 순서를 따른다.

1.2.4 패러다임의 혼합

비즈니스 로직이나 서비스의 특징을 고려해서 패러다임을 정하는 것이 좋다. 여러 패러다임을 조합하여 상황과 맥락에 따라 패러다임 간의 장점만 취해 개발하는 것이 좋다.

profile
오늘보다 발전된 내일을 위한 기록

0개의 댓글