taeWoo
552
2019-01-26 17:15:42 작성 2019-01-26 17:16:01 수정됨
2
305

spring Component vs new class() 메모리 장점


문득 궁금한 생각이 드네요.

spring Component로 class를 선언하면 싱글톤으로 DI가 되죠.

만들어진 Component를 사용할 때, myComponent.func() 형태로 사용하는데, 이 때 호출되는 func()의 변수는 지역변수이니, func()를 호출한 스레드의 스택 부분에 지역변수가 자리잡고, 그 만큼의 메모리를 사용합니다.

class myClass {

void func(String b, String c){ 

String a;

}}


그런데 가만히 생각해보니, new myClass()로 생성한다고 했을 때, 만약 myClass가 아래처럼 생겼다면(지역변수가 없다면),

myComponent.func()나 new myClass()나 메모리를 똑같이 먹는것 아닌가요??

class myClass {

String a;

void func(String b, String c){ 

}}


그럼 결국 class에 지역변수를 가진 함수가 몇개 없다면 굳이  Component로 만들 필요가 없는 것 맞나요??

객체에 변수가 없으면 크기가 0 이죠???

0
0
  • 답변 2

  • 제르맹
    312
    2019-01-26 17:55:11

    스프링을 사용한 객체생성은 메모리 절약이라기보단 객체의 주소를 찾는 속도의 차이로 알고 있습니다

    Component로 선언하면 객체는 스프링컨테이너에 생성되고 이는 객체가 메모리상의 어느쯤에 생성될거라는 단서가 되고 이는 다시 그 객체를 찾을때 스프링 컨테이너에서 찾으면 된다는 이야기입니다.

    그러나 new로 생성된 객체의 메모리상 위치는 그야말로 랜덤입니다. 그리고 매번 생성시마다 그 위치는 다를 것입니다. 그럼 저장위치를 찾아가는데 더 많은 자원이 필요할것입니다

    0
  • LichKing
    14k
    2019-01-26 19:43:36

    본문이랑 댓글 둘다 잘 이해가 안가네요.


    1. 본문

    지역변수는 메서드가 호출할때마다 생성됩니다. 객체를 1개 만들어서 10번 호출하든 10개를 만들어서 1번씩 10번 호출하든 지역변수는 10번 생성됩니다.


    2. 댓글

    객체를 생성할때 레퍼런스를 참조하게되는데 저장위치를 찾아가는 행위가 왜 필요한가요?

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.