• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

참조값(사이드 이펙트) 질문

24.04.30 18:45 작성 24.04.30 18:46 수정 조회수 112

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
안녕하세요.

영한님의 설명을 보면 자바 문법상 Address b = a 가 만들어저도 문제가 없다고 하였고,

참조값을 공유해서 사이드 이펙트를 만드는 경우가 있다고 말하였습니다.

여기서 갑자기 궁금해지네요. 여태 까지의 코드를 보면, 사이드 이펙트를 만드는 경우가 없었던 걸로 기억하는데..

어는 경우 에서야, 사이드 이펙트를 활용하는지.

예시를 알켜 주실수 있으실까요?

답변 부탁 드립니다.

답변 1

답변을 작성해보세요.

1

y2gcoder님의 프로필

y2gcoder

2024.04.30

안녕하세요. 생각하는자님, 공식 서포터즈 y2gcoder입니다.

강의에서 말씀해주셨던 것과 같이 어떤 객체를 다른 객체들이 공유할 필요가 있을 때 이러한 사이드 이펙트를 이용할 수 있을 것 같습니다 🙂 가령 가족이 이사갈 때 해당 가족 구성원들의 주소를 모두 바꿔줘야 하는 요구사항에서도 유용할 것이고(영한님께서 말씀하신 것과 같이), 예를 들어 쓰레드 간에 공유하는 자원이 있다면, 해당 자원을 어떤 쓰레드에서 수정하면 모든 쓰레드에서 해당 자원의 수정된 값이 적용되기 때문에 쓰레드 간에 공통으로 적용해야 할 설정값을 변경하는 등의 경우에도 사이드 이펙트를 활용할 수 있을 것 같습니다 🙂

감사합니다.

예시를 잘 설명해주셔서, 감사합니다.

y2gcoder님 궁금중이 하나 더 생겨서 질문을 남깁니다. MethodChaining(메서드 체이닝) 기법을 공부 하는데,

영한님의 강의 를 보면서valueAdder 클래스 를 만들고,

adder.add() 할때 this를 써서 자기의 주소값을 반환하서 만들었는데

코드를 치면서 사이드 이펙트가 생각이 낫습니다.(MethodChainingMain2 예제를 치면서)

이것도 사이드 이펙트(좋은 의미)라고 생각해도 될까요?

답변 부탁 드립니다.

y2gcoder님의 프로필

y2gcoder

2024.05.06

사이드 이펙트를 “원래 의도하지

않았던 결과가 나오는 것”으로 의미했을 때, 예제를 보고 어떠한 점에서 사이드 이펙트라고 생각하셨는지 말씀해주시면 답변 드리는 데 도움이

될 것 같습니다 :)

y2gcoder님 죄송합니다. 좀 설명을 잘못했네요.

사이드 이펙트가 값을 공유해서 발생하는 문제라고 했습니다.

근데 메서드 체이닝 기법이? 자기자신(this)를 통해서 반환 값을 넣는 방식을 보고

ValueAdder adder = new ValueAdder();
ValueAdder adder1 = adder.add(1);
ValueAdder adder2 = adder1.add(2);
ValueAdder adder3 = adder2.add(3);
ValueAdder adder = new ValueAdder();
// x001.add(1).add(2).add(3).getValue();    -> value = 1
// x001.add(2).add(3).getValue();           -> value = 3
// x001.add(3).getValue();                  -> value = 6
// x001.getValue();                         -> value 값(6) 을 을 리턴
int result = adder.add(1).add(2).add(3).getValue();

사이드 이펙트 <--> 메서드 체이닝 기법

이렇게 대조 되는 것이라고 생각이 되었습니다.(이것도 좀 사이드 이펙트 같은데 이런 생각이요)

그래서 댓글 중에 사이드 이펙트(좋은 의미)라고 라는 했는데.

저가 좀 설명을 잘못 하였네요.

좀 논리적 으로나 말이 이상하다(개 소리)다 싶으면 바로 지적해주시면 감사하겠습니다