Avatar
๐Ÿ˜‰

Organizations

  • temperature์™€ top-p(๋˜๋Š” nucleus sampling)๋Š” ์ž์—ฐ์–ด ์ƒ์„ฑ ๋ชจ๋ธ์ด ์ถœ๋ ฅํ•  ๋‹จ์–ด๋ฅผ ์„ ํƒํ•  ๋•Œ์˜ ๋žœ๋ค์„ฑ ์กฐ์ ˆ ํŒŒ๋ผ๋ฏธํ„ฐ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐœ๋…์€ ์œ ์‚ฌํ•œ ์—ญํ• ์„ ํ•˜์ง€๋งŒ ์ž‘๋™ ๋ฐฉ์‹์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์•„๋ž˜์— ๊ฐ ๊ฐœ๋…์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…๊ณผ ์˜ˆ์ œ๋ฅผ ์ œ๊ณตํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


    ๐Ÿ”ฅ Temperature: “์„ ํƒ์˜ ํ™•๋ฅ ์„ ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์กฐ์ •”

    ๊ฐœ๋…

    • temperature๋Š” ๋ชจ๋ธ์ด ๋‹ค์Œ ๋‹จ์–ด๋ฅผ ์„ ํƒํ•  ๋•Œ์˜ ํ™•๋ฅ  ๋ถ„ํฌ๋ฅผ ์–ผ๋งˆ๋‚˜ ํ‰ํƒ„ํ•˜๊ฒŒ ๋งŒ๋“ค์ง€๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.
    • ๊ธฐ๋ณธ๊ฐ’์€ 1.0์ด๋ฉฐ, ์ด ๊ฐ’์„ ๋‚ฎ์ถ”๋ฉด ๋” ๊ฒฐ์ •๋ก ์ (deterministic), **๋†’์ด๋ฉด ๋” ์ฐฝ์˜์ (random)**์ด ๋ฉ๋‹ˆ๋‹ค.

    ์ž‘๋™ ๋ฐฉ์‹

    • ๋ชจ๋ธ์ด ์ƒ์„ฑ ๊ฐ€๋Šฅํ•œ ๋‹จ์–ด์— ๋Œ€ํ•ด logit(์ ์ˆ˜)์„ ๋ถ€์—ฌํ•œ ํ›„ softmax ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ํ™•๋ฅ ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    Created Tue, 13 May 2025 18:20:45 +0900
  • CQRS (Command Query Responsibility Segregation)๋Š” **๋ช…๋ น(Command)**๊ณผ **์กฐํšŒ(Query)**์˜ ์ฑ…์ž„์„ ๋ถ„๋ฆฌํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ์˜ ๋ชจ๋ธ์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ ํ™•์žฅ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋ชฉ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


    ๐Ÿ”น ํ•ต์‹ฌ ๊ฐœ๋…

    1. Command (๋ช…๋ น)

      • ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์š”์ฒญ (์˜ˆ: ์ƒ์„ฑ, ์ˆ˜์ •, ์‚ญ์ œ)
      • ์˜ˆ: createUser(), updateOrderStatus()
    2. Query (์กฐํšŒ)

      • ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ์š”์ฒญ (๋‹จ์ˆœํžˆ ์ฝ๊ธฐ๋งŒ ํ•จ, ๋ณ€๊ฒฝ X)
      • ์˜ˆ: getUserById(), getOrderListByUser()
    3. ์ฑ…์ž„ ๋ถ„๋ฆฌ

      • ์“ฐ๊ธฐ ๋ชจ๋ธ(Command Model): ๋„๋ฉ”์ธ ๋กœ์ง๊ณผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํฌํ•จ
      • ์ฝ๊ธฐ ๋ชจ๋ธ(Query Model): ์ฃผ๋กœ DTO๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์ „์šฉ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง (์˜ˆ: denormalized view)

    ๐Ÿ”น ์ „ํ†ต์ ์ธ CRUD ๋ฐฉ์‹๊ณผ์˜ ์ฐจ์ด์ 

    ํ•ญ๋ชฉ ์ „ํ†ต์  CRUD CQRS
    ๋ชจ๋ธ ๊ณต์œ  ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋™์ผํ•œ ๋ชจ๋ธ ์‚ฌ์šฉ ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ ๋ชจ๋ธ ๋ถ„๋ฆฌ
    ํ™•์žฅ์„ฑ ์ œํ•œ์  ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ฐ๊ฐ ํ™•์žฅ ๊ฐ€๋Šฅ
    ๋ณต์žก๋„ ๋‚ฎ์Œ ์ƒ๋Œ€์ ์œผ๋กœ ๋†’์Œ
    ์„ฑ๋Šฅ ์ตœ์ ํ™” ์–ด๋ ต๋‹ค ์ฝ๊ธฐ์— ์ตœ์ ํ™”๋œ ๊ตฌ์กฐ ๊ฐ€๋Šฅ

    ๐Ÿ”น ์‚ฌ์šฉ ์˜ˆ์‹œ

    • ์ด์ปค๋จธ์Šค ์‹œ์Šคํ…œ: ์ฃผ๋ฌธ์€ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋งŽ๊ณ , ์ฃผ๋ฌธ ๋‚ด์—ญ ์กฐํšŒ๋Š” ๋น ๋ฅธ ์‘๋‹ต์ด ์ค‘์š”ํ•  ๋•Œ
    • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค: ์„œ๋น„์Šค๋ณ„ ์ฑ…์ž„ ๋ถ„๋ฆฌ๋ฅผ ํ•  ๋•Œ Command/Query ๋ชจ๋ธ์„ ๊ฐ๊ฐ ๋‹ค๋ฅธ ์„œ๋น„์Šค๋กœ ๋ถ„๋ฆฌ ๊ฐ€๋Šฅ

    ๐Ÿ”น ์žฅ์ 

    • ํ™•์žฅ์„ฑ ํ–ฅ์ƒ: ์ฝ๊ธฐ์™€ ์“ฐ๊ธฐ๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ
    • ์„ฑ๋Šฅ ์ตœ์ ํ™” ์šฉ์ด: ์กฐํšŒ ์ „์šฉ ๋ชจ๋ธ์„ ์บ์‹œ๋‚˜ ๋น„์ •๊ทœํ™”๋œ DB๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅ
    • ๋ณต์žกํ•œ ๋„๋ฉ”์ธ ๋ชจ๋ธ์˜ ๋‹จ์ˆœํ™”: Command ๋ชจ๋ธ์—๋งŒ ๋ณต์žกํ•œ ๋„๋ฉ”์ธ ๊ทœ์น™์„ ์ ์šฉ ๊ฐ€๋Šฅ

    ๐Ÿ”น ๋‹จ์ 

    • ๋ณต์žก๋„ ์ฆ๊ฐ€: ์ฝ”๋“œ ๊ตฌ์กฐ์™€ ์šด์˜ ํ™˜๊ฒฝ์ด ๋ณต์žกํ•ด์ง
    • ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์ฒ˜๋ฆฌ ํ•„์š”: Command/Query ๋ชจ๋ธ ๊ฐ„ ๋™๊ธฐํ™” ํ•„์š” (์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ ๋“ฑ)
    • ๋Ÿฌ๋‹ ์ปค๋ธŒ: ๋„์ž… ์‹œ ๊ฐœ๋ฐœ์ž์˜ ์ดํ•ด๋„ ์š”๊ตฌ

    ๐Ÿ”น CQRS์™€ Event Sourcing์˜ ์กฐํ•ฉ

    CQRS๋Š” ์ข…์ข… Event Sourcing๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    Created Fri, 09 May 2025 09:20:45 +0900
  • @Transactional ์–ด๋…ธํ…Œ์ด์…˜์€ Java์—์„œ ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ํ•ต์‹ฌ ์ˆ˜๋‹จ์œผ๋กœ, springframework.transaction.annotation.Transactional๊ณผ jakarta.transaction.Transactional์€ ๋น„์Šทํ•ด ๋ณด์ด์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฃผ์š” ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค:


    1. ํŒจํ‚ค์ง€ ์ถœ์ฒ˜

    ํ•ญ๋ชฉ Spring ์–ด๋…ธํ…Œ์ด์…˜ Jakarta ์–ด๋…ธํ…Œ์ด์…˜
    ์–ด๋…ธํ…Œ์ด์…˜ ๊ฒฝ๋กœ org.springframework.transaction.annotation.Transactional jakarta.transaction.Transactional
    ์†Œ์† Spring Framework Jakarta EE (๊ตฌ Java EE)
    API ๋ ˆ๋ฒจ Spring ์ „์šฉ ๊ธฐ๋Šฅ Java ํ‘œ์ค€ ์‚ฌ์–‘ (JSR-907 ๋“ฑ) ๊ธฐ๋ฐ˜

    2. ์ ์šฉ ๋Œ€์ƒ์˜ ์ฐจ์ด

    • Spring @Transactional

      • Spring AOP ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘.
      • ํ”„๋ก์‹œ ๋ฐฉ์‹์œผ๋กœ ํŠธ๋žœ์žญ์…˜์„ ๊ด€๋ฆฌ.
      • Spring Data JPA, Spring JDBC, MyBatis ๋“ฑ ๋‹ค์–‘ํ•œ Spring ๊ธฐ์ˆ  ์Šคํƒ๊ณผ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋จ.
      • ์„ธ๋ฐ€ํ•œ ์ œ์–ด๊ฐ€ ๊ฐ€๋Šฅ: propagation, isolation, timeout, rollbackFor, readOnly ๋“ฑ ์†์„ฑ ๋‹ค์–‘.
    • Jakarta @Transactional

    Created Thu, 01 May 2025 23:40:45 +0900
  • Spring Boot์—์„œ ํŒŒ์ผ์„ ์ŠคํŠธ๋ฆฌ๋ฐ(Stream) ๋ฐฉ์‹์œผ๋กœ writeํ•  ๋•Œ, ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆด์ง€ ์—ฌ๋ถ€๋Š” ์‚ฌ์šฉ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ ์ŠคํŠธ๋ฆฌ๋ฐ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์œผ๋กœ, ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ์ง€ ์•Š๊ณ  ์ผ์ • ํฌ๊ธฐ์˜ ๋ฒ„ํผ๋ฅผ ํ†ตํ•ด ์ ์ง„์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


    โœ… ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ฆฌ์ง€ ์•Š๋Š” ๊ฒฝ์šฐ (Streaming ๋ฐฉ์‹)

    Java์—์„œ InputStream โ†’ OutputStream ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ๋•Œ ๋ณดํ†ต ๋‹ค์Œ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

    try (InputStream in = ...;
         OutputStream out = new FileOutputStream("output.txt")) {
    
        byte[] buffer = new byte[8192]; // 8KB ๋ฒ„ํผ
        int bytesRead;
        while ((bytesRead = in.read(buffer)) != -1) {
            out.write(buffer, bytesRead, 0);
        }
    }
    

    ์ด ๋ฐฉ์‹์€:

    Created Wed, 30 Apr 2025 13:25:18 +0900
  • Servlet์ด๋ž€?

    Servlet์€ Java๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑ๋œ ์„œ๋ฒ„ ์ธก ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ, ํด๋ผ์ด์–ธํŠธ(์ฃผ๋กœ ์›น ๋ธŒ๋ผ์šฐ์ €)์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ์‘๋‹ต์„ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ HTTP ์š”์ฒญ๊ณผ ์‘๋‹ต์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋ฉฐ, Java EE (์ดํ›„ Jakarta EE๋กœ ์ด๋ฆ„ ๋ณ€๊ฒฝ) ์ŠคํŽ™์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

    Servlet์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„(Tomcat, Jetty ๋“ฑ) ์œ„์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ์›น ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์ž๋กœ ๊ธฐ๋Šฅํ•ฉ๋‹ˆ๋‹ค.


    Servlet์˜ ์ฃผ์š” ํŠน์ง•

    • Java ์–ธ์–ด ๊ธฐ๋ฐ˜: ํ”Œ๋žซํผ ๋…๋ฆฝ์ ์ด๋ฉฐ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ์ ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
    • ์š”์ฒญ-์‘๋‹ต ์ฒ˜๋ฆฌ: HTTP ์š”์ฒญ(GET, POST, PUT, DELETE ๋“ฑ)์„ ๋ฐ›์•„์„œ ํ•„์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋‹ค์‹œ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•ฉ๋‹ˆ๋‹ค.
    • ํ™•์žฅ์„ฑ: ์ถ”๊ฐ€ ์„ค์ •๊ณผ ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด ๋ณต์žกํ•œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
    • ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜: ํ•˜๋‚˜์˜ Servlet ์ธ์Šคํ„ด์Šค๊ฐ€ ๋‹ค์ˆ˜์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์™€ ํ•จ๊ป˜ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ผ์ดํ”„์‚ฌ์ดํด ๊ด€๋ฆฌ: init(), service(), destroy() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

    Servlet์˜ ๋™์ž‘ ๋ฐฉ์‹

    1. ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ: ์‚ฌ์šฉ์ž๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
    2. ์›น ์„œ๋ฒ„ ์ „๋‹ฌ: ์š”์ฒญ์€ ์›น ์„œ๋ฒ„(Tomcat ๋“ฑ)์— ์˜ํ•ด ํ•ด๋‹น Servlet์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.
    3. Servlet ์š”์ฒญ ์ฒ˜๋ฆฌ:
      • service() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
      • ์š”์ฒญ ๋ฐฉ์‹์— ๋”ฐ๋ผ doGet(), doPost() ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.
    4. ์‘๋‹ต ์ƒ์„ฑ: ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ HttpServletResponse ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํด๋ผ์ด์–ธํŠธ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
    5. ๋ผ์ดํ”„์‚ฌ์ดํด ์ข…๋ฃŒ: ์„œ๋ฒ„๊ฐ€ ๋‚ด๋ ค๊ฐ€๊ฑฐ๋‚˜ ํŠน์ • ์ƒํ™ฉ์—์„œ destroy()๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ •๋ฆฌ ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค.

    Servlet์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ (์˜ˆ์ œ)

    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/hello")
    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            resp.setContentType("text/html");
            resp.getWriter().write("<h1>Hello, Servlet!</h1>");
        }
    }
    

    ์ด ์ฝ”๋“œ๋Š” /hello ๊ฒฝ๋กœ๋กœ ์š”์ฒญ์ด ์˜ค๋ฉด “Hello, Servlet!” ์ด๋ผ๋Š” HTML์„ ํด๋ผ์ด์–ธํŠธ์— ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    Created Tue, 29 Apr 2025 20:19:45 +0900
  • Java์—์„œ abstract class์™€ interface๋Š” ๋‘˜ ๋‹ค **์ถ”์ƒํ™”(abstraction)**๋ฅผ ์œ„ํ•œ ์ˆ˜๋‹จ์ด์ง€๋งŒ, ์„ค๊ณ„ ๋ชฉ์ ๊ณผ ์‚ฌ์šฉ ๋ฐฉ์‹์— ์ค‘์š”ํ•œ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— ๊ทธ ์ฐจ์ด์ ์„ ์ •๋ฆฌํ•ด ๋“œ๋ฆด๊ฒŒ์š”.


    โœ… ๊ณตํ†ต์ 

    • ๋‘˜ ๋‹ค ์ธ์Šคํ„ด์Šคํ™”ํ•  ์ˆ˜ ์—†์Œ
    • ๋‘˜ ๋‹ค ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ฒ˜๋งŒ ์„ ์–ธํ•˜๊ณ , ๊ตฌํ˜„์€ ํ•˜์œ„ ํด๋ž˜์Šค(๋˜๋Š” ๊ตฌํ˜„ ํด๋ž˜์Šค)์—์„œ ๋‹ด๋‹น
    • ๋‘˜ ๋‹ค **๋‹คํ˜•์„ฑ(polymorphism)**์„ ์œ„ํ•œ ์ˆ˜๋‹จ

    ๐Ÿ” ์ฃผ์š” ์ฐจ์ด์ 

    ํ•ญ๋ชฉ abstract class interface
    ํ‚ค์›Œ๋“œ abstract class ClassName interface InterfaceName
    ๋‹ค์ค‘ ์ƒ์† ๋ถˆ๊ฐ€ (๋‹จ์ผ ์ƒ์†๋งŒ ๊ฐ€๋Šฅ) ๊ฐ€๋Šฅ (์—ฌ๋Ÿฌ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„ ๊ฐ€๋Šฅ)
    ์ƒ์„ฑ์ž ์ƒ์„ฑ์ž ์ •์˜ ๊ฐ€๋Šฅ ์ƒ์„ฑ์ž ์—†์Œ
    ํ•„๋“œ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜, ์ •์  ๋ณ€์ˆ˜ ๊ฐ€๋Šฅ public static final ์ƒ์ˆ˜๋งŒ ์„ ์–ธ ๊ฐ€๋Šฅ (Java 8 ์ด์ „ ๊ธฐ์ค€)
    ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ์ผ๋ถ€ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ๊ฐ€๋Šฅ Java 8๋ถ€ํ„ฐ๋Š” default, static ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
    ์ ‘๊ทผ ์ œ์–ด์ž ๋‹ค์–‘ํ•œ ์ ‘๊ทผ ์ œ์–ด์ž(private, protected, public) ์‚ฌ์šฉ ๊ฐ€๋Šฅ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ public abstract (Java 9 ์ดํ›„ private ๋ฉ”์„œ๋“œ๋„ ๊ฐ€๋Šฅ)
    ๋ชฉ์  “IS-A” ๊ด€๊ณ„ (์ƒ์† ๊ธฐ๋ฐ˜์˜ ๊ณ„์ธตํ™”) ๊ธฐ๋Šฅ ์ •์˜์šฉ, ๊ณ„์•ฝ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ (๋‹คํ˜•์„ฑ, ํ”Œ๋Ÿฌ๊ทธ์ธ)

    โœจ Java 8+ ์ดํ›„ ๋‹ฌ๋ผ์ง„ ์ 

    • Java 8๋ถ€ํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค์— default ๋ฉ”์„œ๋“œ์™€ static ๋ฉ”์„œ๋“œ ์ถ”๊ฐ€ ๊ฐ€๋Šฅ
      interface Vehicle {
          default void start() {
              System.out.println("Starting...");
          }
      }
      
    • Java 9๋ถ€ํ„ฐ๋Š” private ๋ฉ”์„œ๋“œ๋„ ์ธํ„ฐํŽ˜์ด์Šค ๋‚ด๋ถ€์—์„œ ์„ ์–ธ ๊ฐ€๋Šฅ

    โœ… ์–ธ์ œ ์–ด๋–ค ๊ฑธ ์จ์•ผ ํ• ๊นŒ?

    • abstract class๊ฐ€ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ:

    Created Thu, 24 Apr 2025 21:48:45 +0900