All :L

[Java] ์ธํ„ฐํŽ˜์ด์Šค (Interface) ๋ณธ๋ฌธ

STUDY/Java

[Java] ์ธํ„ฐํŽ˜์ด์Šค (Interface)

ofijwe 2024. 10. 26. 14:43
๋ฐ˜์‘ํ˜•

๐Ÿ“’ abstract class

1๏ธโƒฃ abstract class ์˜๋ฏธ

  • ์ž์† ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋“œ์‹œ ์žฌ์ •์˜ํ•ด์„œ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์ƒ์˜ ๊ตฌํ˜„์ด ๋ฌด์˜๋ฏธํ•œ ๋ฉ”์„œ๋“œ
    • ๋ฉ”์„œ๋“œ์˜ ์„ ์–ธ๋ถ€๋งŒ ๋‚จ๊ธฐ๊ณ  ๊ตฌํ˜„๋ถ€๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋Œ€์ฒด
    • ๊ตฌํ˜„๋ถ€๊ฐ€ ์—†๋‹ค๋Š” ์˜๋ฏธ๋กœ abstract ํ‚ค์›Œ๋“œ๋ฅผ ๋ฉ”์„œ๋“œ ์„ ์–ธ๋ถ€์— ์ถ”๊ฐ€
    • ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค๋ผ๋Š” ์˜๋ฏธ๋กœ ํด๋ž˜์Šค ์„ ์–ธ๋ถ€์— abstract ์ถ”๊ฐ€
  • ๊ณตํ†ต ๋ถ„๋ชจ๋ฅผ ๋ฝ‘์•„ ์ƒ์† ๊ตฌ์กฐ
  • ์ƒ์† ๊ด€๊ณ„ ์ •์˜๋ฅผ ํ†ตํ•œ ํด๋ž˜์Šค ์ •๋น„
  • ๊ด€๊ณ„๋ฅผ ํ†ตํ•œ ๊ฐ์ฒด ํ™œ์šฉ

2๏ธโƒฃ abstract class ํŠน์ง•

  • abstract ํด๋ž˜์Šค๋Š” ์ƒ์† ์ „์šฉ ํด๋ž˜์Šค
    • ์ž์‹์€ abstract method ์žฌ์ •์˜ํ•  ์ฑ…์ž„
    • ํด๋ž˜์Šค์— ๊ตฌํ˜„๋ถ€๊ฐ€ ์—†๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ X
    • ์ƒ์œ„ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ์จ ์ž์‹์„ ์ฐธ์กฐ ๊ฐ€๋Šฅ
  • ์กฐ์ƒ ํด๋ž˜์Šค์—์„œ ์ƒ์†๋ฐ›์€ abstract ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ
    • ํด๋ž˜์Šค ๋‚ด๋ถ€์— abstract ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ์ƒํ™ฉ์ด๋ฏ€๋กœ ์ž์‹ ํด๋ž˜์Šค๋Š” abstract ํด๋ž˜์Šค๋กœ ์„ ์–ธ๋˜์–ด์•ผ ํ•จ.

3๏ธโƒฃ abstract class ์‚ฌ์šฉ ์ด์œ 

  • abstract ํด๋ž˜์Šค๋Š” ๊ตฌํ˜„์˜ ๊ฐ•์ œ๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ •์„ฑ ํ–ฅ์ƒ
  • interface์— ์žˆ๋Š” ๋ฉ”์„œ๋“œ ์ค‘ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด ๊ฐœ๋ฐœ์˜ ํŽธ์˜ ์ง€์›

๐Ÿ“’ interface

1๏ธโƒฃ ์ธํ„ฐํŽ˜์ด์Šค ์˜๋ฏธ

  • ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์‹œ์Šคํ…œ, ์žฅ์น˜, ์†Œํ”„ํŠธ์›จ์–ด ๋”ฐ์œ„๋ฅผ ์„œ๋กœ ์ด์–ด์ฃผ๋Š” ๋ถ€๋ถ„, ๋˜๋Š” ๊ทธ๋Ÿฐ ์ ‘์† ์žฅ์น˜
  • GUI(Graphic User Interface): ํ”„๋กœ๊ทธ๋žจ๊ณผ ์‚ฌ์šฉ์ž ์‚ฌ์ด์˜ ์ ‘์ 

2๏ธโƒฃ ์ธํ„ฐํŽ˜์ด์Šค ์ž‘์„ฑ

  • ์ธํ„ฐํŽ˜์ด์Šค ์ž‘์„ฑ
    • ์ตœ๊ณ  ์ˆ˜์ค€์˜ ์ถ”์ƒํ™” ๋‹จ๊ณ„ : ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋‘ abstract ํ˜•ํƒœ
    • ํด๋ž˜์Šค์™€ ์œ ์‚ฌํ•˜๊ฒŒ interface ์„ ์–ธ
    • ๋ฉค๋ฒ„ ๊ตฌ์„ฑ
      • ๋ชจ๋“  ๋ฉค๋ฒ„๋ณ€์ˆ˜๋Š” public static final์ด๋ฉฐ, ์ƒ๋žต ๊ฐ€๋Šฅ
      • ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋Š” public abstract์ด๋ฉฐ, ์ƒ๋žต ๊ฐ€๋Šฅ

3๏ธโƒฃ ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†

  • ์ธํ„ฐํŽ˜์ด์Šค ์ƒ์†
    • ํด๋ž˜์Šค์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ธํ„ฐํŽ˜์ด์Šค๋„ extends๋ฅผ ์ด์šฉํ•ด ์ƒ์† ๊ฐ€๋Šฅ
    • ํด๋ž˜์Šค์™€ ๋‹ค๋ฅธ ์ ์€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๋‹ค์ค‘ ์ƒ์† ๊ฐ€๋Šฅ
      • ํ—ท๊ฐˆ๋ฆฌ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ์ž์ฒด๊ฐ€ X

4๏ธโƒฃ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„๊ณผ ๊ฐ์ฒด ์ฐธ์กฐ

  • ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„๊ณผ ๊ฐ์ฒด ์ฐธ์กฐ
    • ํด๋ž˜์Šค์—์„œ implements ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด interface ๊ตฌํ˜„
    • implementsํ•œ ํด๋ž˜์Šค๋Š” ๋ชจ๋“  abstract ๋ฉ”์„œ๋“œ๋ฅผ overrideํ•ด์„œ ๊ตฌํ˜„
      • but, ๊ตฌํ˜„ํ•˜์ง€ X → abstract ํด๋ž˜์Šค๋กœ ํ‘œ์‹œ
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ interface implements ๊ฐ€๋Šฅ
    • ๋‹คํ˜•์„ฑ์€ ์กฐ์ƒ ํด๋ž˜์Šค ๋ฟ ์•„๋‹ˆ๋ผ ์กฐ์ƒ ์ธํ„ฐํŽ˜์ด์Šค์—๋„ ์ ์šฉ
    • interface์™€์˜ ๊ด€๊ณ„๋„ is a ๊ด€๊ณ„์ด์ง€๋งŒ ์ข€ ๋” ์„ธ๋ถ€์ ์œผ๋กœ is able to๋ผ๊ณ  ํ•จ

๐Ÿ“’ interface์˜ ํ•„์š”์„ฑ

1๏ธโƒฃ ์ธํ„ฐํŽ˜์ด์Šค์˜ ํ•„์š”์„ฑ

  • ๊ตฌํ˜„์˜ ๊ฐ•์ œ๋กœ ํ‘œ์ค€ํ™” ์ฒ˜๋ฆฌ - abstract ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ
  • ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๊ฐ„์ ‘์ ์ธ ํด๋ž˜์Šค ์‚ฌ์šฉ์œผ๋กœ ์†์‰ฌ์šด ๋ชจ๋“ˆ ๊ต์ฒด ์ง€์›
  • ์„œ๋กœ ์ƒ์†์˜ ๊ด€๊ณ„๊ฐ€ ์—†๋Š” ํด๋ž˜์Šค๋“ค์—๊ฒŒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๊ด€๊ณ„ ๋ถ€์—ฌ๋กœ ๋‹คํ˜•์„ฑ ํ™•์žฅ
  • ๋ชจ๋“ˆ ๊ฐ„ ๋…๋ฆฝ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅ → ๊ฐœ๋ฐœ ๊ธฐ๊ฐ„ ๋‹จ์ถ•

2๏ธโƒฃ default method

  • ์ธํ„ฐํŽ˜์ด์Šค์— ์„ ์–ธ๋œ ๊ตฌํ˜„๋ถ€๊ฐ€ ์žˆ๋Š” ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ
    • ๋ฉ”์„œ๋“œ ์„ ์–ธ๋ถ€์— default modifier ์ถ”๊ฐ€ ํ›„ ๋ฉ”์„œ๋“œ ๊ตฌํ˜„๋ถ€ ์ž‘์„ฑ(public์œผ๋กœ ํ•œ์ •๋จ)
  • ํ•„์š”์„ฑ
    • ๊ธฐ์กด์— interface ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ interface์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ ๋ฐœ์ƒ
    • abstract ๋ฉ”์„œ๋“œ๋Š” ๋ชจ๋“  ๊ตฌํ˜„์ฒด๋“ค์ด ์ถ”๊ฐ€๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ override ํ•ด์•ผ ํ•จ.
    • default ๋ฉ”์„œ๋“œ๋Š” abstract๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ๊ตฌํ˜„ํ•ด์•ผ ํ•  ํ•„์š”๋Š” ์—†์–ด์ง.
  • ์ถฉ๋Œ
    • JDK1.7 ์ดํ•˜ → interface method์— ๊ตฌํ˜„๋ถ€๊ฐ€ ์—†์œผ๋ฏ€๋กœ ์ถฉ๋Œ์ด ์—†์—ˆ์Œ
    • JDK1.8 ์ดํ›„ → default method๊ฐ€ ์ƒ๊ธฐ๋ฉด์„œ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ–๋Š” ๊ตฌํ˜„๋ถ€๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ ์ถฉ๋Œ
    • ์šฐ์„ ์ˆœ์œ„
      • super class์˜ method ์šฐ์„  → super class๊ฐ€ ๊ตฌ์ฒด์ ์ธ ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๋Š” ๊ฒฝ์šฐ default method๋Š” ๋ฌด์‹œ๋จ
      • interface๊ฐ„์˜ ์ถฉ๋Œ → ํ•˜๋‚˜์˜ interface์—์„œ default method๋ฅผ ์ œ๊ณตํ•˜๊ณ  ๋‹ค๋ฅธ interface์—์„œ๋„ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ(default ์œ ๋ฌด์™€ ๋ฌด๊ด€)๊ฐ€ ์žˆ์„ ๋•Œ sub class๋Š” ๋ฐ˜๋“œ์‹œ overrideํ•ด์„œ ์ถฉ๋Œ ํ•ด๊ฒฐ

3๏ธโƒฃ static method

  • interface์— ์„ ์–ธ๋œ static method
    • ์ผ๋ฐ˜ static ๋ฉ”์„œ๋“œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ณ„๋„์˜ ๊ฐ์ฒด ํ•„์š” X
    • ๊ตฌํ˜„์ฒด ํด๋ž˜์Šค ์—†์ด ๋ฐ”๋กœ ์ธํ„ฐํŽญ์‹œใ…ก ์ด๋ฆ„์œผ๋กœ ๋ฉ”์„œ๋“œ์— ์ ‘๊ทผํ•ด์„œ ์‚ฌ์šฉ

4๏ธโƒฃ private method

  • interface์— body๋ฅผ ๊ฐ€์ง€๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋“ฑ์žฅํ•˜๋ฉด์„œ ๊ณตํ†ต์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ๋ชจ๋“ˆ ๋ฐœ์ƒ
    • ์™ธ๋ถ€๋กœ ๊ณต๊ฐœํ•  ํ•„์š” X ๋ฉ”์„œ๋“œ ์ง€์ •์„ ์œ„ํ•ด private method ์ถ”๊ฐ€
    • defaul ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ static ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
๋ฐ˜์‘ํ˜•

'STUDY > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] ์ปฌ๋ ‰์…˜ (Collection)  (1) 2024.10.30
[Java] ์ œ๋„ค๋ฆญ (Generic)  (2) 2024.10.28
[Java] ๋‹คํ˜•์„ฑ (Polymorphism)  (0) 2024.10.24
[Java] ์ƒ์† (Inheritance)  (0) 2024.10.20
[Java] ์ถ”์ƒํ™” (Abstraction)  (0) 2024.10.18
Comments