call by value and call by reference

39
Call by Value & Call by Reference @sberryyogurt

Upload: minji-kim

Post on 08-Aug-2015

143 views

Category:

Software


0 download

TRANSCRIPT

Call by Value & Call by Reference

@sberryyogurt

Call by Value & Call by Reference의 차이점

B

Main

A B A

Value

5 7

변수 이름

함수 이름

대입할 상수 값

먼저, 도형의 의미 파악

두 방법 모두 함수에게 인자를 전달한다는 것은 같습니다.

B

Main

A

B A B A

Value Ref.

B

Main

A

B A B A

Value Ref.

다만, 방법에서 차이가 있습니다.

Call by Value의 경우

B

Main

A B A

Value

값을 복사하여 인자로 넘깁니다.

5 7

값 대입

Call by Value의 경우

7

Main

5 B

Value

값을 복사하여 인자로 넘깁니다.

A

Call by Value의 경우

7

Main

5 B

Value

값을 복사하여 인자로 넘깁니다.

A

값 복사

Call by Value의 경우

7

Main

5 7

Value

값을 복사하여 인자로 넘깁니다.

5

Call by Value의 경우

7

Main

5 7

Value

값을 복사하여 인자로 넘깁니다.

5

Call by Value의 경우

7

Main

5 7

Value

값을 복사하여 인자로 넘깁니다.

5

값만 그대로 넘어갔을 뿐

두 함수의 인자 값은 별개

Call by Value의 경우

7

Main

5 7

Value

값을 복사하여 인자로 넘깁니다.

10

Value의 A값을 바꾸어도

Main의 A값은 변화가 없다

Call by Value의 경우

7

Main

5 7

Value

값을 복사하여 인자로 넘깁니다.

5

주소 값을 보면

다르다는 것을 알 수 있다.

Call by Reference의 경우

B

Main

A B A

Ref.

주소 값을 넘깁니다.

5 7

값 대입

7

Main

5 B A

Ref.

Call by Reference의 경우 주소 값을 넘깁니다.

7

Main

5 7 5

Ref.

Call by Reference의 경우 주소 값을 넘깁니다.

7

Main

5 7 5

Ref.

Call by Reference의 경우 주소 값을 넘깁니다.

이렇게 할 수도 있음

7

Main

5 7 5

Ref.

Call by Reference의 경우 주소 값을 넘깁니다.

결과는 동일하다.

7

Main

5 7 5

Ref.

Call by Reference의 경우 주소 값을 넘깁니다.

주소 값을 보면

같다는 것을 알 수 있다.

7

Main

5 7 10

Ref.

Call by Reference의 경우 주소 값을 넘깁니다.

그렇기 때문에

7

Main

10 7 10

Ref.

Call by Reference의 경우 주소 값을 넘깁니다.

이런 식으로…

이렇게 두 가지 방법이 있는 이유는?

가장 널리 쓰이는 예가 Swap 입니다.

Swap을 하기 위해 다음과 같이 함수를 작성합니다.

되는 것 같아 보입니다…

이렇게 해보면 어떨까요?

After의 값이 변화가 없습니다.

Swap을 하기 위해 이번엔 Call by Reference로 해봅니다.

제대로 되는군요.

Call by Value의 한계

호출 된 함수에서 값을 변경하더라도 호출 한 쪽에선 변화가 없습니다.

Call by Value의 한계

그래서 Return문을 사용하죠

호출 된 함수에서 값을 변경하더라도 호출 한 쪽에선 변화가 없습니다.

Call by Value의 한계

Call by Value의 한계

두 가지 이상을 반환하고 싶다면 ㅠㅠ

호출 받은 함수에서 원본 인자 값을 건드려야 한다면…

Call by Reference 를 사용

Call by Reference 를 사용

원본 값이 변경될 위험성이 존재

Call by Value 를 사용

실제 데이터 유지 가능

어떤 것이 더 좋고, 안 좋고의 구분은 의미가 없다.

아무튼… 그렇다고 합니다.

@sberryyogurt