coding/IT, CS

Side effect, Decoupling, 디자인 패턴

JIN_Coder 2022. 8. 10. 22:25

side effect

사전적 정의 : 부작용

 

프로그래밍의 side effect

사전적 정의와 다르게 프로그래밍의 사이드 이펙트는 꼭 부정적인 말은 아니다.

예상한 결과와 다르게 결과가 다르게 나타나는 현상을 말한다.

실행 도중 어떠한 객체를 접근해서 변화가 발생하는 행위

함수를 실행할 때 return 값과는 별개로 발생하는 프로그램 상태 변경

개발 영역에서는 버그라고 하기도 한다.

구현하고자 하는 형태의 기능이 동작이 되지 않고, 어떠한 다른 요인으로 인해서 동작을 못하거나 값이 다른 올바르게 나오지 않는 여러 가지 상황을 사이드 이펙트라고 한다.

 

빈 구문이 아니라면 반드시 하나의 사이드 이펙트를 가져야 한다.

빈 구문이 아닌데 사이드 이펙트가 일어나지 않는 구문은 일반적으로 프로그래밍 에러를 가리킨다.

 

 

side effect 예시

let arr = "Hello Universe"

// 사이드 이팩트 1번 발생
// arr 변수에 "Hello Universe" 문자열이 할당되었기 때문에
let arr = "Hello Universe"
anoterArr = arr

// 사이드 이팩트 2번 발생
// arr에 할당 1번, anotherArr에 할당 1번 => 총 2번
let arr 

// 사이드 이팩트 0번 발생(발생X)
// 할당을 해주지 않았기 때문

사이드 이팩트는 흔히 말해 버그라고 하지만, 큰 문제는 아니다.

하지만, 의도치 않은 결과 이기 때문에 사이트 이팩트가 많이 발생할수록 버그가 많다는 것이고, 이는 디버깅 과정이 까다로워질 수 있다.

 

 

순수 함수

같은 입력 값이라면, 항상 같은 결과 값을 반환하는 함수

사이드 이팩트를 가지지 않는다.

참조 투명성(프로그램에 영향 없이 함수 호출을 그것에 대한 결과 값으로 바꿀 수 있는 것)을 가지고 있다.

// 참조 투명성

const double = x => x * 2;
double(5); // 10으로 대체 가능

 

 

side effect를 줄이는 방법

순수 함수를 사용한다.

독립성, 약한 의존성, 명시적, 접근 제한자, 기능의 분리 등으로 안정성을 확보할 수 있다.

 

 

함수형 프로그래밍이란?

https://medium.com/javascript-scene/master-the-javascript-interview-what-is-functional-programming-7f218c68b3a0 글의 번역. - Eric Elliott 번역하면 …

godsenal.com

 

Side Effect

Side Effect 의 뜻은 무엇인가?

velog.io

 

 

 

디자인 패턴

개발을 하면서 발생하는 다양한 이슈들을 해결하는데 도움을 주는 일종의 증명된 기술들이다.

오류가 발생했을 때 어떠한 패턴을 사용하면 좋을 것이라는 일종의 방향성을 제시해준다.

왼쪽부터 생성자 디자인 패턴, 구조적 설계 패턴, 행위 디자인 패턴

생성자 디자인 패턴

생성에 관련된 디자인 패턴

ex) 팩토리, 빌더, 공개 생성자, 싱글톤, 모듈 와이어링, DI(종속성 주입)

- 공개 생성자 패턴 : 생서시에만 동작을 정의하며 수정이 불가능한 객체를 생성(Promise)

- 모듈 와이어링 : 모든 애플리케이션은 여러 컴포넌트를 연결한 결과

 

구조적 설계 패턴

엔티티 간의 관계를 다루는 기술

- 프록시 : 다른 객체에 대한 엑서스를 제어할 수 있는 패턴(내장 프록시 객체)

- 데코레이터 : 기존 객체의 동작을 동적으로 증강시키는 패턴

- 어댑터 : 다른 인터페이스를 사용해 객체의 기능을 엑서스 할 수 있는 패턴

 

행위 디자인 패턴

객체를 어떻게 확장 가능하고, 모듈화 되고, 재사용 가능하게 결합하는 방법과 상호작용 하는 방법

- 스토리지(Strategy) 패턴 : 특전 요구상에 맞게 컴포넌트의 일부를 변경하는데 도움이 되는 정략

- 상태(State) 패턴 : 상태에 따라 컴포넌트의 동작을 변경시킬 수 있음

- 템플릿(Template) 패턴 : 새로운 것을 정의하기 위해 컴포넌트의 구조를 재사용할 수 있는 템플릿

- 반복자(Iterator) 패턴 : 컬렉션을 반복하기 위한 공통의 인터페이스를 제공

- 미들웨어 패턴 : 모듈식 처리 정차를 정의할 수 있는 패턴

- 커맨드 패턴 : 루틴 실행에 필요한 정보를 구체화하면 쉽게 전송, 저장 및 처리할 수 있는 패턴

 

 

 

 

<Node.js 디자인패턴 바이블> 후기

Node.js에 관련된 여러 디자인 패턴을 정리 해놓은 좋은 책입니다. Node.js 개발자라면 꼭 읽어보세요! 추천합니다 구매 링크 각 챕터에 어떤 내용이 있는지, 어떤 부분이 인상 깊었는지 소개하겠습

devkly.com

 

Javascript Pattern 요약 - 디자인 패턴

 

joshua1988.github.io

 

[JS/Pattern] 대표적인 자바스크립트, 디자인 패턴 정리 (Javascript, Design Pattern)

디자인 패턴이란 무엇일까? 소프트웨어 개발을 하면서 발생하는 다양한 이슈들을 해결하는데 도움을 주는 일종의 증명된 기술들이다. 이미 많은 개발자들이 자바스크립트를 개발하면서 겪은

im-developer.tistory.com

 

'coding > IT, CS' 카테고리의 다른 글

http 상태코드  (0) 2022.08.31
http https  (0) 2022.08.19
테스트 코드 종류와 테스트 피라미드  (0) 2022.08.09
마이크로 서비스 아키텍처 도메인  (0) 2022.08.07
Restful API  (0) 2022.07.31