Web/SrpingBoot

스프링 입문을 위한 자바 객체 지향의 원리와 이해 2

나는나는용 2023. 7. 19. 05:29
728x90

변수

변수 공간은 메서드 스택 프레임 내부에 차곡차곡 생성됨. 

변수 공간을 초기화해주지 않으면 쓰레기값을 가짐.

 

스태틱, 스택, 힙 영역 모두에 존재함.

  • 클래스멤버변수 : 스태틱 영역에서의 변수, JVM종료까지 스태틱 상태로 자리 잡음.
  • 지역변수 : 스택 영역에서의 변수
  • 객체 멤버 변수 : 힙 영역에서의 변수, 가비지컬렉터(GC : 힙 메모리 회수기)에 의해 객체와 함께 생을 마감.

외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나, 그 역은 가능하다.

[그림]

 

"메서드를 블랙박스화 한다" 

▶ 입력 값들(인자 리스트)과 반환값에 의해서만 메서드 사이에서 값이 전달될 뿐, 서로 내부의 지역 변수를 볼 수 없다.

 

메서드를 호출하면서 인자로 전달되는 것

변수 자체 ▶ NO

변수가 저장한 값(복제해서 전달 ; call by value) ▶ YES

 

+)

메서드 사이 값 전달/반환 은 메서드의 인자와 반환값만으로도 가능하다.

전역변수 방법도 있지만 가급적 사용하지 말것.

두 메서드 사이 값 전달 방법  메서드 사이 값 공유 방법
메서드 호출 시 메서드 인자 이용 메서드 종료 시 반환값 넘겨줌 전역 변수

지역 변수 : 스택 프레임에 종속적

전역 변수 = 공유변수: 스택 프레임에 독립적(여러 메서드들이 공유해서 사용)

▶다른 메서드에 의해 값 변경되기 쉬우므로 웬만하면 사용 X.

 

멀티스레드/멀티프로세스

멀티스레드

스택 영역을 스레드 개수만큼 분할해서 사용함

다른 스레드의 스택영역에는 접근하지 않음.

스태틱과 힙 영역을 공유함.

멀티프로세스 대비 메모리 사용량이 적음.

전역변수를 사용하면 스레드안전성이 깨진다. → 락(lock)을 걸어 보완 가능 → 이 방법은 멀티스레드의 장점을 버린 것과 마찬가지.

 

멀티프로세스

다수의 T메모리를 가짐

서로 참조하지 않음 → 메모리 침범 없음 → 메모리 안전하나, 메모리 사용량이 큼.

 

+) in Java 웹 프로그래밍 : 요청당 스레드(servlet,서블릿)이 요청당 프로세스(CGI)보다 효율적임.

 

핵심

Field = 필드 = 속성 = 프로퍼티 = property

(필드 : 객체변수/정적변수, 속성 : 필드를 외부에 노출시키는 메서드 라 하는 사람도 있다.)

 

Funcion = 함수 = 메서드 = Method = 기능 = 행위

 

스태틱 : 클래스의놀이

스택 : 메서드의 놀이터

힙 : 객체의 놀이터

 

728x90