[Java와 Spring] 메모리 구조와 객체지향

개발log·2024년 3월 15일

자바와 스프링

목록 보기
1/10
post-thumbnail

➡️ 기계어에서 프로그래밍 언어로의 전환

기계어 - 0과 1로 이루어진 언어

기계어의 등장으로 빠르고 정확한 계산을 할 수 있게 되었다.

어셈블리어 - 인간 지향적 프로그래밍의 시작

"기계어의 명령들을 일상 용어로 표현하고 이걸 기계가 알 수 있는 기계어로 표현하게 되면 어떨까?"

어셈블리(Assembly Language)

니모닉(Mnemonic)과 기계어의 일대일 매칭 코드표

어셈블러(Assembler)

어셈블리어를 기계로 번역해주는 소프트웨어
※ CPU마다 각자의 어셈블리어가 다르기 때문

C언어 - 싱글 소스의 등장

기계어와 1:1매칭이 아닌 m:n 매칭이 가능해졌다.

  • 컴파일러로 해당 운영체제용 기계어를 생성(기종별 컴파일러 필요)

⭐ 자바

  • 단 한번의 컴파일로 이식성을 확보하였다.
  • 기종의 갯수와 상관 없이 단 하나의 JVM용 기계어 생성
    ※ 기종별 최초 JRE 세팅 필요

➡️ 자바와 절차적/구조적 프로그래밍

현실 시계가상 세계(자바월드) 가상 세계(자바월드)
소프트웨어 개발 도구JDK - 자바 개발 도구
운영체제JRE - 자바 실행 환경
하드웨어JVM - 자바 가상 기계

메모리를 사용하는 방식

  • 스태틱: 클래스
  • 스택: 메서드
  • 힙: 객체, 인스턴스

변수와 메모리

main() 메서드가 실행되기 전 JVM에서 수행하는 전처리 작업들

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

예제

public class Start 2 {
  public static void main(String[] args) {
    int i;
    i = 10;
  
    double d = 20.0;
  }
}

  • 기본형 타입 변수의 값은 Stack 영역에 저장
  • 여는 중괄호 '{'를 만날 때 마다 스택 프레임이 하나씩 생기고, 닫는 중괄호 '}'를 만나게 되면 스택 프레임이 사라진다.
  • if문, 반복문, 예외처리를 위한 try문 등도 모두 스택프레임이 생긴다

블록 스택 프레임

public class Start3 {
  public static void main(String[] args) {
    int i = 10;
    int k = 20;
    
    if(i == 10) {
      int m = k + 5;
      k = m;
    } else {
      int p = k + 10;
      k = p;
    }
    
    // k = m + p;
  }
}

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

  • 멀티 스레드(Multi Thread): 스택 영역을 스레드 개수만큼 분할해서 사용
  • 멀티 프로세스(Multi Process): 다수의 데이터 저장 영역을 갖는 구조

➡️ 자바와 객체 지향

객체 지향의 4대 특성

  • 캡 - 캡슐화(Enapsulation): 정보 은닉(information hiding)
  • 상 - 상속(extends): 재사용
  • 추 - 추상화(Abstraction): 모델링
  • 다 - 다형성(Polymorphism): 사용 편의

상속 - 재사용+확장

  • 확장, 슈퍼클래스 - 서브 클래스(상위 클래스 - 하위클래스)

상속

  • 하위 클래스 is a kind of 상위 클래스
  • 해석: 하위 클래스는 상위 클래스의 한 분류다.
  • ex) 고래는 동물의 한 분류다.

인터페이스

  • 구현 클래스는 is able to 인터페이스
  • 해석: 구현 클래스는 인터페이스할 수 있다.
  • ex) 고래는 헤엄칠 수 있다.

다형성 - 사용편의성

  • 오버라이딩(overriding): 같은 메서드 이름, 인자 목록으로 상위 클래스의 메서드를 재정의
  • 오버로딩(overloading): 같은 메서드 이름, 다른 인자 목록으로 다수의 메서드를 중복 정의

출처 : 집적 구매한 '스프링 입문을 위한 자바 객체지향의 원리와 이해' 서적

profile
나의 개발 저장소

0개의 댓글