Starbucks Caramel Frappuccino
본문 바로가기
  • 그래 그렇게 조금씩
Computer Science

메모리? Memory

by Toughie 2023. 3. 13.

간략하게 스위프트를 정리, 요약하는 카테고리 입니다 :)

모든 문법을 다 정리하기는 어렵고..
핵심적이고 어려운 개념들을 위주로 공부하며 작성할 거 같다.

메모리
가 뭐지?

메모리는 주 기억장치(Ram)라고도 한다.

컴퓨터에서 데이터를 저장하는 것은 주 기억장치, 보조기억장치 2가지가 담당하는데.
메모리는 '주'기억장치이다. main!

 

스마트폰으로 생각해 보면 아이폰 램이 몇 기가고~ 용량이 얼마고~ 이런 얘기를 들어봤을 것이다.
(iPhone14Pro Silver 6gb 256gb _ 램 6기가, 롬 256기가)

 

여기서 말하는 램이 메모리이고 용량은 보조기억장치인 롬(하드디스크)이다.

램_ 메모리는 어플이 실행 중일 때 (프로세스) 중요한 역할을 한다.

메모리는 스마트폰이 켜져 있을 때 내가 실행하는 프로그램(어플)이 동작하는데 필요한 영역이라 생각하면 된다.

(관련 명령어, 데이터가 저장되어 있는 영역)

-ex. 컴퓨터의 경우 하드디스크에 게임을 설치해 두고
게임을 실행하면 하드디스크의 데이터가 복사되어 메모리에 올라간다.
게임을 종료하면 메모리에서 사라진다.

 

메모리는 매우 중요하다. 다다익램이라는 말이 나오는 이유가 있다.
어플 여러 개 켜다 보면 몇 개는 꺼지는 경우를 겪었을 것이다.

이것이 바로 램이 부족해서, 운영체제(아이폰은 iOS)가 자동으로 램 용량을 관리하면서 일어나는 현상이다.

 

그래서 나중에 쓸데없이 메모리 용량을 많이 잡아먹지 않기 위해서 (메모리 누수가 일어나지 않기 위해)

ARC등 메모리 관리 기법도 배우게 된다.

요즘은 스마트폰의 스펙이 너무 좋아져서 웬만큼은 문제없지만.. 어플 규모가 커지고 기능이 많으면

메모리 구조를 생각하고 개발한 것과 아닌 것은 큰 차이가 있을 것이다. (속도나 비용 측면에서)

 

먼저 간단하게 컴퓨터의 메모리 구조는

(우리는 앱 개발을 하니까, 스마트폰으로 생각하면 된다. 어짜피 스마트폰도 작은 컴퓨터니까)

 

코드 / 데이터 / 힙 / 스택으로 이루어져 있다. 코데힙스 코데힙스~

  • 코드
    우리가 쓰는 코드들 (컴퓨터에게 명령하는)이 존재하는 영역

  • 데이터
    데이터가 저장되는 공간이다. (여러 곳(객체)에서 접근이 가능한, 공유되는 영역이다.) (ex. 전역변수)


  • (스택과 달리)정해진 틀이 없는 공간에
    그때그때 빈 공간을 찾아서 데이터를 채워넣는 특이한 영역이다.(동적 할당)
    그래서 스택에 비해 느리지만, 참조 타입, 상속 등을 특성을 공부하면
    조금 더 이해가 되고 주로 ‘클래스’를 다룰 때 자주 듣게 될 것이다.

    키워드 : 참조타입

  • 스택
    빈 프링글스 통을 상상해보자.
    함수를 실행하거나 값타입 인스턴스를 초기화 하면 프링글스 조각, 스택프레임이 생긴다.
    통 안에 일들이 차곡차곡 쌓여서 일이 끝나면 바로바로 사라지는(스택프레임이 만들어졌다가 사라지는) 영역이다.
    (함수를 실행하고, 함수가 끝나면 스택 프레임이 사라짐)
    FILO, First In Last Out 즉 선입 후출 방식으로 동작한다.
    주로 함수(메서드) 실행, 구조체(값타입) 등을 다룰 때 자주 듣게 될 것이다.
    동작 속도가 힙에 비해 빠르다!

    키워드 : 값타입

    또한 데이터의 저장 주기 (얼마나 오래 저장하고 있는가?)도 각 영역마다 다른데,
    데이터 > 힙 > 스택 순으로 저장 주기가 길다고 생각하면 된다.
    특정 데이터를 오래 저장하고, 사용할 필요가 있다면
    혹은 반대의 경우에도 각 목적에 맞는 영역에 데이터를 할당하는 것이 좋다.

    코드를 작성할 때 메모리의 구조를 알고 있으면 
    메모리의 어떤 영역에 존재하는지? 어떤 방식으로 동작하는지? 인지하게 되고 
    이를 통해 더 효율적이고 정확한 설계가 가능할 것이다.