디자인 패턴
프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용해서 해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것
일종의 정형화된 문제 상황에 대한 솔루션?
패턴과 알고리즘의 차이
패턴은 알고리즘과 자주 혼동됩니다. 왜냐하면 두 개념 모두 알려진 문제에 대한 일반적인 해결책을 설명하기 때문입니다.
알고리즘은 어떤 목표를 달성하기 위해 따라야 할 명확한 일련의 절차를 정의하지만, 패턴은 해결책에 대한 더 상위 수준의 설명입니다.
예를 들어 같은 패턴을 두 개의 다른 프로그램에 적용하면 두 프로그램의 코드는 다를 것입니다.
알고리즘은 요리법에 비유할 수 있지만 패턴은 요리법이 아닌 청사진에 더 가깝습니다.
알고리즘과 요리법 둘 다 목표를 달성하기 위한 명확한 단계들이 제시되어 있습니다.
반면에 청사진은 결과와 기능들은 제시하나 구현 단계 및 순서는 사용자가 결정합니다.
패턴 분류
1. 목적에 따라
- 생성패턴/구조패턴/행동패턴
생성패턴: 기존 코드의 재활용과 증가시키는 객체 생성 메커니즘들을 제공합니다.
객체의 생성 과정에 관여하는 패턴
구조 패턴: 구조를 유연하고 효율적으로 유지하면서 객체와 클래스를 더 큰 구조로 조합하는 방법을 설명합니다.
클래스나 객체의 구성을 통해 더 큰 구조로 만들 수 있게 해주는 것과 관련된 패턴
행동 패턴: 패턴을 주로 클래스에 적용하는지 아니면 객체에 적용하는지에 따라 구분되는 패턴
2. 범위에 따라
: 패턴을 클래스에 적용하는지 아니면 객체에 적용하는지에 따라 구분되는 패턴이다.
클래스 패턴 (Class Pattern) : 클래스들과 하위 클래스 간의 관계를 다루는 패턴이다. 컴파일 시에 관계가 결정된다.
객체 패턴 (Object Patterns) : 객체 간의 관계를 다루며 보통 구성을 통해 정의된다. 객체 패턴은 일반적으로 실행시간에 관계가 생성되기 때문에 더 동적이면서 유연하다.
▼ 책에서 다루는 패턴
싱글톤 패턴 : 생성패턴
싱글턴은 클래스에 인스턴스가 하나만 있도록 하면서 이 인스턴스에 대한 전역 접근(액세스) 지점을 제공하는 생성 디자인 패턴입니다.
하나의 인스턴스를 만들어놓고 해당 인스턴스를 다른 모듈들이 공유하며 사용한다
적용 : 데이터베이스 연결 모듈
장점: 인스턴스를 생성할때 드는 비용이 줄어든다
단점:
1) 의존성이 높아진다 : 모듈간의 결합을 강하게 만든다 -> 의존성 주입(DI : dependency injection)을 통해 모듈간의 결합을 느슨하게 만들 수 있다
-> 모듈을 쉽게 교체할 수 있는 구조가 되고 마이그레이션이 수월. ..
2) TDD (test driven development) 단위 테스트 : 서로 독립적이어야 하며 어떤 순서로든 실행할 수 있어야한다
싱클톤패턴은 미리 생성된 하나의 인스턴스를 기반으로 구현하기때문에 각 테스트마다 독립적인 인스턴스를 만들기 어렵다
팩토리 패턴 : 생성패턴
부모 클래스에서 객체들을 생성할 수 있는 인터페이스를 제공하지만, 자식 클래스들이 생성될 객체들의 유형을 변경할 수 있도록 하는 생성 패턴입니다.
객체를 생성하기 위한 인터페이스를 정의하지만 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 하위 클래스에서 이루어지도록 인스턴스 생성의 책임을 떠넘기는 패턴
전략 패턴 : 행동 패턴
전략 패턴은 알고리즘들의 패밀리를 정의하고, 각 패밀리를 별도의 클래스에 넣은 후 그들의 객체들을 상호교환할 수 있도록 하는 행동 디자인 패턴입니다.
객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 캡슐화한 알고리즘 을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 함
ex. 상품 결제 시 카카오페이로 할지 네이버 페이로 할지 선택할 수 있다
옵저버 패턴 : 행동 패턴
옵저버 패턴은 당신이 여러 객체에 자신이 관찰 중인 객체에 발생하는 모든 이벤트에 대하여 알리는 구독 메커니즘을 정의할 수 있도록 하는 행동 디자인 패턴입니다.
객체의 상태가 변하면 주체가 옵저버들에게 변화를 알려준다
객체와 주체는 같을수도 있고 다를 수도 있다.
프록시객체를 통해 구현하기도 한다.
추가/삭제/알림 메소드
알림 업데이트 메소드
장점: 결합이 느슨하다. 유연성, 확장성, 실시간 업데이트
단점: 단방향 통지, 주체와 옵저버가 많아지면 복잡성이 높아진다
적용: 유튜브, 인스타 등 구독 알람
프록시 패턴 : 구조패턴
프록시는 다른 객체에 대한 대체 또는 자리표시자를 제공할 수 있는 구조 디자인 패턴입니다. 프록시는 원래 객체에 대한 접근을 제어하므로, 당신의 요청이 원래 객체에 전달되기 전 또는 후에 무언가를 수행할 수 있도록 합니다.
프록시패턴은 대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 일부 동작을 대신 수행한다.
대표적인 서비스(?)로는 nginix, coludflare 가 있다
프록시 서버는 웹 서버에 접근하기 전에 그 앞단에서 웹서버 부담을 덜어주고, 정적 작업을 수행하며 보안기능 제공을 한다. (DDOS 공격을 감지하고 차단함, 인증서없이 HTTPS 구축
-용어
프록시 객체는 target과 핸들러 두 개의 변수를 갖는다. 즉 가로챌 대상에 수행할 동작이 정의되어있다.
이터레이터 패턴
여러가지 자료형(데이터 타입)을 하나의 인터페이스로 순회하는 패턴
-용어
배열, 객체, Map, Set 과 같이 순회가능한 대상을 이터러블 Itarable 객체 라고 한다
이러한 객체들은 이터레이터 프로토콜을 따른다.
즉 이터레이터를 리턴하는 [Symbol.iterator]() 메소드를 갖는 객체이다.
노출 (모듈) 패턴
private, public 와 같은 접근제어자를 만드는 패턴
자바스크립트에는 접근제어자가 없기때문에 함수 스코프를 이용해서 구현한다.
즉 함수 내에서 return 해준 변수만 함수 밖에서 사용이 가능하므로 = public, 나머지는 private 이 된다..
MVC (Model - View - Controller)
View : 사용자 인터페이스
Model : 애플리케이션의 데이터 (DB, 상수, 변수 등)
Controller : View 와 Model의 중간 다리, 각각으로부터의 변경 내용을 전달해줌
모듈화-> 재사용성, 암호화, 테스트 용이
MVP (Model - View - Presenter) : MVC 에서 M - V 의존성을 낮추기 위해 Controller -> Presenter
뷰와 프레젠터는 1:1 관계
MVVM (Model - View - Viewmodel)
뷰와 뷰모델 사이의 데이터 바인딩(데이터 동기화, 즉각 반영)
참고 링크
리팩터링과 디자인 패턴
Hello, world! Refactoring.Guru는 리팩토링, 디자인 패턴, SOLID 원칙 및 기타 스마트 프로그래밍 주제에 대해 알아야 할 모든 것을 쉽게 찾을 수 있는 자원입니다. 이 사이트에서는 이러한 모든 주제가 어
refactoring.guru
근데 난 인스턴스부터.. 찾아봐야한다..
객체..같은거 아닌가?
클래스를 정의하고 어떤 객체를 생성하면 그 객체는 클래스의 인스턴스 이다.
하나의 클래스로 수많은 인스턴스를 생성할 수 있다
아항 그래서 싱글톤 패턴에서 하나의 인스턴스만 갖게하는게 의미가 있는거구낭
객체는 선언, 인스턴스는 실체화를 의미한다. 클래스의 타입으로 선언 되었을 때 객체라고 부르며, 그 객체가 메모리에 할당되어 실제 사용될 때는 인스턴스라고 부른다.
OOP에서 클래스는 일종의 설계도이다. 클래스를 정의하는 것 자체로는 할수 있는 것이 많지 않지만, 클래스를 사용해 구체적인 제품을 만드는 것이 인스턴스화다.
참조 링크
https://velog.io/@k7nsuy/%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4%EB%9E%80
'개발 공부 일지 > CS' 카테고리의 다른 글
Q. HTTP 와 HTTPS 차이 / HTTP 메소드 (0) | 2024.08.02 |
---|---|
[3.1] 운영체제와 컴퓨터 - [3.2] 메모리 (0) | 2024.08.02 |
[2.1] 네트워크의 기초 (1) | 2024.07.23 |
프로그래밍 패러다임 (0) | 2024.07.23 |
도서 / 면접을 위한 CS 전공지식 노트 (0) | 2024.07.18 |