본문 바로가기

BOOK Review

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

1장 사람을 사랑한 기술

  •  C언어 : One Source Multi Object Use Anywhere
    • One Source : 하나의 C 소스 파일만 작성
    • Multi Object : 기종마다 하나씩 기계어 목적 파일을 생성
    • Use Anywhere : 모든 컴퓨터에서 실행 가능
    • 구조적 프로그래밍

즉, 운영체제가 하드웨어의 특성을 추상화하고 컴파일러는 운영체제별(기종에 맞게 소스를 변경) 로 만들어져 공급

-> 운영체제별 소스 수정 과정이 필요

 

  • Java : Write Once Use Anywhere
    • Write Once : One Source
    • (One Object)
    • Use Anywhere

자바는 JVM(Java Virtual Machine), 즉 가상의 컴퓨터를 물리적 컴퓨터의 메모리 안에 하나 더 구축하여 어떤 운영체제든 하나의 오브젝트 파일만 존재하게 됨

 

  • CBD와 SOA
    • CBD : Component Based Development, 컴포넌트 기반 개발
      • 애플리케이션을 의미 있는 단위로 구분하고 그 단위들을 결합해 제품을 만듬
    • SOA : Service Oriented Architecture, 서비스 중심 구조
      • 개발자 입장에서의 개발이 아니라 실제 현실의 업무를 기준으로 개발하자는 사상

 

2장 자바와 절차적 / 구조적 프로그래밍

  • JDK - 자바 개발 도구 (JVM용 소프트웨어 개발 도구)
  • JRE - 자바 실행 환경 (JVM용 OS)
  • JVM - 자바 가상 기계 (가상의 컴퓨터)

JVM > JRE > JDK

 

 

  • 구조적(절차적) 프로그래밍과 객체지향 프로그래밍의 차이
    • 구조적 프로그래밍
      • "함수" 중심
      • 중복 코드를 한 곳에 모아서 관리
      • 논리를 함수 단위로 분리하여 이해하기 쉬운 코드 작성
      • 분할 정복 개념
    • 객체지향 프로그래밍
      • "객체(Object)" 중심
      •  객체 :  데이터(속성, 필드)와 그 데이터를 처리하는 메서드(함수)를 함께 포함하는 독립적인 단위
      • 문제를 여러 객체로 나누어 해결하며, 객체들 간의 상호작용을 통해 프로그램이 동작
    •  

 

** 함수 vs 메서드

사실 같은 용어지만, 구조적 프로그래밍에서 사용하는 '함수'라는 개념은 클래스나 객체와 아무 관계가 없지만 객체지향에서 사용하는 '메서드'의 개념은 반드시 클래스 정의 내부에 존재해야 함

 

 

 

  • 자바 메모리 구조


 

  • static 영역 - '클래스들의 놀이터'
    • 프로그램이 실행되면서 필요로 하는 메타데이터를 저장하는 곳
    • JVM이 실행되면서 생기는 공간
    • Class 정보, 전역변수 정보, Static 변수 정보가 저장되는 공간
      • 전역 변수를 사용하면 클래스 정보 내부에 변수 공간 할당
      • Q. 정적 속성에 대한 추가 설명
      • 더보기
        정적 속성 : 해당 클래스의 모든 객체가 같은 값을 가질 때 사용
        - 정적 메서드 : 객체 존재 여부에 관계없이 사용. 객체(힙)가 아닌 클래스(스태틱 영역)에 속함
        주로 유틸리티성 메서드를 정적으로 구현
    • Runtime Constant Pool - '상수'정보가 저장되는 공간
    • 모든 스레드에서 정보가 공유됨
    • 클래스 언로드 : 특정 클래스가 더 이상 사용되지 않거나, 해당 클래스의 인스턴스가 존재하지 않으며 GC의 대상이 되었을때 발생 (주로 종료될때까지 메모리에 유지)
  • stack 영역 - '메서드들의 놀이터'
    • 스택 프레임으로 관리 (한 메서드 당 하나의 스택 프레임)
      • 스택 프레임 내에서도 여는 중괄호를 만날 때마다 스택 프레임이 하나씩 생김 (클래스 정의 부분 제외)
      • 외부 스택 프레임에서 내부 스택 프레임의 변수에 접근하는 것은 불가능하나 그 역은 가능함
        • Q. 스택 프레임 내부에 스택 프레임 생성 가능?
        • 더보기
          A. if문을 만나게 되면 메서드 스택 프레임 내에 if문 스택 프레임 생성
          -> 닫는 중괄호를 만나면 if블록 스택 프레임은 영역에서 사라지고, 스택 프레임 내의 지역 변수에 값이 할당됨
      • 스택 프레임끼리는 서로 접근하지 못함
        • 반환값에 의해서만 메서드 사이에서 값이 전달될 뿐 서로 내부의 지역 변수를 볼 수 없음
        • 메서드는 고유의 공간
        • 포인터가 없음 -> 호출하는 메서드 내부의 지역 변수를 호출 당하는 쪽에서 제어하려면 포인터 개념이 필요
    • 지역변수, 메서드의 매개변수와 같이 잠시 사용되고 없어지는 데이터가 저장되는 공간
    • LIFO 구조
    • 지역변수이지만 참조형이라면 Heap에 저장된 데이터의 주소값을 Stack에 저장
    • 스레드마다 하나씩 존재
  • heap 영역 - '객체의 놀이터'
    • new 예약어로 생성된 객체 (Reference Type) 멤버 변수 및 배열이 저장되는 공간
    • GC가 처리하지 않는 한 소멸되지 않음
      • GC에 의해 자동으로 이루어짐
    • 모든 스레드에서 정보가 공유됨

 

  • 멀티 스레드 vs 멀티 프로세스
    • 멀티 프로세스 : 다수의 T 메모리를 갖음
    • 멀티 스레드 : 스택 영역을 스레드 개수만큼 분할해서 사용 (힙영역, 스태틱 영역은 공유)