java

자바 객체 지향의 원리와 이해_Chapter02_자바와 절차적/ 구조적 프로그래밍

강용민 2023. 3. 17. 22:27

자바는 객체 지향 프로그래밍을 기반으로 하는 프로그래밍 언어이다. 객체 지향 프로그래밍은 "객체 지향"과 "프로그래밍"을 결합한 것으로, 이번 챕터에서는 자바 프로그래밍 언어를 살펴보게 된다.

 

자바 프로그램의 개발과 구동

자바는 "Write Once Run Anywhere(WORA)"라는 특징을 가지고 있어, JDK(Java Development Tools)와 JRE(Java Runtime Environment) 그리고 JVM(Java Virtual Machine) 등의 프로그램이 필요하다.

  • JDK : JVM용 소프트웨어 개발 도구
  • JRE : JVM용 OS
  • JVM : 가상의 컴퓨터

 

자바에 존재하는 절차적/구조적 프로그래밍의 유산

객체 지향 프로그래밍은 절차적/구조적 프로그래밍의 발전된 형태이다. 절차적/구조적 프로그래밍은 "goto"를 사용하지 않도록 권고하는 것으로, 프로그램의 실행 순서를 이해하기 어려워질 가능성이 있기 때문이다. 반면 구조적 프로그래밍은 함수를 사용하도록 권고한다. 함수를 사용하면 중복 코드를 모아서 관리할 수 있으며, 논리를 함수 단위로 분리하여 이해하기 쉬운 코드를 작성할 수 있다.

 

다시 보는 main() 메서드 : 메서드 스택 프레임

프로그램이 메모리는 사용하는 방식은 다음과 같이 크게 나눌 수 있다.

  • 코드 실행 영역
  • 데이터 저장영역
    • 스태틱(Static) 영역 : 클래스의 놀이터
    • 스택(Stack) 영역 : 메서드의 놀이터
    • 힙(Heap) 영역 : 객체의 놀이터

main() 메서드는 프로그램이 실행되는 시작점이다. JRE는 프로그램 안에 main() 메서드가 있는 지 확인 후 JVM을 부팅한다. JVM은 부팅 후 다음과 같은 전처리 과정을 거친다.

  • java.lang 패키지를 스태틱 영역에 배치한다.
  • import된 패키지를 스태틱 영역에 배치한다.
  • 프로그램 상의 모든 클래스를 스태틱 영역에 배치한다.

 

지역 변수와 메모리

변수는 데이터 저장 영역 3군데 모두 존재할 수 있다. 그런데 세 군데 각각에 있는 변수는 각기 다른 목적을 가진다. 그리고 각각의 이름도 지역 변수, 클래스 멤버 변수, 객체 멤버 변수로 다르다.

  • 클래스 멤버 변수 : 스태틱 영역에서 JVM이 종료될 때까지 고정된(static) 상태로 있는다.
  • 지역 변수 : 스택 영역에서, 그것도 스택 프레임 안에서 있는다. 따라서 스택 프레임(메서드)이 사라지면 함께 사라진다.
  • 객체 멤버 변수 : 힙 영역에서 있으며, 객체와 함께 가비지 컬렉터라 하는 힘 메모리 회수기에 의해 사라진다.

 

전역 변수와 메모리

결과부터 얘기하자면 전역 변수는 읽기 전용으로 값을 공유해서 전역 상수로 사용할 때 외에는 피할 수 있으면 피하는게 좋다. 전역 변수는 말 그대로 전역에서 해당 변수를 수정할 수 있다. 여러 메서드에서 전역 변수의 값을 변경하기 시작하면 추적하지 않는 이상 전역 변수에 저장돼 있는 값을 파악하기 쉽지 않기 때문이다. 물론 lock을 거는 방법도 있지만 뒤에서 나올 멀티 스레드의 장점도 함께 사라진다.

 

멀티 스레드/ 멀티 프로세스의 이해

멀티 프로세스는 각 프로세스마다 각자의 T 메모리가 있고 각자 고유의 공간이므로 서로 참조할 수 없다. 그에 반해 멀티 스레드는 하나의 T 메모리만 사용하는데 스택 영역만 분할해서 사용하는 구조다. 즉, 멀티 프로세스 대비 메모리를 적게 사용할 수 있는 구조다.