๐Ÿ’ป
ComputerScience
  • ๋ชฉ์ฐจ
  • Operating System
    • ์šด์˜์ฒด์ œ๋ž€
    • ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ
    • ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„
    • ์ธํ„ฐ๋ŸฝํŠธ(Interrupt)
    • ์‹œ์Šคํ…œ ์ฝœ(System Call)
    • PCB์™€ Context Switching
    • IPC(Inter Process Communication)
    • CPU ์Šค์ผ€์ค„๋ง
    • ๋ฐ๋“œ๋ฝ(DeadLock)
    • Race Condition
    • ์„ธ๋งˆํฌ์–ด(Semaphore) & ๋ฎคํ…์Šค(Mutex)
    • ํŽ˜์ด์ง• & ์„ธ๊ทธ๋จผํ…Œ์ด์…˜
    • ํŽ˜์ด์ง€ ๊ต์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๋ฉ”๋ชจ๋ฆฌ(Memory)
    • ํŒŒ์ผ ์‹œ์Šคํ…œ
  • Network
    • OSI 7 ๊ณ„์ธต
    • TCP 3 way handshake & 4 way handshake
    • TCP/IP ํ๋ฆ„์ œ์–ด & ํ˜ผ์žก์ œ์–ด
    • UDP
    • ๋Œ€์นญํ‚ค & ๊ณต๊ฐœํ‚ค
    • HTTP & HTTPS
    • TLS/SSL handshake
    • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ(Load Balancing)
    • Blocking,Non-blocking & Synchronous,Asynchronous @LifesLike
    • Blocking & Non-Blocking I/O
  • Algorithm
    • ๊ฑฐํ’ˆ ์ •๋ ฌ(Bubble Sort)
    • ์„ ํƒ ์ •๋ ฌ(Selection Sort)
    • ์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)
    • ํ€ต ์ •๋ ฌ(Quick Sort) @mimwin
    • ๋ณ‘ํ•ฉ ์ •๋ ฌ(Merge Sort)
    • ํž™ ์ •๋ ฌ(Heap Sort)
    • ๊ธฐ์ˆ˜ ์ •๋ ฌ(Radix Sort)
    • ๊ณ„์ˆ˜ ์ •๋ ฌ(Count Sort)
    • ์ด๋ถ„ ํƒ์ƒ‰(Binary Search)
    • ํ•ด์‹œ ํ…Œ์ด๋ธ” ๊ตฌํ˜„
    • DFS & BFS @sujin-kk
    • ์ตœ์žฅ ์ฆ๊ฐ€ ์ˆ˜์—ด(LIS)
    • ์ตœ์†Œ ๊ณตํ†ต ์กฐ์ƒ(LCA)
    • ๋™์  ๊ณ„ํš๋ฒ•(Dynamic Programming)
    • ๋‹ค์ต์ŠคํŠธ๋ผ(Dijkstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ๋น„ํŠธ๋งˆ์Šคํฌ(BitMask)
  • Database
    • ํ‚ค(Key) ์ •๋ฆฌ
    • SQL - JOIN
    • SQL Injection
    • SQL vs NoSQL
    • ์ •๊ทœํ™”(Nomalization)
    • ์ด์ƒ(Anomaly)
    • ์ธ๋ฑ์Šค(INDEX)
    • ํŠธ๋žœ์žญ์…˜(Transaction)
    • ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(Transaction Isolation Level)
    • ์ €์žฅ ํ”„๋กœ์‹œ์ €(Stored PROCEDURE)
    • ๋ ˆ๋””์Šค(Redis) @sujin-kk
  • Java
    • Java ์ปดํŒŒ์ผ ๊ณผ์ •
    • Call by Value vs Call by Reference
    • String & StringBuffer & StringBuilder
    • ์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ (Java Virtual Machine)
    • Casting(์—…์บ์ŠคํŒ… & ๋‹ค์šด์บ์ŠคํŒ…)
    • ์˜คํ†  ๋ฐ•์‹ฑ & ์˜คํ† ์–ธ๋ฐ•์‹ฑ
    • Thread ํ™œ์šฉ
    • ๊ณ ์œ  ๋ฝ(Intrinsic Lock)
    • ๋ฌธ์ž์—ด ํด๋ž˜์Šค
    • Garbage Collection
    • Promotion & Casting
    • Primitive type & Reference type
    • ์ง๋ ฌํ™”(Serialization)
    • Error & Exception
    • Stream API
    • Record
    • Composition
Powered by GitBook
On this page
  • ํŠน์ง•
  • ๋žŒ๋‹ค์‹์œผ๋กœ ์š”์†Œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์„ ์–ธํ˜• ์ฝ”๋“œ
  • ๋‚ด๋ถ€ ๋ฐ˜๋ณต
  • ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ
  • ์‚ฌ์šฉ๋ฒ•
  • ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ
  • ์ตœ์ข… ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ
  • ์ŠคํŠธ๋ฆผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ
  • ์„ฑ๋Šฅ
  • ์ŠคํŠธ๋ฆผ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ์ข…๋ฅ˜
  • Predicate
  • Consumer
  • Function
  • Supplier
  • ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ
  • ์ง์ ‘ ๊ตฌํ˜„
  • ์ต๋ช… ํด๋ž˜์Šค ์‚ฌ์šฉ
  • ๋žŒ๋‹ค์‹ ์‚ฌ์šฉ
  1. Java

Stream API

์ปฌ๋ ‰์…˜ (๋ฐฐ์—ด ํฌํ•จ) ์˜ ์ €์žฅ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ฐธ์กฐํ•ด์„œ ํ•จ์ˆ˜ํ˜• ์Šคํƒ€์ผ์˜ ๋žŒ๋‹ค์‹์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ฐ˜๋ณต์ž

์ž๋ฐ” 8๋ถ€ํ„ฐ ์ƒ๊ธด API์ด๋‹ค. ์ปฌ๋ ‰์…˜์„ ์ŠคํŠธ๋ฆผ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์š”์†Œ๋“ค์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ์ปฌ๋ ‰์…˜์œผ๋กœ ๋ชจ์•„์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

ํŠน์ง•

๋žŒ๋‹ค์‹์œผ๋กœ ์š”์†Œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ŠคํŠธ๋ฆผ์—์„œ ์ œ๊ณตํ•˜๋Š” ์š”์†Œ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋Š” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งค๊ฐœ ํƒ€์ž…์œผ๋กœ ๋ฐ›๊ณ  ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋žŒ๋‹ค์‹์ด๋‚˜ ๋ฉ”์„œ๋“œ ์ฐธ์กฐ๋ฅผ ์ด์šฉํ•œ ์š”์†Œ ์ฒ˜๋ฆฌ ๋‚ด์šฉ์„ ๋งค๊ฐœ๊ฐ’์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

c.f. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค

์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ๋”ฑ ํ•œ๊ฐœ์ธ ์ธํ„ฐํŽ˜์ด์Šค. default ๋ฉ”์„œ๋“œ๋‚˜ static ๋ฉ”์„œ๋“œ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์–ด๋„ ๊ดœ์ฐฎ๋‹ค.

์ž๋ฐ”์—์„œ๋Š” @FunctionalInterface ์–ด๋…ธํ…Œ์ด์…˜์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ด ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™์ธ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค์—ฌ์•ผ ํ•œ๋‹ค. ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ์œผ๋ฉด ์ปดํŒŒ์ผ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์žˆ์–ด ์ด ์–ด๋…ธํ…Œ์ด์…˜์ด ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค ๊ฒ€์ฆ๊ณผ ์œ ์ง€๋ณด์ˆ˜ ์ธก๋ฉด์—์„œ ์žฅ์ ์ด ์žˆ๋‹ค.

@FunctionalInterface
public interface Predicate<T> {

    /**
     * Evaluates this predicate on the given argument.
     *
     * @param t the input argument
     * @return {@code true} if the input argument matches the predicate,
     * otherwise {@code false}
     */
    boolean test(T t);
}

์„ ์–ธํ˜• ์ฝ”๋“œ

์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋ฉด how ๋ณด๋‹ค what์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค. 100๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ๋“ค์–ด์žˆ๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ํฌ๊ธฐ๊ฐ€ 50 ์ด์ƒ์ธ ์ˆซ์ž๋งŒ ๊ณจ๋ผ๋‚ด๋Š” ๋‘ ์ฝ”๋“œ๋ฅผ ๋น„๊ตํ•ด๋ณด์ž.

public List<Integer> filter50Above(List<Integer> list) {
        List<Integer> result = new ArrayList<>();
        for (Integer integer : list) {
            if (integer >= 50) {
                result.add(integer);
            }
        }
        return result;
    }

    public List<Integer> filter50AboveStream(List<Integer> list) {
        return list.stream()
                .filter(integer -> integer >= 50)
                .collect(Collectors.toList());
    }

๋‹จ์ˆœํ•œ ๋น„๊ต๋Š” ์–ด๋ ต์ง€๋งŒ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•œ ๊ตฌํ˜„์ด ๋” ๊ฐ„๊ฒฐํ•ด ๋ณด์ธ๋‹ค.

๋‚ด๋ถ€ ๋ฐ˜๋ณต

์ŠคํŠธ๋ฆผ์€ ๋‚ด๋ถ€ ๋ฐ˜๋ณต ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.

c.f. ์™ธ๋ถ€ ๋ฐ˜๋ณต์ž, ๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž

์™ธ๋ถ€ ๋ฐ˜๋ณต์ž๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฝ”๋“œ๋กœ ์ง์ ‘ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ”๋“œ์ด๋‹ค. for-each ๋ฌธ, while๋ฌธ, Iterator ๋“ฑ์ด ์™ธ๋ถ€ ๋ฐ˜๋ณต์ž์— ์†ํ•œ๋‹ค.

๋ฐ˜๋ฉด ๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž๋Š” ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ฝ”๋“œ๋งŒ ์ œ๊ณตํ•˜๊ณ  ์‹ค์ œ ๋ฐ˜๋ณต์€ ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€์—์„œ ์•Œ์•„์„œ ์ฒ˜๋ฆฌ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต์‹œํ‚ฌ ๊ฒƒ์ธ์ง€๋Š” ์ปฌ๋ ‰์…˜์—๊ฒŒ ๋งก๊ธฐ๊ณ  ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ์š”์†Œ ์ฒ˜๋ฆฌ ์ฝ”๋“œ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž๋Š” ์š”์†Œ์˜ ๋ฐ˜๋ณต ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ CPU ์ฝ”์–ด์—๊ฒŒ ์š”์†Œ๋ฅผ ๋ถ„๋ฐฐ์‹œ์ผœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ

์ŠคํŠธ๋ฆผ์€ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ์— ๋Œ€ํ•ด ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์™€ ์ตœ์ข… ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์—๋Š” ๋งต, ํ•„ํ„ฐ, ์ •๋ ฌ, ๋ฆฌ๋ฐ‹ ๋“ฑ์ด ์†ํ•˜๊ณ  ์ตœ์ข… ์ฒ˜๋ฆฌ์—๋Š” ๋ฐ˜๋ณต, ์นด์šดํŒ…, ์ง‘๊ณ„์ฒ˜๋ฆฌ ๋“ฑ์ด ์†ํ•œ๋‹ค.

์ŠคํŠธ๋ฆผ์€ ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์™€ ์ตœ์ข… ์ฒ˜๋ฆฌ๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. ์ฆ‰ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์ด ํŒŒ์ดํ”„๋ผ์ธ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค. ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ ํ•จ์ˆ˜๋“ค์€ ๋ฆฌํ„ด ๊ฐ’์œผ๋กœ ์ƒˆ๋กœ์šด ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ŠคํŠธ๋ฆผ ํ•จ์ˆ˜๋“ค์„ ์ฒด์ด๋‹ (chaining) ํ•  ์ˆ˜ ์žˆ๊ณ  ์ด ๊ณผ์ •์„ ํŒŒ์ดํ”„๋ผ์ธ ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์ค‘๊ฐ„ ์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ์€ ์ƒ์„ฑ๋˜๋Š” ์‹œ์ ์— ๋ฐ”๋กœ ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ (๋งคํ•‘, ํ•„ํ„ฐ๋ง, ์ •๋ ฌ ๋“ฑ) ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ  ์ตœ์ข… ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋˜๊ธฐ ์ „๊นŒ์ง€ ์ง€์—ฐ๋œ๋‹ค. ์ตœ์ข… ์ฒ˜๋ฆฌ๊ฐ€ ์‹œ์ž‘๋  ๋•Œ ๋น„๋กœ์†Œ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๊ฐ€ ํ•˜๋‚˜์”ฉ ์ค‘๊ฐ„ ์ŠคํŠธ๋ฆผ์—์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค.

์ด๋ฅผ Lazy Evaluation ์ด๋ผ๊ณ  ๋งํ•œ๋‹ค. ์ฃผ์–ด์ง„ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๋Š”๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฒฐ๊ณผ๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋Šฆ์ถ”์–ด ๋ถˆํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ JVM์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์ง€์—ฐ ์—ฐ์‚ฐ์„ ์œ„ํ•œ ์ค€๋น„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด์กฐ๊ฑด ์„ฑ๋Šฅ์ด ์ข‹๋‹ค๊ณ  ๋‹จ์ •ํ•  ์ˆ˜๋Š” ์—†๋‹ค.

์‚ฌ์šฉ๋ฒ•

์ค‘๊ฐ„ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ์™€ ์ตœ์ข… ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ๊ตฌ๋ถ„์€ ๋ฆฌํ„ด ํƒ€์ž…์œผ๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ฆฌํ„ด ํƒ€์ž…์ด Stream์ธ ๋ฉ”์„œ๋“œ ๋“ค์ด ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ์ด๋‹ค.

์ค‘๊ฐ„ ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ

์ตœ์ข… ์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ

์ŠคํŠธ๋ฆผ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ

๋ฉ€ํ‹ฐ ์ฝ”์–ด CPU ํ™˜๊ฒฝ์—์„œ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ชผ๊ฐœ์–ด ์„œ๋ธŒ ๋ฐ์ดํ„ฐ๋กœ ๋งŒ๋“ค๊ณ  ๊ฐ๊ฐ์˜ ์ฝ”์–ด์—์„œ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฒƒ์„ ๋งํ•œ๋‹ค. ํ•˜๋‚˜์˜ CPU ์ฝ”์–ด ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์‹œ์„ฑ (Concurrency)๊ณผ ๊ตฌ๋ถ„๋œ๋‹ค.

์ž๋ฐ” ๋ณ‘๋ ฌ ์ŠคํŠธ๋ฆผ์€ CPU ์ฝ”์–ด์˜ ์ˆ˜ ๋งŒํผ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ„๊ณ  ๊ฐ๊ฐ์˜ ์„œ๋ธŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„๋ฆฌ๋œ ์Šค๋ ˆ๋“œ์—์„œ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค. ์ฟผ๋“œ์ฝ”์–ด CPU์˜ ๊ฒฝ์šฐ ์„œ๋ธŒ ๋ฐ์ดํ„ฐ๋Š” 4๊ฐœ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  4๊ฐœ์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

์„ฑ๋Šฅ

ํ•˜๋‚˜์˜ ์ฝ”์–ด์—์„œ ์‹คํ–‰๋˜๋Š” ์ˆœ์ฐจ ์ฒ˜๋ฆฌ๋ณด๋‹ค ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๊ฐ€ ๋น ๋ฅด๋‹ค๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†๋‹ค. ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์Šค๋ ˆ๋“œํ’€์„ ์ƒ์„ฑํ•˜๊ณ  ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“œ๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋”ฐ๋ผ์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๊ฐ€ ์ ๊ณ  ์š”์†Œ๋‹น ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์งง์œผ๋ฉด ์ˆœ์ฐจ ์ฒ˜๋ฆฌ๊ฐ€ ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.

์ŠคํŠธ๋ฆผ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ์ข…๋ฅ˜

์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์•Œ์•„๋ณด์ž.

Predicate

@FunctionalInterface
public interface Predicate<T> {
    boolean test(T t);
}

์ธ์ž ํ•˜๋‚˜๋ฅผ ๋ฐ›์•„์„œ boolean ํƒ€์ž…์„ ๋ฆฌํ„ดํ•œ๋‹ค.

filter, allMatch, anyMatch ๋ฉ”์„œ๋“œ ๋“ฑ์˜ ์ธ์ž๋กœ ์“ฐ์ธ๋‹ค.

Consumer

@FunctionalInterface
public interface Consumer<T> {
    void accept(T t);
}

์ธ์ž ํ•˜๋‚˜๋ฅผ ๋ฐ›์•„์„œ ์•„๋ฌด๊ฒƒ๋„ ๋ฆฌํ„ดํ•˜์ง€ ์•Š๋Š”๋‹ค. Consumer (์†Œ๋น„์ž) ๋ผ๋Š” ์ด๋ฆ„์— ๊ฑธ๋งž๊ฒŒ ์ธ์ž ํ•˜๋‚˜๋ฅผ ๋ฐ›์•„ ์†Œ๋น„๋งŒ ํ•˜๊ณ  ๋๋‚ธ๋‹ค.

forEach, peek ๋ฉ”์„œ๋“œ ๋“ฑ์˜ ์ธ์ž๋กœ ์“ฐ์ธ๋‹ค.

Function

@FunctionalInterface
public interface Function<T, R> {
    R apply(T t);
}

์ธ์ž ํ•˜๋‚˜๋ฅผ ๋ฐ›์•„์„œ R ํƒ€์ž…์„ ๋ฆฌํ„ดํ•œ๋‹ค. R ํƒ€์ž…์ด int, double, long์œผ๋กœ ๊ณ ์ •๋˜์–ด์žˆ๋Š” ToXXXFunction<T> ์ธํ„ฐํŽ˜์ด์Šค๋„ ์žˆ๋‹ค.

map, flatMap ๋ฉ”์„œ๋“œ ๋“ฑ์˜ ์ธ์ž๋กœ ์“ฐ์ธ๋‹ค.

c.f. mapToInt, mapToLong, mapToDouble ์—์„œ๋Š” ๊ฐ์ž์— ๋งž๋Š” ToXXXFunction์„ ์ธ์ž๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

Supplier

@FunctionalInterface
public interface Supplier<T> {
    T get();
}

์ธ์ž๋ฅผ ๋ฐ›์ง€ ์•Š๊ณ  T ํƒ€์ž… ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. Supplier (๊ณต๊ธ‰์ž) ๋ผ๋Š” ์ด๋ฆ„์— ๊ฑธ๋งž๊ฒŒ ์•„๋ฌด ์ธ์ž๋„ ๋ฐ›์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

collect ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋กœ ์“ฐ์ธ๋‹ค.

์ด์™ธ์—๋„ reduce์˜ ์ธ์ž๋กœ ์“ฐ์ด๋Š” BinaryOperator, sorted์˜ ์ธ์ž๋กœ ์“ฐ์ด๋Š” Comparator ๋“ฑ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค.

ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ

์ง์ ‘ ๊ตฌํ˜„

public class MyImpl implements Predicate<Integer> {
    @Override
    public boolean test(Integer integer) {
        return integer >= 50;
    }
}

MyImpl predicate = new MyImpl();
List<Integer> result = integers.stream()
        .filter(predicate)
        .collect(Collectors.toList());

์ต๋ช… ํด๋ž˜์Šค ์‚ฌ์šฉ

List<Integer> result = integers.stream()
                .filter(new Predicate<Integer>() {
                    @Override
                    public boolean test(Integer integer) {
                        return integer >= 50;
                    }
                })
                .collect(Collectors.toList());

๋žŒ๋‹ค์‹ ์‚ฌ์šฉ

List<Integer> result = integers.stream()
                .filter(integer -> integer >= 50)
                .collect(Collectors.toList());
PreviousError & ExceptionNextComposition

Last updated 2 years ago

์ฐธ๊ณ :

https://bugoverdose.github.io/development/stream-lazy-evaluation/
Untitled
Untitled
Untitled