[OOP] 자바의 절차적/구조적 프로그래밍

now_iz·2021년 5월 26일
0
post-thumbnail

자바의 절차적/구조적 프로그래밍


변수는 메모리에 저장된다

1) 지역 변수

  • 스택 프레임에 스택 프레임이 삭제될 때까지 존재
  • 서로 다른 스택 프레임이면 지역 변수를 참조할 수 없다.

    메서드는 고유 공간이며, 다른 메서드의 지역 변수에 접근하려면 지역 변수의 메모리 주소 값인 포인터를 알아야 하는데 자바에서는 포인터를 사용할 수 없으므로 값만 전달해야 한다. (Call by value)

2) 클래스 멤버 변수

  • 메소드 영역에 JVM 종료될 때까지 존재
  • 정적 메소드는 객체 존재 여부와 상관없이 사용할 수 있음
    • 유틸리티성 메서드 (ex. Math 클래스 내 메서드)
  • 전역 변수는 조심해서 써야 한다.
    • 가급적 '읽기 전용'으로 쓰자.
    • 모든 객체가 동일한 값은 가지는 것을 전역 변수로 쓰면 좋다. (ex. 고양이 클래스의 다리 개수)

3) 객체 멤버 변수

  • 영역에 GC가 삭제할 때까지 존재

번외

초기화 없이 선언만 했을 때, 지역 변수에는 쓰레기값이 할당되고, 클래스 및 객체 멤버 변수는 0, 0.0, false 등으로 초기화되는 이유는 무엇일까?
✏️ 클래스, 객체 멤버 변수는 공유 변수의 성격의 띄기 때문이다.



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

  • 메모리 안전성 : 멀티 스레드 < 멀티 프로세스
    • 다른 프로세스의 메모리 영역을 절대 침범할 수 없다.
  • 메모리 사용량 : 멀티 스레드 < 멀티 프로세스
    • 멀티 스레드는 메소드 영역(스태틱 영역), 힙 영역은 공유하므로 메모리를 적게 사용한다.
  • 요청 당 스레드 (Servlet), 요청 당 프로세스 (CGI)
profile
👀

0개의 댓글