의존관계(Dependency)
예제 1)
RAM 구조
heap | stack | ||
new AA()... | 0x100 | a | 0x100 |
b | 0x100 | ||
c | 0x100 | ||
d | 0x100 | ||
new AA()... | 0x200 | x | 0x200 |
y | 0x200 | ||
a, b, c, d 새로 할당 받지 않고 주소값을 참조한다.
new라는 키워드로 객체를 발생하면 새로운 공간을 할당 받는다.
b.func() 이 실행되는 이유는 a=null; 로 해줘도 b는 주소값을 참조하기때문이다.
RAM
heap | stack | ||
a | null | ||
b | null | ||
c | null | ||
d | null | ||
new AA()... | 0x200 | x | 0x200 |
y | 0x200 | ||
메모리는 constant, heap, stack 영역이 존재.
constanct : static. 종료까지 살아있다.
stack : 블럭단위로 존재한다.
heap : new. 가비지 컬렉터에 의해서 지워질때까지 살아있다
AA a = new AA();
왼쪽은 스택영역 오른쪽은 힙영역.
new 라는 키워드로 들어가면 힙영역.
그러나 위의 함수처럼 사용하는 경우는 거의 없고 함수단위로 파라미터를 객체로 던져주는 경우가 더 많다.
다음 예제를 살펴보자.
예제 2)
heap | stack | ||
new BB() | 0x100 | b | 0x100 |
new CC() | 0x200 | c | 0x200 |
heap | stack | ||
new BB | 0x100 | b | null |
new CC | 0x200 | c | 0x200 |
main 함수에서 b = null;
heap | stack | ||
b | null | ||
new CC() | 0x200 | c | 0x200 |
CC클래스의 함수 fun(BB b) 에서 b = null; 을 해줘야 비로서 heap에서 지워진다. (by 가비지콜렉터)
아래의 경우를 보자.
객체를 지역변수 또는 매개변수로 사용 => Dependency(의존관계)
fun(BB b) : 객체를 파라미터로 쓴것
sub() : 객체를 함수안에서 지역변수처럼 사용
<< 클래스 다이어그램 >>
Dependency(의존관계)
- 단방향이며 함수 안에 객체를 Parameter, 생성, 반환 사용
예제 3)
실행화면
디버깅화면 / s = null; 실행시 null값이 value로 들어감.
클래스 다이어그램