Learn
← Previous Next →

Hari 13: Generics Lanjutan & Patterns

65 min Last updated 09 Apr 2026

Generic Class

class Stack {
    private items: T[] = [];

    push(item: T): void { this.items.push(item); }
    pop(): T | undefined { return this.items.pop(); }
    peek(): T | undefined { return this.items.at(-1); }
    get isEmpty(): boolean { return this.items.length === 0; }
    get size(): number { return this.items.length; }
    toArray(): T[] { return [...this.items]; }
}

const numStack = new Stack();
numStack.push(1); numStack.push(2); numStack.push(3);
console.log(numStack.peek()); // 3
console.log(numStack.pop());  // 3

const strStack = new Stack();
strStack.push("a"); strStack.push("b");

Generic Interface & Repository Pattern

interface Repository {
    findById(id: ID): T | undefined;
    findAll(): T[];
    save(item: T): T;
    delete(id: ID): boolean;
}

class InMemoryRepo implements Repository {
    private store: Map = new Map();

    findById(id: number): T | undefined { return this.store.get(id); }
    findAll(): T[] { return [...this.store.values()]; }
    save(item: T): T { this.store.set(item.id, item); return item; }
    delete(id: number): boolean { return this.store.delete(id); }
}

💡 Notice: Queue adalah FIFO (First In, First Out). shift() menghapus dan return elemen pertama. Generic class bekerja seperti template untuk berbagai tipe data.

Assignment

Implementasikan generic Queue<T> dengan method enqueue(item), dequeue(): T|undefined, peek(): T|undefined, isEmpty, size. Test dengan number dan string queue.

Expected output:

Size: 3, Peek: 1
Dequeue: 1, 2
Sisa: 1
TS index.ts
Solution
Output