Skip to content

Latest commit

ย 

History

History
215 lines (139 loc) ยท 10.2 KB

2.md

File metadata and controls

215 lines (139 loc) ยท 10.2 KB

๊ฐ์ฒด์ง€ํ–ฅ ํ•ต์‹ฌ ์›๋ฆฌ

์ž‘์„ฑ์ž : ์„œ๊ทธ๋ฆผ

Table of Contents

๊ฐ์ฒด ์ง€ํ–ฅ ํ•ต์‹ฌ ๊ฐœ๋…

๊ฐ์ฒด ์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋“ฑ์žฅ

1960๋…„๋Œ€ ๋ง, ํ•˜๋“œ์›จ์–ด ๋ฐœ์ „ ์†๋„์— ๋น„ํ•ด ์†Œํ”„ํŠธ์›จ์–ด ๋ฐœ์ „ ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค๋Š” ํ˜„์ƒ์— ๋”ฐ๋ผ '์†Œํ”„ํŠธ์›จ์–ด ์œ„๊ธฐ๋ก '์ด ๋“ฑ์žฅํ•˜์˜€๋‹ค. ์ด ๋•Œ ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ํŠน์ง•์„ ๋น„๊ตํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

์ด๋Ÿฌํ•œ ๋ถ„์„์— ๋”ฐ๋ผ ๋ชจ๋“ˆํ™”๋œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋Œ€ํ•œ ์š”๊ตฌ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๊ณ , ์ด๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์œผ๋กœ ์ด์–ด์กŒ๋‹ค.

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP, Object Oriented Programming)

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋“ฑ์žฅํ•˜๊ธฐ ์ด์ „์—๋Š” ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด์—ˆ๋‹ค. ์ ˆ์ฐจ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋Š” ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ์œ„ -> ์•„๋ž˜๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ๊ณ , ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ๊ธฐ์กด์— ๋งŒ๋“ค์–ด์ง„ ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌ + ๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•ด์•ผ ํ–ˆ๋‹ค.

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

์ดํ›„ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋“ฑ์žฅํ•˜๋ฉด์„œ ํ•จ์ˆ˜๋ณด๋‹ค ๋” ๋†’์€ ๋ชจ๋“ˆํ™”๋ฅผ ์ง€์›ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ฐ์ฒด ์ž์‹ ์ด ๊ฐ€์ง„ ๊ณ ์œ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๋“ฑ์žฅํ•˜๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ณด๋‹ค ๋†’์€ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๊ณ , ๊ฐ์ฒด ๊ฐ„ ์ž์œ ๋กœ์šด ๋ฐ์ดํ„ฐ ์ด๋™์ด ๊ฐ€๋Šฅํ•ด์ง€๊ฒŒ ๋˜์—ˆ๋‹ค.

๊ฐ์ฒด, ํด๋ž˜์Šค, ์ธ์Šคํ„ด์Šค

๊ด€๊ณ„ : ๊ฐ์ฒด โ–ถ๏ธŽ ํด๋ž˜์Šค โ–ถ๏ธŽ ์ธ์Šคํ„ด์Šค

  • ๊ฐ์ฒด (Object) : ํ˜„์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ์œ ๋ฌดํ˜•์˜ ๋ชจ๋“  ๊ฒƒ
    • ์ •์ ์ธ ์š”์†Œ : ๋ณ€์ˆ˜ (Variable)
    • ๋™์ ์ธ ์š”์†Œ : ๋ฉ”์„œ๋“œ (Method)
  • ํด๋ž˜์Šค (Class) : ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ฐ์ฒด๋ฅผ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด๋กœ ํ‘œํ˜„ํ•˜๋Š” ๊ฒƒ
    • ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ฐ์ฒด๋ฅผ ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ…œํ”Œ๋ฆฟ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    • ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์š”์†Œ์ด๋‹ค.
  • ์ธ์Šคํ„ด์Šค (Instance) : ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด
    • ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์„ฑ๋œ ์ปดํ“จํ„ฐ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๊ฐ์ฒด์ด๋‹ค.
    • Object = Instance

๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด์˜ ์ฃผ์š” ๊ฐœ๋…

์ƒ์† (Inheritance)

๋งŒ์ผ ๊ธฐ์กด์˜ ํด๋ž˜์Šค์— ๋Œ€ํ•˜์—ฌ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๊ฐ€ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์ด ๊ฒฝ์šฐ ์ƒ์†์„ ์ด์šฉํ•˜๋ฉด ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ํ•„์š”ํ•œ ๋ณ€์ˆ˜, ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ ์ •์˜ํ•˜์—ฌ ์ƒˆ๋กœ์šด ํด๋ž˜์Šค๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒ์†์˜ ํŠน์ง•

  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ž„
    ๊ณตํ†ต์  ์†์„ฑ/๊ธฐ๋Šฅ์— ๋Œ€ํ•˜์—ฌ ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ•ด๋‹น ํด๋ž˜์Šค์— ๋Œ€ํ•ด์„œ๋งŒ ์ˆ˜์ •ํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ฐ์ฒด๋“ค ์‚ฌ์ด์˜ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ์ด๋ฃฐ ์ˆ˜ ์žˆ์Œ
    • ์ƒ์œ„ ๊ณ„์ธต์œผ๋กœ ๊ฐˆ์ˆ˜๋ก : ์ผ๋ฐ˜ํ™”, ๋ณดํŽธํ™”
    • ํ•˜์œ„ ๊ณ„์ธต์œผ๋กœ ๊ฐˆ์ˆ˜๋ก : ํŠน์ˆ˜ํ™”, ๊ฐœ๋ณ„ํ™”
  • ์ž์‹ ํด๋ž˜์Šค๋Š” ์ž์‹ ์˜ ๋ณ€์ˆ˜&๋ฉ”์„œ๋“œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ƒ์† ๊ด€๊ณ„๋Š” ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ฐ˜๋“œ์‹œ is a~ ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝ๋˜์–ด์•ผ ํ•œ๋‹ค.
    ๋ถ€๋ชจ-์ž์‹ ํด๋ž˜์Šค์˜ ๊ด€๊ณ„๊ฐ€ ์ผ๋ฐ˜ํ™”, ํŠน๋ณ„ํ™” ๊ด€๊ณ„(is a~)์— ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ๋ฌธ๋ฒ•์ ์œผ๋กœ ๊ฐ•์ œ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํŒ๋‹จ๋˜์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์ง„๋‹ค.

์ƒ์†์˜ ์ข…๋ฅ˜

  • ๋‹ค์ค‘ ์ƒ์† : ํ•˜๋‚˜์˜ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ๊ฐ–๋Š” ๊ฒƒ
  • ๋‹จ์ผ ์ƒ์† : ํ•˜๋‚˜์˜ ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ๋‹จ ํ•˜๋‚˜์˜ ์ƒ์œ„ ํด๋ž˜์Šค๋ฅผ ๊ฐ–๋Š” ๊ฒƒ

์ž๋ฐ”๋Š” ๋‹จ์ผ ์ƒ์†๋งŒ์„ ์ง€์›ํ•˜๋Š” ์–ธ์–ด์ด๋‹ค.

๋‹คํ˜•์„ฑ (Polymorphism)

one interface, multiple implementation

์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•˜๋‚˜์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐœ๋…์ด๋‹ค.

๋‹คํ˜•์„ฑ์€ ๋ฉ”์„œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์„ ํ†ตํ•ด ์ง€์›๋œ๋‹ค.

  • ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading) : ํ•œ ํด๋ž˜์Šค ์•ˆ์— ๊ฐ™์€ ์ด๋ฆ„์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์ •์˜ํ•˜๋ฉด์„œ, ๊ทธ ์ธ์ž์˜ ๊ฐœ์ˆ˜๋‚˜ ์œ ํ˜•์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด ๋†“์€ ํ˜•ํƒœ
  • ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding) : ์ƒ์† ๊ด€๊ณ„์— ์žˆ๋Š” ํ•˜์œ„ ํด๋ž˜์Šค๊ฐ€ ์ƒ์œ„ ํด๋ž˜์Šค๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•˜๋Š” ๊ฒƒ (์žฌ์ •์˜๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์„ ์–ธ๋œ ํ˜•ํƒœ๋Š” ์ƒ์œ„ ํด๋ž˜์Šค์—์„œ ์„ ์–ธ๋œ ๊ฒƒ๊ณผ ๊ฐ™์Œ)

์ถ”์ƒํ™” (Abstraction)

ํ˜„์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ฐ์ฒด๋“ค์˜ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ๋ชจ์•„ ์ผ๋ฐ˜ํ™” ํ•ด๋†“๋Š” ๊ฒƒ์œผ๋กœ, ํด๋ž˜์Šค๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•œ๋‹ค.

ex. [๋น„ํ–‰๊ธฐ, ์ž๋™์ฐจ, ์—ด์ฐจ, ๋ฐฐ]๋Š” ํ™”๋ฌผ์ด๋‚˜ ์Šน๊ฐ์„ ์šด๋ฐ˜ํ•œ๋‹ค๋Š” ๊ณตํ†ต์  ํŠน์ง•์ด ์žˆ๋‹ค.
๋”ฐ๋ผ์„œ ์šด์†ก ์ˆ˜๋‹จ์œผ๋กœ ์ถ”์ƒํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋” ๋‚˜์•„๊ฐ€ ํด๋ž˜์Šค๋กœ์„œ ์ •์˜๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

์บก์Šํ™” (Encapsulation)

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

์ •๋ณด ์€๋‹‰ (Information Hiding)

์บก์Šํ™”๋œ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ํƒ์ ์œผ๋กœ ๊ณต๊ฐœํ•˜๊ฑฐ๋‚˜ ์ˆจ๊ธธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฐœ๋…์ด๋‹ค. ์ˆจ๊ฒจ์•ผ ํ•˜๋Š” ์ •๋ณด๋Š” private, ๊ณต๊ฐœํ•˜๋Š” ์ •๋ณด๋Š” public์œผ๋กœ ๊ด€๋ฆฌํ•˜๋ฉฐ ์™ธ๋ถ€์—์„œ๋Š” public๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋ฉ”์‹œ์ง€ (Message)

๊ฐ์ฒด๋“ค์€ ์„œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ํ†ต์‹ ํ•œ๋‹ค.

๊ฐ์ฒด ๊ฐ„์— ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐ์ฒด๋Š” ๋™์ผํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์—†์œผ๋ฉฐ, ์„œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋ฐ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ์œ„์น˜๋Š” ์ œ์•ฝ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.

๋ฉ”์‹œ์ง€ ํ˜•์‹

  • ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ๋Œ€์ƒ ๊ฐ์ฒด ex. car
  • ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ฉ”์‹œ์ง€ ex. changeGear
  • ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๋ถ€๊ฐ€์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ์ •๋ณด ex. lowerGear

ex. Person ๊ฐ์ฒด๊ฐ€ Car ๊ฐ์ฒด์—๊ฒŒ ๋‚ฎ์€ ๊ธฐ์–ด๋กœ ๋ณ€์†์„ ์š”์ฒญํ•˜๊ณ  ์‹ถ์œผ๋ฉด car.changeGear(lowerGear)์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋ฉด ๋œ๋‹ค.

ํด๋ž˜์Šค์˜ ๊ตฌ์กฐ

ํด๋ž˜์Šค์˜ ๊ตฌ์„ฑ ์š”์†Œ

ํด๋ž˜์Šค ์„ ์–ธ๋ถ€

  • ์ ‘๊ทผ ์ œํ•œ์ž (Access Modifier)
  • ํด๋ž˜์Šค (Class) + ํด๋ž˜์Šค๋ช…

ํด๋ž˜์Šค ๋ชธ์ฒด

  • ์ƒ์„ฑ์ž (Constructor)
  • ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ (Variable)
  • ๋ฉ”์„œ๋“œ (Method)

๋ณ€์ˆ˜์™€ ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ ๋ฌถ์Œ์œผ๋กœ์„œ ์บก์Šํ™”๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

public class Employee { // ํด๋ž˜์Šค ์„ ์–ธ๋ถ€
  // ๋ฉค๋ฒ„ ๋ณ€์ˆ˜ (Variable)
  private String name;
  private String dept;

  // ์ƒ์„ฑ์ž (Constructor)
  public Employee(String name, String dept) {
    this.name = name;
    this.dept = dept;
  }

  // ๋ฉ”์„œ๋“œ (Method)
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}

ํด๋ž˜์Šค Modifier

์ ‘๊ทผ ๊ถŒํ•œ๊ณผ ๊ด€๋ จ๋œ modifier๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์˜ ํด๋ž˜์Šค์—์„œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ

  • ์ ‘๊ทผ ๊ถŒํ•œ ์˜ˆ์•ฝ์–ด
    • public : ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ํด๋ž˜์Šค์ž„์„ ์˜๋ฏธ
  • ํ™œ์šฉ ๋ฐฉ๋ฒ• ์˜ˆ์•ฝ์–ด
    • final : ์ž์‹ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†๋Š” ํด๋ž˜์Šค์ž„์„ ์˜๋ฏธ
    • abstract : ๊ฐ์ฒด ์ƒ์„ฑ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธ

๊ฐ์ฒด ์ƒ์„ฑ

[๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜ ์ด๋ฆ„] = new [ํด๋ž˜์Šค ์ด๋ฆ„]();

  • ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉํ•  ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ํ• ๋‹นํ•˜๋Š” ๊ณผ์ •์—์„œ ์˜ˆ์•ฝ์–ด new๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ƒ์„ฑ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ๊ฐ’(๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ)์„ ๊ฐ์ฒด ์ฐธ์กฐ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•œ๋‹ค.
  • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
Employee emp1 = new Employee('John', 'sales');
Employee emp2 = new Employee('Alice', 'design');

๋ฉค๋ฒ„ ๋ณ€์ˆ˜์˜ ์„ ์–ธ

  • ์ „์—ญ(Global) ๋ณ€์ˆ˜ : ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ผ๊ณ ๋„ ์นญํ•˜๋ฉฐ, ํด๋ž˜์Šค์˜ ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ์—์„œ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ง€์—ญ(Local) ๋ณ€์ˆ˜ : ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ณ€์ˆ˜๋Š” modifier๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ ๊ถŒํ•œ์ด๋‚˜ ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ ์ œ์–ดํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ์ •๋ณด ์€๋‹‰(Information Hiding) ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ ‘๊ทผ ๊ถŒํ•œ

  • public : ๋ชจ๋“  ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ
  • (default) : ๋™์ผ ํŒจํ‚ค์ง€์— ์†ํ•˜๋Š” ํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • protected : ๋™์ผ ํŒจํ‚ค์ง€์— ์†ํ•˜๊ฑฐ๋‚˜ ํ•˜์œ„ ํด๋ž˜์Šค ๊ด€๊ณ„์˜ ํด๋ž˜์Šค๊ฐ€ ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • private : ํ•ด๋‹น ํด๋ž˜์Šค ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ

ํ™œ์šฉ ๋ฐฉ๋ฒ•

  • final : ๋ณ€์ˆ˜๋ฅผ ์ƒ์ˆ˜๋กœ ์ด์šฉ (๊ฐ’ ๋ณ€๊ฒฝ ๋ถˆ๊ฐ€)
  • static : ํด๋ž˜์Šค์— ์†Œ์†๋œ ํด๋ž˜์Šค ๋ณ€์ˆ˜๋กœ ์ด์šฉ

๋ฉ”์„œ๋“œ์˜ ์„ ์–ธ

๋ฉ”์„œ๋“œ ๊ตฌ์„ฑ ์š”์†Œ๋กœ๋Š” ์ ‘๊ทผ ์ œํ•œ์ž, ๋ฐ˜ํ™˜ํ˜•, ๋ฉ”์„œ๋“œ๋ช…, ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋‹ค. ์ ‘๊ทผ ์ œํ•œ์ž(modifier)๋กœ๋Š” ๋‹ค์Œ์„ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

์ ‘๊ทผ ๊ถŒํ•œ

๋ฉค๋ฒ„ ๋ณ€์ˆ˜์™€ ๋™์ผ

ํ™œ์šฉ ๋ฐฉ๋ฒ•

  • final : Overriding์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ
  • static : ํด๋ž˜์Šค์— ์†Œ์†๋œ ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ
  • abstract : ์ถ”์ƒ ๋ฉ”์„œ๋“œ, ํ•˜์œ„ ํด๋ž˜์Šค์— ์˜ํ•ด ๊ตฌํ˜„
  • synchronized : Thread์˜ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•œ ๋ฉ”์„œ๋“œ

๋ฉ”์„œ๋“œ์˜ ์„ ์–ธ๋ถ€์ธ ๋ฐ˜ํ™˜ํ˜•, ๋ฉ”์„œ๋“œ๋ช…, ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์„ธ ๊ฐ€์ง€ ์š”์†Œ๋ฅผ ํ•ฉ์ณ ๋ฉ”์„œ๋“œ ์‹œ๊ทธ๋‹ˆ์ณ(Signature) ๋ผ๊ณ  ํ•œ๋‹ค.

Getter/Setter ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•œ ์ •๋ณด ์€๋‹‰

๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค์„ private์œผ๋กœ ์„ ์–ธํ•˜๊ณ  public ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋„๋ก ํด๋ž˜์Šค๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ •๋ณด ์€๋‹‰์˜ ๊ฐœ๋…์„ ๊ตฌํ˜„ํ•œ๋‹ค.

  • Getter : private ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜
  • Setter : private ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ €์žฅ