๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

[๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ] ์ƒ์†, ์ถ”์ƒํด๋ž˜์Šค (2023.04.11) ๋ณธ๋ฌธ

full stack/JAVA

[๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ] ์ƒ์†, ์ถ”์ƒํด๋ž˜์Šค (2023.04.11)

Shinjio 2023. 4. 11. 17:57

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•

1. ์บก์Šํ™”(Encapsulation)  : ์ •๋ณด์€๋‹‰ 

2. ์ถ”์ƒํ™”(Abstract)

3. ์ƒ์†(inheritance) โ˜…โ˜…โ˜…โ˜…โ˜…โ˜…

    ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์žฅ์ ์˜ ๋Œ€๋ถ€๋ถ„์€ ์ƒ์† ํŠน์ง•์œผ๋กœ๋ถ€ํ„ฐ ๋‚˜์˜จ๋‹ค. 

5. ๋‹คํ˜•์„ฑ

 

์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ ๋ฌธ์ œ.
๋‹ค์Œ ์ค‘ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŠน์ง•์œผ๋กœ ์˜ณ์ง€ ์•Š์€ ๊ฒƒ์€? 

1. ์บก์Šํ™”
2. ์ถ”์ƒํ™”
3. ์ •๋ณด์€๋‹‰
4. ์ƒ์†
์ •๋‹ต 3๋ฒˆ → ์ •๋ณด์€๋‹‰์€ ์บก์Šํ™”์— ํฌํ•จ

 

๐ŸŽˆ ์ƒ์† 

์‚ฌ์ „์  ์ •์˜ : ๋ฌผ๋ ค๋ฐ›๋‹ค, ์ด์–ด๋ฐ›๋‹ค, ๋’ค๋ฅผ ์ž‡๋‹ค

 

๋‹ค๋ฅธ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ•„๋“œ, ๊ธฐ๋Šฅ์„ ๋ฌผ๋ ค๋ฐ›๋Š”๋‹ค๋Š” ๋œป

๋ถ€๋ชจ ํด๋ž˜์Šค(์ˆ˜ํผ ํด๋ž˜์Šค)๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ž์‹ ํด๋ž˜์Šค(์„œ๋ธŒ ํด๋ž˜์Šค)๊ฐ€ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก 

๊ธฐ์กด์˜ ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜(๋ฐ์ดํ„ฐ)์™€ ๋ฉ”์„œ๋“œ(๋กœ์ง, ์ฝ”๋“œ)๋ฅผ ๋ฌผ๋ ค๋ฐ›์•„ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ

 

 

 

๊ทธ๋ฆผ์—์„œ ํ™”์‚ดํ‘œ๋Š” ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉํ–ฅ์„ ์˜๋ฏธํ•จ → ์ž์‹์—์„œ ๋ถ€๋ชจ๋กœ ํƒ์ƒ‰ํ•ด ๋‚˜๊ฐ„๋‹ค.

์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ. ์—†์œผ๋ฉด ๋ถ€๋ชจํด๋ž˜์Šค๋กœ ์ด๋™ํ•ด์„œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ

 

์ฝ”๋“œ๋กœ ์ƒ์† ๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ

 

 

์ƒ์† ์ฝ”๋“œ ์ž‘์„ฑ
public class ์ž์‹ํด๋ž˜์Šค๋ช… extends ๋ถ€๋ชจํด๋ž˜์Šค๋ช… {
}

 

 

 

 

๐Ÿ“– ์ƒ์†์˜ ํŠน์ง•

1. ๋‹ค์ค‘ ์ƒ์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 

๋ฐ์ดํ„ฐ๋ฅผ ํƒ์ƒ‰ํ•ด ๋‚˜๊ฐ€๋Š”๋ฐ ์ปดํŒŒ์ผ ๋ฐฉํ–ฅ์„ ์žƒ์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ

๊ทธ๋Ÿฌ๋‚˜ 1.8๋ฒ„์ „ ์ด์ƒ๋ถ€ํ„ฐ๋Š” ํŠน์ • ํด๋ž˜์Šค์—์„œ๋Š” ๋‹ค์ค‘์ƒ์†์ด ๊ฐ€๋Šฅ → ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฒจ๋ƒฅํ•œ ๊ฒƒ

์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์„ ์ˆ˜ ์—†๋‹ค. 

 

2. ์ƒ์†์˜ ํšŸ์ˆ˜์— ์ œํ•œ์„ ๋‘์ง€ ์•Š๋Š”๋‹ค. 

์ƒ์†์„ ํ•˜๋Š” ํšŸ์ˆ˜์—๋Š” ์ œํ•œ์ด ์—†์Œ

 

3. ๋ชจ๋“  ํด๋ž˜์Šค๋Š” java.lang.Object๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค. 

equals, toString ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

 

 

4. ์˜ค๋ฒ„๋ผ์ด๋”ฉ 

์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ํ—ท๊ฐˆ๋ฆฌ์ง€ ๋ง๊ฒƒ! (์˜ค๋ฒ„๋กœ๋”ฉ : ๊ฐ™์€ ํด๋ž˜์Šค ๋‚ด ์ค‘๋ณต์ •์˜)

์˜ค๋ฒ„๋ผ์ด๋”ฉ : ์žฌ์ •์˜ / ์ƒ์† ๊ด€๊ณ„์—์„œ ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋˜ {body}์•ˆ์— ๋‚ด์šฉ์ด ๋‹ค๋ฅด๋‹ค. ์ฆ‰, ์‹คํ–‰๋˜๋Š” ๊ธฐ๋Šฅ์ด ๋‹ค๋ฅด๋‹ค. (๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ฐ”๋€Œ์ง€ ์•Š์Œ!) ๊ตฌํ˜„๋˜๋Š” ๊ธฐ๋Šฅ์ด ๋‹ฌ๋ผ์ง

 

๋งˆ์šฐ์Šค ์šฐํด๋ฆญ -----> source ----> Override/Implement Methods... ํด๋ฆญ
์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜๊ธฐ ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์„ ํƒ ํ›„ OK
{} ๋‚ด๋ถ€๋งŒ ์ž‘์„ฑ!

 

 

โš™ ์ƒ์†์˜ ์žฅ์ 

1. ๊ธฐ์กด ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜์™€ ์ฝ”๋“œ๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

2. ๋จผ์ € ์ž‘์„ฑ๋œ ๊ฒ€์ฆ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ์žฌ์‚ฌ์šฉ

3. ํด๋ž˜์Šค ๊ฐ„ ๊ณ„์ธต์  ๋ถ„๋ฅ˜ ๋ฐ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ

 

โš™ ๊ฐ์ฒดํ˜• ๋ฐ์ดํ„ฐ์˜ ํ˜•๋ณ€ํ™˜

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ์˜ ํ˜•๋ณ€ํ™˜

๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜๊ณผ ๋ฌต์‹œ์  ํ˜•๋ณ€ํ™˜์œผ๋กœ ๋‚˜๋‰จ. ๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํฐ ๋ฐ์ดํ„ฐ์—์„œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•˜์—ฌ, ๋ฌต์‹œ์  ํ˜•๋ณ€ํ™˜์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๋ฐ์ดํ„ฐ์—์„œ ํฐ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ. 

 

๊ฐ์ฒด์˜ ํƒ€์ž…์— ๋Œ€ํ•ด์„œ๋„ ํ˜•๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•จ.

๊ฐ์ฒด ํƒ€์ž…์˜ ํ˜•๋ณ€ํ™”๋Š” ์—…์บ์ŠคํŒ…๊ณผ ๋‹ค์šด์บ์ŠคํŒ…์œผ๋กœ ๋‚˜๋‰จ. ๊ฐ์ฒด ํƒ€์ž…์˜ ํ˜•๋ณ€ํ™˜์ด ์ด๋ฃจ์–ด์ง€๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‘ ๊ฐ์ฒด๊ฐ€ ์ƒ์† ๊ด€๊ณ„์—ฌ์•ผ ํ•จ. ์—…์บ์ŠคํŒ… ํ˜•๋ณ€ํ™˜์€ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค ํƒ€์ž…์œผ๋กœ ํ˜•ํƒœ๊ฐ€ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ฌต์‹œ์  ํ˜•๋ณ€ํ™˜๊ณผ ์œ ์‚ฌํ•จ. ๋ฐ˜๋ฉด, ๋‹ค์šด์บ์ŠคํŒ…์€ ๋ถ€๋ชจ ํด๋ž˜์Šค๊ฐ€ ์ž์‹ ํด๋ž˜์Šค๋กœ ํ˜•๋ณ€ํ™˜ ๋˜๋Š” ๊ฒƒ์ธ๋ฐ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•จ(๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜). ๋ถ€๋ชจ ํด๋ž˜์Šค๋‚˜ ์›๋ž˜ ์ž์‹ ํด๋ž˜์Šค์˜€๋˜ ์ฆ‰, ์—…์บ์ŠคํŒ… ๋œ ๊ฐ์ฒด๊ฐ€ ์›๋ž˜์˜ ํƒ€์ž…์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๊ฒƒ๋งŒ ๊ฐ€๋Šฅ 

 

 

๋‹ค์šด์บ์ŠคํŒ…์‹œ ์˜ค๋ฅ˜ ๋ฐœ์ƒ

 

๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ ์šฉ์–ด ์ •๋ฆฌ
1. ํด๋ž˜์Šค
2. Object
3. ํ•„๋“œ/๋ฉ”์„œ๋“œ
4. ์ƒ์† : ์˜ค๋ฒ„๋ผ์ด๋”ฉ
์ƒ์† ๊ด€๊ณ„์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ 
{body}๋ฅผ ๋‹ค๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•œ๋‹ค
5. ๋‹ค์šด์บ์ŠคํŒ…(๋ช…์‹œ์  ํ˜•๋ณ€ํ™˜)
์—…์บ์ŠคํŒ… ๋˜์–ด ์žˆ๋Š” ๊ฐ์ฒด๋งŒ ๋‹ค์šด์บ์ŠคํŒ…์ด ๊ฐ€๋Šฅํ•˜๋‹ค
์›๋ž˜ ์ž๋ฃŒํ˜•์œผ๋กœ ๋˜๋Œ๋ฆฐ๋‹ค
6. ์—…์บ์ŠคํŒ…(์ž๋™ ํ˜•๋ณ€ํ™˜)
์ž์‹ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจํด๋ž˜์Šค์˜ ์ž๋ฃŒํ˜•์œผ๋กœ ๋ณ€ํ™˜

 

๐ŸŽˆ ์ถ”์ƒํด๋ž˜์Šค

โš™ ์ถ”์ƒํ™”

๊ฐ์ฒด ๊ฐ„์˜ ๊ณตํ†ต์ ์„ ์ฐพ์•„๋‚ด์„œ ๊ณตํ†ต์˜ ์กฐ์ƒ์„ ๋งž๋“œ๋Š” ์ž‘์—…

์ƒ์† ๊ณ„์ธต๋„๋ฅผ ๋”ฐ๋ผ ์˜ฌ๋ผ๊ฐˆ์ˆ˜๋ก ํด๋ž˜์Šค์˜ ์ถ”์ƒํ™”๋Š” ๋”์šฑ ์‹ฌํ™”๋œ๋‹ค. 

 

โš™ ๊ตฌ์ฒดํ™”

์ƒ์†์„ ํ†ตํ•ด ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„, ํ™•์žฅํ•˜๋Š” ์ž‘์—…

 

โš™ ์ถ”์ƒ๋ฉ”์„œ๋“œ(Abstact Method)

์„ ์–ธ๋˜์–ด ์žˆ์œผ๋‚˜ ๋ฉ”์†Œ๋“œ์— ๋Œ€ํ•œ ๋กœ์ง์ด ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๋ฉ”์†Œ๋“œ

์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ์„œ๋ธŒ ํด๋ž˜์Šค(์ž์‹ ํด๋ž˜์Šค)์—์„œ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•˜์—ฌ ๊ตฌํ˜„

์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ๋‹ค๋ฉด ํด๋ž˜์Šค ๋˜ํ•œ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๋ฐ”๊ฟ”์ค˜์•ผ ํ•จ

 

โš™ ์ถ”์ƒ ํด๋ž˜์Šค(Abstract Class)

์—ฌ๋Ÿฌ ํด๋ž˜์Šค๋“ค ๊ฐ„์— ๊ณตํ†ต๋˜๋Š” ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”์ถœํ•ด ๋งŒ๋“ค์–ด์ง€๋Š” ํด๋ž˜์Šค

์ถ”์ƒ ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•จ

์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋‚˜๋„ ์—†์–ด๋„ ํด๋ž˜์Šค ์•ž์— Abstract๋งŒ ์„ ์–ธํ•˜์—ฌ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค

 

โš™ ์ถ”์ƒ ํด๋ž˜์Šค์˜ ํ•„์š”์„ฑ

์ถ”์ƒํ™”๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ์„ค๊ณ„ํ•˜๊ณ  ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์ƒ์†๋ฐ›์Œ์œผ๋กœ์จ ๊ผญ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์žŠ์–ด๋ฒ„๋ฆฌ์ง€ ์•Š๋„๋ก ๊ฐ•์ œํ™”์‹œ์ผœ์คŒ