스텍을 구현했는데 자바스크립트로 변형 가능할까요?

C# 을 이용해서 스텍을 만들어보았는데요.
자바스크립트로 구현하는 데 조금 에러가 있네요.
객체들은 어떤 방식으로 구현되어야 하는지 인터페이스를 보고 싶습니다.

class Stack<T> {

    protected Capsule current = null;

    public class Capsule {
        public T value;
        public Capsule made;
        public Capsule make;
    }

    public void Push(T value) {
        var create = new Capsule();
        create.value = value;

        if (current == null)
        {
            // Do Nothing
        }
        else {
            current.make = create;
            create.made = current;
        }
        current = create;
    }

    public Capsule Pop() {
        var ret_value = current;
        if (current != null)
        {
            current = ret_value.made;
        }
        else {
            // current = null; // same meaning
        }
        return ret_value;
    }
}

참고로 자바스크립의 Array 객체에 Stack에 대응할 수 있는 .push() 메소드와 .push() 메소드가 있습니다. 물론 자바스크립트로도 직접 스택 구현이 가능합니다.

만약 Typescript 쓸 생각이 있다면 지금 작성한 코드와 유사하게 구현이 가능합니다.
하지만 자바스크립트를 쓴다면 객체를 모두 함수로 바꾸어야겠죠. ES6을 쓴다면 class 사용이 가능하나, 결국 함수로 치환됩니다. 예를 들면,

function Stack() {
    this.current = null;
    var parent = this;
    this.Capsule = function() {
        this.value = void 0;
        this.make = new parent.Capsule();
        this.made = new parent.Capsule();
    };
}
Stack.prototype.Push = function(value) {
    var create = new this.Capsule();
    create.value = value;
    if (this.current == null) { }
    else {
        this.current.make = create;
        create.made = current;
    }
    this.current = create;
};

모의 코드이기 때문에 정확하지 않을 수 있습니다.

1 Like