Stack

    [Kotlin] Stack 다루는 방법 한 번에 정리하기 : Kotlin의 Stack의 한계와 ArrayDeque를 사용한 해결 방안

    Stack 이란 무엇인가? Stack은 마지막에 들어온 값이 제일 먼저 나가는(LIFO) 특징을 가진 자료구조로, 값을 추가하고 빼내는데 O(1)의 시간 복잡도로 가능해 다양한 곳에 활용될 수 있는 자료 구조이다. *예를 들어 안드로이드에서는 화면(Fragment) 변경 시 이전 화면의 목록을 관리하는데 Stack 자료 구조를 사용하고 있다. 한 번 Stack이 어떻게 동작하는지 그림으로 살펴보자. Stack은 값을 여러개 담을 수 있는 하나의 Container을 가지고 있으며, 값을 집어넣으면 아래와 같이 순서대로 Container에 쌓인다. 예를 들어 Element1, Element2를 Stack에 순서대로 쌓으면 아래와 같은 형태가 된다. 값을 빼낼 때는 무조건 위에 있는 값부터 빼내진다. 즉, S..

    JVM의 Memory 할당 방식 : Stack과 Heap Memory가 동작하는 방법

    JVM의 메모리 할당 방식 JVM은 기본적으로 Stack Memory 와 Heap Memory 라 불리는 두가지 저장 공간을 이용해 메모리를 할당한다. 이들에 메모리를 할당하는 방법은 바이트 코드를 한 줄 한 줄 읽는 것이다. 한 줄 한 줄 읽혀진 값들은 JVM의 Stack 영역에 차곡차곡 메모리 할당 예제 예를 들어 다음과 같은 코드가 있다고 해보자. fun main() { val numberA = 12 val numberB = 15 val numberC = numberA + numberB } fun add(numberA: Int, numberB: Int): Int { return numberA + numberB } 위 코드에서 main function이 수행되면 다음과 같은 과정을 거쳐 메모리가 할당..

    [Kotlin] Stack Class 사용법 알아보기

    목표 Stack의 특징을 익힌다. Stack의 사용법과 구현을 익힌다. 개요 Stack은 LIFO(Last In First Out)의 특징을 가지는 자료 구조이다. 즉, 맨 마지막에 들어온 값이 가장 먼저 나가는 자료 구조이다. Kotlin에서는 Stack을 사용하기 위에 JCF의 Stack을 가져와 사용한다. Stack의 상속구조는 조금 복잡해서 List 위쪽(List가 확장하는 인터페이스)은 간소하게 표현했다. 생성 Stack의 생성은 간단하다. Stack은 클래스이기 때문에, 생성자를 이용해 생성할 수 있다. val stack: Stack = Stack() 조작 Stack의 조작 방법은 간단하다. Stack 클래스에서는 총 3가지의 Stack 연산을 지원한다. Stack에서 Vector Class를..