하루에 0.01%라도 성장하자

Develop/Android

Stack , Queue, Heap 의 구조와 메모리 영역에 대한 이해

뚠님 2019. 11. 29. 16:46
반응형

최근들어 프로그래밍에 알고리즘과 자료구조의 중요성을 느낀다.

확실히 한단계 더 높은 개발자가 되려면 기초가 중요하고 알고리즘과 자료구조의 중요성이 더욱 강해지는 것 같다..

주변 개발자를 보면, 자료구조 같은 기초적인 것들을 잘 알고 있는 개발자는 업무상 사용하던 언어와 다른 언어를 사용할 때 퍼먼스가 다르다. 그런의미에서 오늘은 조금은 기초적인 이야기를 해볼 예정이다.

 

 


 

Stack

 

Stack 구조

 

Stack은 LIFO( Last In First Out ) 구조다. 제일 처음에 들어간 데이터는 제일 마지막에 나온다.

 

 

Queue

 

Queue 구조

 

Queue는 FIFO( First In First Out) 구조다. 데이터가 들어간 순서데로 나간다.

 

 

Heap

 

Heap 구조

Heap은 완전이진트리 형식으로 되어 있다.

위에서 아래로 왼쪽에서 오른쪽으로 데이터가 채워진다.

Heap은 부모노드가 자식 노드보다 무조건 큰 완전이진트리 최대 힙, 부모노드가 자식 노드보다 무조건 작은 완전이진트로 최소 힙으로 구분된다.

 

 

위에서 설명한 내용을 참고하여 메모리 구조를 확인해 보자.

 

Memory Area Types

  • Code Area
    - 프로그래머가 작성한 코드가 실행되는 영역이다. 
  • Data Area
    - 전역 변수와 정적(Static) 변수가 저장되는 영역이다. 프로그램이 시작되면 할당되며 프로그램이 종료되면 소멸된다.
  • Heap Area
    - 사용자가 직접 관리하는 메모리 영역으로, 동적 메모리 영역이라고 부른다. 낮은 주소에서 높은 주소로 할당되는 것이 특징이다.
    - 이 영역은 사용자가 직접 메모리를 할당하고 해제해 주어야 하는 불편함이 있다. 즉 사용하지 않으면 메모리 영역을 계속 차지하고 있다. 하지만 Java 에서는 GC가 자동으로 해결을 해주기 때문에 큰 고려를 하지 않아도 된다. ( GC도 다양한 종류가 있다. )
    - 자바에서 선언하는 배열, 클래스, 인터페이스 등이 동적메모리에 할당되며, 쉽게 생각해보면 'new' 라는 키워드로 생성되는 것들이다.
  • Stack Area
    - 함수와 지역변수가 저장되는 공간이다. 높은 주소에서 낮은 주소로 메모리 주소가 할당되는 특징을 갖는다. 함수 호출이 완료되면 소멸된다.
    - 우리가 Java에서 선언하는 자료형(int, char 등 )의 타입을 갖는 것들이 저장된다.
    - 크기가 정해져 있는 타입이며, 컴파일 시 계산이 이루어 진다.
    - 메모리 작업이 종료되면 할당된 메모리 공간은 반환되어 없어진다.
    - 메모리 관리에 신경쓸 필요가 없는 장점을 갖지만( 운영체제가 알아서 할당, 반환처리를 해줌. ) 크기에 제약이 있다는 단점이 있다.
반응형