Coding/JAVA

의존관계(Dependency)

Soocong 2022. 4. 4. 11:09

예제 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로 들어감.

 

 

 

클래스 다이어그램