๐Ÿคทโ€โ™€๏ธ ๊ฐœ๋…๊ณต๋ถ€: 0. ๊ธฐ์ดˆ ๊ฐ์ฒด์ง€ํ–ฅ

Ko Seoyoungยท2021๋…„ 2์›” 2์ผ
1
post-thumbnail

1๏ธโƒฃ class๋ž€ ๋ฌด์—‡์ผ๊นŒ? instance๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๐Ÿง class๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ(OOP: Object-Oriented Programming)์—์„œ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๋Š” ํ‹€ ๋˜๋Š” ์„ค๊ณ„๋„์™€ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๐Ÿ‘€ ๊ทธ๋ ‡๋‹ค๋ฉด ๊ฐ์ฒด์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฌด์—‡์ผ๊นŒ์š”?

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

๋”ฐ๋ผ์„œ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๊ฐ์ฒด์˜ ์ƒํƒœ(state)์™€ ํ–‰๋™(behavior)์„ ๊ตฌ์ฒดํ™”ํ•˜๋Š” ํ˜•ํƒœ์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๊ณ , ์ด๋•Œ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด ๋‚ด๊ธฐ ์œ„ํ•œ ์„ค๊ณ„๋„์™€ ๊ฐ™์€ ๊ฐœ๋…์„ ํด๋ž˜์Šค(class)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ž˜์Šค๋Š” ๊ฐ์ฒด์˜ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•„๋“œ(field)์™€ ๊ฐ์ฒด์˜ ํ–‰๋™์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์†Œ๋“œ(method)๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. field๋Š” ํด๋ž˜์Šค์— ํฌํ•จ๋œ ๋ณ€์ˆ˜(variable)๋ฅผ ์˜๋ฏธํ•˜๊ณ , method๋Š” ์–ด๋– ํ•œ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น๋ฌธ์˜ ์ง‘ํ•ฉ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿง instance๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์šฐ์„  ํ•ด๋‹น ํด๋ž˜์Šค ํƒ€์ž…์˜ ๊ฐ์ฒด(object)๋ฅผ ์„ ์–ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค๋กœ๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ณผ์ •์„ ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šคํ™”๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ด๋ ‡๊ฒŒ ์„ ์–ธ๋œ ํ•ด๋‹น ํด๋ž˜์Šค ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ์ธ์Šคํ„ด์Šค(instance)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (์ฆ‰, ์ธ์Šคํ„ด์Šค๋ž€ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.)

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

(+ Animal์ด๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ์žˆ๋‹ค๋ฉด 'dog๋Š” ๊ฐ์ฒด', 'dog์€ Animal์˜ instance'๊ฐ€ ๋งž๋Š” ํ‘œํ˜„)


2๏ธโƒฃ method๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์ƒ์„ฑ์ž๋ž€ ๋ฌด์—‡์ผ๊นŒ?

๐Ÿง method๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

์•ž์„œ ํด๋ž˜์Šค์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, ํด๋ž˜์Šค์—์„œ๋Š” ๋ฉ”์†Œ๋“œ(method)๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์˜ ํ–‰๋™์„ ๊ตฌ์ฒดํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ๋ฉ”์†Œ๋“œ๋Š” ์–ด๋– ํ•œ ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ๋ช…๋ น๋ฌธ์˜ ์ง‘ํ•ฉ์ด๋ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

(+ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๋Š” ๋˜๋„๋ก ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ๊ธฐ๋Šฅ๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.)

๐Ÿ‘€ ๊ทธ๋ ‡๋‹ค๋ฉด ์ƒ์„ฑ์ž๋ž€ ๋ฌด์—‡์ผ๊นŒ์š”?

์ƒ์„ฑ์ž(constructor)๋Š” ํ•ด๋‹น ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ์ธ์Šคํ„ด์Šคํ™”๋  ๋•Œ ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ ํ•„๋“œ๋ฅผ ์ดˆ๊ธฐํ™” ํ•ด์ฃผ๋Š” ํŠน๋ณ„ํ•œ ํƒ€์ž…์˜ ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ํ˜ธ์ถœ๋˜๊ณ  ์ œ์ผ ๋จผ์ € ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒ์„ฑ์ž๋Š” ์ผ์ข…์˜ ๋ฉ”์†Œ๋“œ์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ, ๋ช…๋ฐฑํ•œ ๋ฆฌํ„ด ํƒ€์ž…์ด ์—†๊ณ  ๋ฉ”์†Œ๋“œ์™€๋Š” ๋‹ค๋ฅธ ๊ทœ์น™๋“ค์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ ๋ฉ”์†Œ๋“œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.


3๏ธโƒฃ interface๋ž€ ๋ฌด์—‡์ผ๊นŒ?

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์–ด๋–ค ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ช…์ œ๋กœ ์ด ๊ฐ์ฒด๊ฐ€ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋“ค์„ ์ œ๊ณตํ•˜๊ณ  ์–ด๋˜ ์—ญํ• ์„ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ผ์ข…์˜ ์„ค๋ช…์„œ๋กœ ๋Œ€๋ถ€๋ถ„ ์„ค๊ณ„๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‹ค์ฒดํด๋ž˜์Šค(๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํด๋ž˜์Šค)์˜ ๊ณตํ†ต์ ์ธ ์†์„ฑ(ํ•„๋“œ, ๋ฉ”์†Œ๋“œ)๋งŒ ๋ฝ‘์•„๋‚ด์–ด ์„ ์–ธํ•œ ํด๋ž˜์Šค์ธ ์ถ”์ƒํด๋ž˜์Šค(abstract class)์™€ ๋น„์Šทํ•œ ๊ฐœ๋…์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘‰ ์ถ”์ƒํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค ๋น„๊ต

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

์ฆ‰, ์ถ”์ƒํด๋ž˜์Šค A,B๊ฐ€ ์žˆ์„ ๋•Œ, ํด๋ž˜์Šค C๋Š” A,B๋ฅผ ๋™์‹œ์— ์ƒ์†๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

abstract class A {}
abstract class B {}
class C extends A, B --> (X)

๋ฐ˜๋ฉด A,B๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์ธ ๊ฒฝ์šฐ

interface class A {}
interface class B {}
class C implements A, B --> (O)

๐Ÿ‘‰ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์žฅ์ 

๋‹ค์ค‘์ƒ์†์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์  ์ด์™ธ์—๋„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋Œ€๊ทœ๋ชจ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ์‹œ ์ผ๊ด€๋˜๊ณ  ์ •ํ˜•ํ™”๋œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ‘œ์ค€ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  2. ํด๋ž˜์Šค์˜ ์ž‘์„ฑ๊ณผ ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์„ ๋™์‹œ์— ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐœ๋ฐœ ์‹œ๊ฐ„์„ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ํด๋ž˜์Šค์™€ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์—ฐ๊ฒฐํ•˜๋ฉด, ์ง์ ‘์ ์ด์ง€ ์•Š์€ ๊ฐ„์ ‘์ ์ธ ๊ด€๊ณ„๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์ด ๊ด€๋ จ๋œ ๋‹ค๋ฅธ ํด๋ž˜์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋„๋ก ํด๋ž˜์Šค๋งˆ๋‹ค ๋…๋ฆฝ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

4๏ธโƒฃ ์ ‘๊ทผ์ œํ•œ์ž๋ž€ ๋ฌด์—‡์ผ๊นŒ? ์™œ ์‚ฌ์šฉ๋ ๊นŒ?

๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ์ •๋ณด ์€๋‹‰(data hiding)์ด๋ž€ ์‚ฌ์šฉ์ž๊ฐ€ ๊ตณ์ด ์•Œ ํ•„์š”๊ฐ€ ์—†๋Š” ์ •๋ณด๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ˆจ๊ฒจ์•ผ ํ•œ๋‹ค๋Š” ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž๋Š” ์–ธ์ œ๋‚˜ ์ตœ์†Œํ•œ์˜ ์ •๋ณด๋งŒ์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์—์„œ๋Š” ์ด๋Ÿฌํ•œ ์ •๋ณด ์€๋‹‰์„ ์œ„ํ•ด ์ ‘๊ทผ ์ œ์–ด์ž(access modifier)๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ์˜ ์ง์ ‘์ ์ธ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉค๋ฒ„๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ •๋ณด ์€๋‹‰์„ ๊ตฌ์ฒดํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ public ๋ฉค๋ฒ„๋Š” ๋ชจ๋“  ๊ฐ์ฒด์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, private ๋ฉค๋ฒ„๋Š” ํ•ด๋‹น ๊ฐ์ฒด ๋‚ด์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋งŒ์ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋„ค ๊ฐ€์ง€์˜ ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

1. public

  • Public์€ package, Class๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š์•„๋„ ๋ชจ๋“  ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์ œํ•œ์ž์ด๋‹ค.
    (๊ฐ™์€ ํด๋ž˜์Šค๋‚ด์—์„œ ํ—ˆ์šฉ, ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋‚ด์˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค ํ—ˆ์šฉ, ๋‹ค๋ฅธ ํŒจํ‚ค์ง€์˜ ๋‹ค๋ฅธ ํด๋ž˜์Šค์—์„œ ํ—ˆ์šฉ)

2. protected

  • Protected๋Š” ๊ฐ™์€ package์—์„œ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ณ  ๋‹ค๋ฅธ package์—์„œ ์ ‘๊ทผํ•˜๋ ค๋ฉด ํ•ด๋‹น Class๋ฅผ ์ƒ์†๋ฐ›์„ ์‹œ์—๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์ œํ•œ์ž์ด๋‹ค.
    (๊ฐ™์€ Class๋‚ด์—์„œ ์ ‘๊ทผ ํ—ˆ์šฉ, ๊ฐ™์€ package์˜ ๋‹ค๋ฅธ Class์—์„œ ์ ‘๊ทผ ํ—ˆ์šฉ, ๋‹ค๋ฅธ package์˜ ์ƒ์†๋ฐ›์€ Class ์ ‘๊ทผ ํ—ˆ์šฉ, ๋‹ค๋ฅธ package์˜ ๋‹ค๋ฅธ Class ์ ‘๊ทผ ๋ถˆ๊ฐ€)

3. default

  • default๋Š” ๋™์ผ package์—์„œ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋Š” ์ œํ•œ์ž๋กœ, ์ ‘๊ทผ ์ œํ•œ์ž๊ฐ€ ์ƒ๋žต๋˜์–ด ์žˆ์„๊ฒฝ์šฐ์—” ๊ธฐ๋ณธ์ ์œผ๋กœ default ์ ‘๊ทผ ์ œํ•œ์ž๊ฐ€ ์ ์šฉ๋œ๋‹ค.
    (๊ฐ™์€ class ๋‚ด์—์„œ ํ—ˆ์šฉ, ๊ฐ™์€ package ๋‚ด์˜ ๋‹ค๋ฅธ class์—์„œ ํ—ˆ์šฉ, ๋‹ค๋ฅธ package์—์„œ๋Š” ์ ‘๊ทผ ๋ถˆ๊ฐ€)

4. protected

  • private๋Š” ๋™์ผ package, ๋‹ค๋ฅธ package ๋ชจ๋‘ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ๊ฐ™์€ Class ๋‚ด์—์„œ๋งŒ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๋Š” ์ œํ•œ์ž์ด๋‹ค.
    (๊ฐ™์€ java ํŒŒ์ผ ์•ˆ์˜ ์„œ๋กœ ๋‹ค๋ฅธ Class๋ผ๋„ ์ ‘๊ทผ ๋ถˆ๊ฐ€)

5๏ธโƒฃ ์บก์Šํ™”๊ฐ€ ๋ฌด์—‡์ผ๊นŒ?

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

์บก์Šํ™”๋Š” ๋ณดํ†ต ๋ฐ์ดํ„ฐ๋“ค์€ ๊ณต๊ฐœํ•˜์ง€ ์•Š๊ณ  ๋ช‡๊ฐœ์˜ ๋ฉ”์†Œ๋“œ ๋งŒ์„ ์™ธ๋ถ€์— ๊ณต๊ฐœํ•จ์œผ๋กœ์จ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.

์บก์Šํ™”์˜ ์žฅ์ 

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

6๏ธโƒฃ ๋‹คํ˜•์„ฑ์ด ๋ฌด์—‡์ผ๊นŒ?

๊ด€์šฉ์ ์ธ ๊ฐœ๋…์˜ ๋‹คํ˜•์„ฑ์ด๋ž€ ๊ฐ™์€ ๋ชจ์–‘์˜ ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ–‰์œ„๋ฅผ ํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ฐœ๋…์€ ์ผ์ƒ์ƒํ™œ ์† ํ‚ค๋ณด๋“œ์—์„œ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆซ์žํ‚ค [ 1 ]๊ณผ ์˜๋ฌธํ‚ค [ A ]๋Š” ์„œ๋กœ ๋น„์Šทํ•œ ํ‚ค๋ณด๋“œ ๋ชจ์–‘์„ ๊ฐ€์กŒ์ง€๋งŒ '๋ˆ„๋ฅธ๋‹ค'๋Š” ํ–‰์œ„๋ฅผ ํ–ˆ์„ ๋•Œ [ 1 ]์€ ์ˆซ์ž 1์„ ์ถœ๋ ฅํ•˜๊ณ , [ A ]๋Š” ๋ฌธ์ž 'A'๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋‹ค๋ฅธ ํ–‰์œ„๋ฅผ ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ๋‹คํ˜•์„ฑ์ด๋ž€ ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋‚˜ ํด๋ž˜์Šค๊ฐ€ ์žˆ์„ ๋•Œ ์ด๊ฒƒ๋“ค์ด ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด๊ณ , ์˜ค๋ฒ„๋ผ์ด๋”ฉ(overriding)๊ณผ ์˜ค๋ฒ„๋กœ๋”ฉ(overloading) ๋“ฑ์„ ํ†ตํ•ด ๊ตฌํ˜„๋  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿง Overriding ์ด๋ž€?

์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ๋น„์Šทํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๊ณ  ์žˆ์ง€๋งŒ ์ˆ˜ํ–‰๋˜๋Š” ๋™์ž‘์ด ๋‹ค๋ฅผ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด, ๋™๋ฌผ๋“ค์€ ๋ชจ๋‘ ๊ฐ์ž์˜ ์šธ์Œ์†Œ๋ฆฌ๊ฐ€ ์žˆ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ์ง€๋งŒ, ๊ณ ์–‘์ด๋Š” '์•ผ์˜น', ์˜ค๋ฆฌ๋Š” '๊ฝฅ๊ฝฅ'ํ•˜๋ฉฐ ๊ฐ์ž ๋‹ค๋ฅธ ์†Œ๋ฆฌ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.

์ด๋ฅผ ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋กœ ํ‘œํ˜„ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

abstract class Animal {
	/*...*/
    abstract void bark();
}

class Cat extends Animal {
	void bark(){
    	system.out.println("์•ผ์˜น")
    }
}

class Duck extends Animal {
	void bark(){
    	system.out.println("๊ฝฅ๊ฝฅ")
    }
}

์ด ๋•Œ Cat๊ณผ Duck์€ ์ถ”์ƒ ํด๋ž˜์Šค์ธ Animal์„ ์ƒ์† ๋ฐ›์•„ bark๋ผ๋Š” ๊ฐ™์€ ํ•จ์ˆ˜์— ๊ฐ์ž ๋‹ค๋ฅธ ์šธ์Œ์†Œ๋ฆฌ๋ฅผ ๋‚ด๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ์˜ค๋ฒ„๋ผ์ด๋”ฉ์€ ์ด๋ ‡๊ฒŒ barkํ•จ์ˆ˜์™€ ๊ฐ™์ด ์Šˆํผํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์Šˆํผํด๋ž˜์Šค์˜ (์ถ”์ƒ) ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ™์€ ์ด๋ฆ„, ๊ฐ™์€ ๋ฐ˜ํ™˜๊ฐ’, ๊ฐ™์€ ์ธ์ž๋กœ ๋ฉ”์†Œ๋“œ ๋‚ด์˜ ๋กœ์ง๋“ค์„ ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

๐Ÿง Overloading ์ด๋ž€?

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

ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž ๋˜ํ•œ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class Person {

	Person(){
    		// ๋””ํดํŠธ ์ƒ์„ฑ์ž
    	}
        
        Person(string name, int age) {
        	// ์ƒ์„ฑ์‹œ ์ด๋ฆ„๊ณผ ๋‚˜์ด๋ฅผ ์ž…๋ ฅ ๋ฐ›์Œ
        }
}

Refs

[Java] ์ ‘๊ทผ ์ œํ•œ์ž

์บก์Šํ™”(Encapsulation) ๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๋‹คํ˜•์„ฑ - ์ƒํ™œ์ฝ”๋”ฉ


profile
Web Frontend Developer ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป #React #Nextjs #ApolloClient

0๊ฐœ์˜ ๋Œ“๊ธ€