[Side Effect]-프로그래밍 관점

JP·2023년 1월 30일
0

프로그래밍 관점에서의 Side Effect

Side effect === 부작용
부작용 === 부수효과
(부수효과는 주요한 효과에 따라서 발생하는 부수적인 효과라는 의미를 가지고 있다. )

감기약으로 비유를 하자면, 감기약의 주된 효과는 감기를 낫게 하는것이고, 부작용(부수효과) 로는 졸음이 오는 것이다.
이러한 상황에서 부작용이라는 단어를 많이 접하기에 흔히 부작용을 부정적인 것으로 생각하기 쉽지만 부작용이라는 의미 자체는 사실 부정적인 의미를 내포 하지 않는다.단지 주된 효과의 곁다리로 부수적으로 발생하는 효과를 의미 하는 단어일뿐, 부작용이 부정적인 결과로 이어지는 경우가 대다수이기 때문에, 부정적인 뉘앙스로 인식 하는것.

 그렇다면 프로그래밍 에서의 부작용이란 무엇일까?
  • 코드가 의도한 주된 효과 외에 추가적으로 발생하는 효과를 의미한다. *특히, 프로그램을 구성하는 가장 작은 단위인 '함수' 에서 자주 사용 되는 용어이다.

    ** 함수의 본질적인 역할, 주된 효과에 대해 생각해보면, input 을 받아서 output 을 산출 하는것 이 본질적인 역할이다. input => output

  • 함수의 부작용 (side effect) 은 무엇일까?
    ** input을 받아서 output 을 산출하는것 이외의 모든 행위

위 함수는 x 라는 input 을 받아서 x + 1 을 return 하는 함수 이다. 이 함수는 input 을 받아서 output 을 내는 행위 외에는 다른 행위를 하지 않는다. 이 말은 곧 side effect 가 없다 라고 할 수 있다. 이렇게 side effect가 없는 함수를 '순수 함수' 라고 지칭 한다.

외부의 상태를 읽어 오기 ⬇️

위 함수는 x 라는 input 을 받아서 x + num 을 return 하는 함수 이다. 결론 부터 말하면 이 함수는 side effect를 가지고 있다.
이유는 이 함수는 함수 내부의 값이 아닌 외부의 값인 'num' 을 읽어오기 때문이다. 이처럼 함수가 함수 내부의 값을 제외한, 나머지 값들을 읽어 올때 "side effect"가 있다 라고 표현 할 수 있다.

외부의 상태를 변경 시키기 ⬇️

위 함수는 x 라는 input 을 받아서 x + 1 로 변경 하고 있다. 이 함수도 마찬가지로 side effect 를 가지고 있다. 왜냐하면 함수 내부의 값이 아닌 외부의 값인 num 을 읽어오고 또 이 num 을 변경 시키기 때문이다.
함수가 함수 외부의 값을 변경 할떄 "side effect" 가 있다 라고 표현 할 수 있다.

그렇다면 아래 함수들 에는 side effect 가 있을까?

그렇다 위 함수들 에는 side effect 가 있다.
흔히 외부의 값이라고 하면, 외부에 있는 "변수" 들만을 생각 하기 쉬운데 이처럼 DOM 을 조작하고 console 패널의 문자를 출력하는 행위들 또한, 함수 외부에 존재하는 DOM 그리고 console 의 상태를 변경 시키는 것이기 때문에, 두 함수 모두 side effect가 있는 함수다 라고 판단 할 수 있다.

정리

프로그래밍에서 side effect 란? 
1. 함수에서 함수 외부의 값을 읽어오는 행위 
2. 함수에서 함수 외부의 값을 변경하는 행위

그러면 프로그래밍에서 side effect 란 기피해야 하는 대상일까?

결론은 그렇다, 기피해야 하는 대상이다.
이유는 side effect 가 있는 함수는 동작 결과를 예측하기 쉽지 않기 때문이다.

예를 들어,

	const sum = (x) => x + 1;

위 함수에서 1 이라는 인자를 넣었을때 return 값으로 2라는 숫자가 산출 될거란건 누구도 예측 할 수 있을 것이다.

하지만

	const sum = (x) => x + num;

위 함수에서는 1 이라는 인자를 넣었을때, 어떤 값이 return 될지는 제대로 예측할 수 없다. 이유는 함수 외부에서 읽어오고 있는 num 이라는 값이, 어떻게 변결될지 모르기 때문이다.

이처럼 함수의 결과를 예측 할 수 없으며, 프로그램의 동작을 예측하기 힘들어지고, 유지보수에 어려움을 야기한다.하지만 프로그래밍에서 외부의 값을 읽어 오거나, 변경하는 행위를 완전히 배제 할수는 없다. 왜냐하면 어떤 프로그램이 외불고 그 어떤 값도 출력하지 않는다면 그프로그램은 아무런 의미가 없기 때문이다.
그리고 데이터를 저장해 두고 저장해둔 값을 읽어 오는 행위는 필수 불가결한 요소 이기 때문이다.

따라서, 개발자들은 Side Effect 를 최소화 하면서 프로그램을 설계하되, side effect 가 필요한 상황에서는 반드시 통제 가능하게 만들어서 side effect 가 프로그램의 유지보수에 악영향을 주지 않도록 신경 써야만 한다.

[React] side effect 🔽
https://velog.io/@jhp4986/React-side-effect

profile
🐰와 🐢에 🐢

0개의 댓글