์•Œ๊ณ  ๋ณด๋ฉด ์žฌ๋ฐŒ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, OOP ํ์–ด๋ณด๊ธฐ

    ์•Œ๊ณ  ๋ณด๋ฉด ์žฌ๋ฐŒ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, OOP ํ์–ด๋ณด๊ธฐ


    ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(Object-Oriented Programming), ์ค„์—ฌ์„œ ํ”ํžˆ๋“ค OOP๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์„ค๊ณ„ ๋ฐฉ๋ฒ•๋ก ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. OOP๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„ ์ค‘ ํ•˜๋‚˜๋กœ, ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„์— ๋ฐ˜์˜ํ•œ๋‹ค๋Š” ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. OOP๋Š” 90๋…„๋Œ€ ์ดˆ๋ฐ˜๋ถ€ํ„ฐ ์œ ๋ช…ํ•ด์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์ง€๋งŒ ์•„์ง๊นŒ์ง€๋„ ์ „ ์„ธ๊ณ„์˜ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์„ค๊ณ„ ํŒจํ„ด ์ค‘ ํ•˜๋‚˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์•Œ์•„๋‘ฌ์„œ ๋‚˜์  ๊ฑด ์—†๋‹ค.

    ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์™œ ์•Œ์•„์•ผ ํ•˜๋‚˜์š”?

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

    ํ•„์ž๋Š” ๊ฐœ์ธ์ ์œผ๋กœ ์•„์ง๊นŒ์ง€ OOP๊ฐ€ ๊ดœ์ฐฎ์€ ์„ค๊ณ„ ํŒจํ„ด์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ณ  ์žˆ์ง€๋งŒ, ์—ฌ๋Ÿฌ๋ถ„์€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด OOP๋ณด๋‹ค ๋” ํšจ์œจ์ ์ด๊ณ  ๊ดœ์ฐฎ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

    ๋‹น์—ฐํžˆ ์–ด๋–ค ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์„ ํ˜ธํ•˜๋Š”์ง€๋Š” ๊ฐœ์ธ์˜ ์ž์œ ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅด๊ฒŒ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์–ด๋–ค ๊ธฐ์ˆ ์„ ์„ ํƒํ•  ๋•Œ๋Š” ํ•ด๋‹น ๊ธฐ์ˆ ์˜ ์žฅ๋‹จ์ ๊ณผ ๊ทธ ๊ธฐ์ˆ ์„ ์„ ํƒํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๊ณผ ์žƒ์„ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์ œ๋Œ€๋กœ ํŒŒ์•…ํ•˜๊ณ  ์žˆ์–ด์•ผ ์˜ฌ๋ฐ”๋ฅธ ์„ ํƒ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๋ถ„์ด ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์„ ํƒํ•œ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ OOP๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ๋งˆ์ฐฌ๊ฐ€์ง€๋‹ค.

    ๋˜ํ•œ OOP๋Š” 1990๋…„๋Œ€ ์ดˆ๋ฐ˜๋ถ€ํ„ฐ 2019๋…„์ธ ํ˜„์žฌ๊นŒ์ง€๋„ ๋ชจ๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์„ค๊ณ„์— ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๋Š” ๊ฐœ๋…์ด๋‹ค. ์•„๋ฌด๋ฆฌ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ๊ฐ™์€ ์ƒˆ๋กœ์šด ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ฃผ๋ชฉ๋ฐ›๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ ์•„์ง๊นŒ์ง€๋Š” OOP๊ฐ€ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„์— ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์€ ๋ถ€์ •ํ•  ์ˆ˜ ์—†๋Š” ํ˜„์‹ค์ด๋ฉฐ, ์ด๊ฒŒ ๋ฐ”๋กœ ์šฐ๋ฆฌ๊ฐ€ OOP๋ฅผ ์ข‹์€ ์‹ซ๋“  ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๋Š” ํ˜„์‹ค์ ์ธ ์ด์œ  ์ค‘์˜ ํ•˜๋‚˜์ด๋‹ค. (์ฐธ๊ณ ๋กœ Java, Python, C++ ๋“ฑ ๋ฉ”์ด์ € ์–ธ์–ด๋“ค๋„ ์ „๋ถ€ OOP๋ฅผ ์ง€์›ํ•˜๋Š” ์–ธ์–ด์ด๋‹ค.)

    ๊ทธ๋ž˜์„œ ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” OOP๊ฐ€ ์ถ”๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€, ๋˜ OOP๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๊ฐœ๋…๋“ค์€ ๋ฌด์—‡์ด ์žˆ๋Š”์ง€ ๊ฐ„๋žตํ•˜๊ฒŒ ์‚ดํŽด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

    ๊ฐ์ฒด ์ง€ํ–ฅ์ด๋ผ๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋‚˜์š”?

    OOP์˜ ์˜๋ฏธ์ธ Object-Oriented Programming์˜ Object-Oriented๋ฅผ ํ•œ๊ตญ๋ง๋กœ ๊ทธ๋Œ€๋กœ ์ง์—ญํ•˜๋ฉด ๊ฐ์ฒด ์ง€ํ–ฅ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๊ฐ์ฒด๋Š” ํ˜„์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ํ•˜๋‚˜ ํ•˜๋‚˜์˜ ๋…๋ฆฝ๋œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋ณดํ†ต OOP๋ฅผ ๋ฐฐ์šธ ๋•Œ ๊ฐ€์žฅ ์ฒ˜์Œ ์ ‘ํ•˜๋Š” ๊ฐœ๋…์ด ๋ฐ”๋กœ ์ด ๊ฐ์ฒด๋ผ๋Š” ๊ฐœ๋…์ธ๋ฐ, ์‚ฌ์‹ค ํ•œ๋ฒˆ ์ดํ•ดํ•˜๊ณ ๋‚˜๋ฉด ๊ฝค ๊ฐ„๋‹จํ•œ ๊ฐœ๋…์ด์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ํ‰์†Œ์— ์‚ด๋ฉด์„œ ์ž˜ ์ƒ๊ฐํ•ด๋ณด์ง€ ์•Š๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ž˜ ์ดํ•ด๊ฐ€ ๋˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

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

    ์žฌ๋ฏธ์—†๊ณ  ๋ณต์žกํ•œ ์šฉ์–ด๋Š” ์ผ๋‹จ ์ œ์ณ๋‘๊ณ  ์ผ๋‹จ ์˜ˆ์‹œ๋ฅผ ๋ณด๋ฉด์„œ ์˜์‹์˜ ํ๋ฆ„๋Œ€๋กœ ๋”ฐ๋ผ์™€๋ณด์ž.

    ํด๋ž˜์Šค์™€ ๊ฐ์ฒด

    ํ•„์ž๋Š” ์ด ํฌ์ŠคํŒ…์˜ ์„œ๋‘์—์„œ OOP๋ž€ ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ค๊ณ„์— ๋ฐ˜์˜ํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์ด์•ผ๊ธฐํ–ˆ๋‹ค. ์ด ๋ง์ด ๋œปํ•˜๋Š” ์˜๋ฏธ๋ฅผ ๋จผ์ € ์ดํ•ดํ•˜๊ณ  ๋‚˜๋ฉด ํด๋ž˜์Šค๋‚˜ ๊ฐ์ฒด ๊ฐ™์€ ๊ฒƒ์€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋จผ์ € OOP๊ฐ€ ์™œ ํ˜„์‹ค ์„ธ๊ณ„๋ฅผ ๋ฐ˜์˜ํ•œ ์„ค๊ณ„ ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•˜๋Š” ์ง€๋ฅผ ๋จผ์ € ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

    ๋ญ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜ˆ์‹œ๊ฐ€ ์žˆ๊ฒ ์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ์ผ์ƒ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ฌผ๊ฑด์„ ์˜ˆ๋กœ ๋“œ๋Š” ๊ฒƒ์ด ์ข€ ๋” ์™€๋‹ฟ์„ํ…Œ๋‹ˆ ํ•„์ž๋Š” ์Šค๋งˆํŠธํฐ์„ ์˜ˆ๋กœ ๋“ค์–ด์„œ ์„ค๋ช…์„ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ํ•„์ž๋Š” ์• ํ”Œ์—์„œ ๋งŒ๋“  ์•„์ดํฐ7์ด๋ผ๋Š” ๊ธฐ์ข…์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„์ดํฐ7์„ ์˜ˆ์‹œ๋กœ ์„ค๋ช…์„ ์‹œ์ž‘ํ•˜๊ฒ ๋‹ค.

    iphone7

    ๋จผ์ €, ์šฐ๋ฆฌ๊ฐ€ ์•„์ดํฐ7์ด๋ผ๋Š” ๊ฒƒ์„ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ œ์ผ ๋จผ์ € ์•„์ดํฐ7์ด ๋ฌด์—‡์ธ์ง€๋ถ€ํ„ฐ ์ •์˜ํ•ด์•ผํ•œ๋‹ค. ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š”์—†๋‹ค. ์ง„์งœ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์งœ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋Œ€์ถฉ ์ •์˜ํ•ด๋„ ๋œ๋‹ค.

    ํ•„์ž๊ฐ€ ์ง€๊ธˆ ๋ฐ”๋กœ ์ƒ๊ฐํ•ด๋‚ธ ์•„์ดํฐ7์€ ์•ฝ๊ฐ„ ๋™๊ธ€๋™๊ธ€ํ•œ ๋ฐ”๋””๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ํ–…ํ‹ฑ ์—”์ง„์ด ๋‚ด์žฅ๋œ ํ™ˆ ๋ฒ„ํŠผ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์‹œ๋ฆฌ์ฆˆ ์ตœ์ดˆ๋กœ 3.5mm ์ด์–ดํฐ ๋‹จ์ž๊ฐ€ ์—†์–ด์ง„ ์•„์ดํฐ ์‹œ๋ฆฌ์ฆˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. (๊ฐœ์ธ์ ์œผ๋กœ ์ด์–ดํฐ ๋‹จ์ž ์ข€ ๋‹ค์‹œ ๋„ฃ์–ด์คฌ์œผ๋ฉด ํ•œ๋‹คโ€ฆ)

    ์šฐ๋ฆฌ๋Š” ์—ฌ๊ธฐ์„œ ํ•œ๋ฐœ์ง ๋” ๋‚˜์•„๊ฐ€์„œ ์•„์ดํฐ7์˜ ์ƒ์œ„ ๊ฐœ๋…์ธ ์•„์ดํฐ์— ๋Œ€ํ•ด์„œ๋„ ์ •์˜ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ตญ ์•„์ดํฐ7์€ ์•„์ดํฐ์ด๋ผ๋Š” ๊ฐœ๋…์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ™•์žฅ๋œ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    ๊ทธ๋Ÿผ ์•„์ดํฐ์€ ๋ฌด์—‡์ผ๊นŒ? ์•„์ดํฐ์€ ์• ํ”Œ์—์„œ ์ œ์กฐํ•œ ์Šค๋งˆํŠธํฐ์œผ๋กœ, iOS๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์Šค๋งˆํŠธํฐ ์‹œ๋ฆฌ์ฆˆ์˜ ๋ช…์นญ์ด๋‹ค. ์ด๋•Œ ์•„์ดํฐ์€ ์•„์ดํฐ7 ์™ธ์—๋„ ์•„์ดํฐX, ์•„์ดํฐ8, ์•„์ดํฐ SE ๋“ฑ ์ˆ˜๋งŽ์€ ์•„์ดํฐ ์‹œ๋ฆฌ์ฆˆ์˜ ์ œํ’ˆ๋“ค์„ ํฌํ•จํ•˜๋Š” ์ข€ ๋” ํฌ๊ด„์ ์ธ ๊ฐœ๋…์ด๋‹ค.

    ์ผ์ƒ ์†์—์„œ ์šฐ๋ฆฌ๊ฐ€ ์นœ๊ตฌํ•œํ…Œ ๋„ˆ ํ•ธ๋“œํฐ ๋ญ ์จ?๋ผ๊ณ  ๋ฌผ์–ด๋ดค์„ ๋•Œ ์นœ๊ตฌ๊ฐ€ ์•„์ดํฐ ๋˜๋Š” ๊ฐค๋Ÿญ์‹œ๋ผ๊ณ  ๋Œ€๋‹ตํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž. ์ด๋•Œ ์นœ๊ตฌ๋Š” ์ž์‹ ์ด ์‚ฌ์šฉํ•˜๋Š” ์Šค๋งˆํŠธํฐ์ด ์•„์ดํฐX๋“  ๊ฐค๋Ÿญ์‹œ S10์ด๋“  ๊ฐ„์— ๋ฌด์˜์‹์ ์œผ๋กœ ์•„์ดํฐ์ด๋‚˜ ๊ฐค๋Ÿญ์‹œ๋ผ๋Š” ์ข€ ๋” ํฌ๊ด„์ ์ธ ๊ฐœ๋…์„ ๋– ์˜ฌ๋ฆฌ๊ณ  ํ•˜์œ„ ๊ฐœ๋…๋“ค์„ ๊ทธ๋ฃนํ•‘ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ ์ •๋„๋กœ ์ด๋Ÿฐ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์€ ์šฐ๋ฆฌ์—๊ฒŒ ์ด๋ฏธ ์ผ์ƒ์ ์ด๊ณ  ์ต์ˆ™ํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค. ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•˜์ง€ ๋ง์ž.

    iphones 아이폰7의 상위 개념인 아이폰은 모든 아이폰을 포괄할 수 있는 개념이 된다.

    ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ํ•˜์œ„ ๊ฐœ๋…์ธ ์•„์ดํฐ7์€ ์ƒ์œ„ ๊ฐœ๋…์ธ ์•„์ดํฐ์˜ ํŠน์ง•์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์•„์ดํฐ์˜ ๋‹ค๋ฅธ ํ•˜์œ„ ๊ฐœ๋…์ธ ์•„์ดํฐX์ด๋‚˜ ์•„์ดํฐ SE์™€ ๊ฐ™์€ ์•„์ดํฐ ์‹œ๋ฆฌ์ฆˆ๋“ค๋„ ์•„์ดํฐ์˜ ๋ชจ๋“  ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋๋‚ด๋ฉด ์•„์‰ฌ์šฐ๋‹ˆ ํ•œ๋ฒˆ๋งŒ ๋” ํ•ด๋ณด๋„๋ก ํ•˜์ž.

    ์•„์ดํฐ์˜ ์ƒ์œ„ ๊ฐœ๋…์€ ๋ฌด์—‡์ผ๊นŒ? ์•„์ดํฐ์€ ์• ํ”Œ์—์„œ ์ œ์กฐํ•˜๊ณ  iOS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์Šค๋งˆํŠธํฐ์˜ ๋ช…์นญ์ด๋‹ค. ์ฆ‰, ์•„์ดํฐ์˜ ์ƒ์œ„ ๊ฐœ๋…์€ ์Šค๋งˆํŠธํฐ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ์Šค๋งˆํŠธํฐ์ด๋ผ๋Š” ๊ฐœ๋…์€ ์•„์ดํฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐค๋Ÿญ์‹œ, ์ƒค์˜ค๋ฏธ, ๋ฒ ๊ฐ€์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์Šค๋งˆํŠธํฐ๋“ค๊นŒ์ง€ ๋ชจ๋‘ ํฌ๊ด„ํ•˜๋Š” ๊ฐœ๋…์ผํ…Œ๊ณ , ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ์Šค๋งˆํŠธํฐ์ด๋ผ๋Š” ๊ฐœ๋…์˜ ํ•˜์œ„ ๊ฐœ๋…๋“ค์€ ๋ชจ๋‘ ์Šค๋งˆํŠธํฐ์˜ ํŠน์ง•์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๋ฉฐ ์ž์‹ ๋“ค๋งŒ์˜ ๊ณ ์œ ํ•œ ํŠน์ง•์„ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

    smartphones 스마트폰이라는 개념은 아이폰, 갤럭시, 샤오미 등 모든 스마트폰을 포괄할 수 있는 개념이 된다.

    ์ด๋Ÿฐ ์‹์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์•„์ดํฐ7์ด๋ผ๋Š” ๊ฐœ๋…์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ๊ณ„์†ํ•ด์„œ ์ƒ์œ„ ๊ฐœ๋…์„ ์ •์˜ํ•ด๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

    ์•„์ดํฐ7 -> ์•„์ดํฐ -> ์Šค๋งˆํŠธํฐ -> ํœด๋Œ€์ „ํ™” -> ๋ฌด์„  ์ „ํ™”๊ธฐ -> ์ „ํ™”๊ธฐ -> ํ†ต์‹  ๊ธฐ๊ธฐ -> ๊ธฐ๊ณ„โ€ฆ

    ๊ฒฐ๊ตญ ์ด๋ ‡๊ฒŒ ์ƒ์œ„ ๊ฐœ๋…์„ ์ถ”์ ํ•ด๋‚˜๊ฐ€๋ฉด์„œ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด OOP์˜ ๊ธฐ์ดˆ์ด๊ณ , ์ด๋•Œ ์•„์ดํฐ7, ์•„์ดํฐ๊ณผ ๊ฐ™์€ ๊ฐœ๋…๋“ค์„ ํด๋ž˜์Šค(Class)๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐฉ๊ธˆ ํ–ˆ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ์œ„ ๊ฐœ๋…์„ ๋งŒ๋“ค์–ด๋‚˜๊ฐ€๋Š” ํ–‰์œ„ ์ž์ฒด๋ฅผ ์ถ”์ƒํ™”(Abstraction)๋ผ๊ณ  ํ•œ๋‹ค. ์ถ”์ƒํ™”๋Š” ๋ฐ‘์—์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์„ค๋ช…ํ• ํ…Œ๋‹ˆ ์ผ๋‹จ ์ง€๊ธˆ์€ ํด๋ž˜์Šค๋ผ๋Š” ๊ฐœ๋…๋งŒ ๊ธฐ์–ตํ•˜๋„๋ก ํ•˜์ž.

    ๊ทธ๋Ÿผ ๊ฐ์ฒด(Object)๋Š” ๋ฌด์—‡์ผ๊นŒ? ํ•„์ž๋Š” ๋ฐฉ๊ธˆ ํด๋ž˜์Šค๋ฅผ ์„ค๋ช…ํ•˜๋ฉด์„œ ๊ฐœ๋…์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ต‰์žฅํžˆ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ํด๋ž˜์Šค์˜ ์—ญํ• ์€ ์–ด๋– ํ•œ ๊ฐœ๋…์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋…์ด๋ผ๋Š” ๊ฒƒ ๊ทธ ์ž์ฒด ๋งŒ์œผ๋กœ๋Š” ํ˜„์‹ค์˜ ๋ฌผ๊ฑด์ด ๋  ์ˆ˜๋Š” ์—†๋Š” ๋ฒ•์ด๋‹ค.

    ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ์•„์ดํฐ7์ด๋ผ๋Š” ๊ฒƒ ๋˜ํ•œ ๊ทธ๋ƒฅ ์–ด๋– ํ•œ ์ œํ’ˆ ๋ผ์ธ์˜ ์ด๋ฆ„์ด๋‹ค. ์–ด๋–ค ๊ณ ์œ ํ•œ ๋ฌผ๊ฑด์˜ ์ด๋ฆ„์ด ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ํ•„์ž๊ฐ€ ๋งํ•˜๋Š” ๊ณ ์œ ํ•˜๋‹ค๋ผ๋Š” ์˜๋ฏธ๋Š” ์ „ ์„ธ๊ณ„์— ๋‹จ ํ•œ๊ฐœ๋งŒ ์กด์žฌํ•˜๋Š” ์ˆ˜์ค€์˜ ๊ณ ์œ ํ•จ์ด๋‹ค. ๋‹น์žฅ ๋‚ด ์•„์ดํฐ7๊ณผ ์นœ๊ตฌ์˜ ์•„์ดํฐ7๋งŒ ๋ด๋„ ์‹ค์ œ๋กœ๋Š” ๋‹ค๋ฅธ ์•„์ดํฐ7์ด์ง€ ์•Š์€๊ฐ€?

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

    ์ด๋•Œ ์ด๋ ‡๊ฒŒ ์ƒ์‚ฐ๋œ ์•„์ดํฐ7๋“ค์„ ๊ฐ์ฒด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ฆ‰, ํด๋ž˜์Šค๋Š” ์ผ์ข…์˜ ์„ค๊ณ„๋„์ด๊ณ  ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์ œ ๋ฌผ๊ฑด์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ํ–‰์œ„๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ์ฒด๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑํ•œ ์‹ค์ œ ๋ฌผ๊ฑด์ด๋‹ค.

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


    • ์†Œ๋‚˜ํƒ€ -> ์ค‘ํ˜• ์„ธ๋‹จ -> ์„ธ๋‹จ -> ์ž๋™์ฐจ -> ์ด๋™์ˆ˜๋‹จ
    • ๋ฌธ๋™์šฑ -> ๋‚จ์ž -> ์ธ๊ฐ„ -> ์˜์žฅ๋ฅ˜ -> ํฌ์œ ๋ฅ˜ -> ๋™๋ฌผ
    • ์˜ค๋ฒ„์›Œ์น˜ -> ๋ธ”๋ฆฌ์ž๋“œ๊ฐ€ ๋งŒ๋“  FPS ๊ฒŒ์ž„ -> FPS ๊ฒŒ์ž„ -> ๊ฒŒ์ž„

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

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

    ์ถ”์ƒํ™”์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ๊นŠ์ด ์ƒ๊ฐํ•ด๋ณด์ž

    ๋ฐฉ๊ธˆ ์šฐ๋ฆฌ๋Š” ์•„์ดํฐ7๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ƒ์œ„ ๊ฐœ๋…์„ ์ด๋Œ์–ด๋‚ด๋Š” ๊ฐ„๋‹จํ•œ ์ถ”์ƒํ™”๋ฅผ ๊ฒฝํ—˜ํ•ด๋ณด์•˜๋‹ค. ํ•˜์ง€๋งŒ ์šฐ๋ฆฌ๊ฐ€ ๋ฐฉ๊ธˆ ์ € ์˜ˆ์‹œ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ๊ทธ๋ ‡๊ฒŒ๊นŒ์ง€ ๊นŠ์€ ๊ณ ๋ฏผ์ด ์—†์—ˆ์„ ๊ฒƒ์ด๋‹ค. ์™œ๋ƒ๋ฉด ์•„์ดํฐ์ด๋‚˜ ์Šค๋งˆํŠธํฐ ๊ฐ™์€ ๊ฐœ๋…์€ ์ด๋ฏธ ์šฐ๋ฆฌ์—๊ฒŒ ์ƒ๋‹นํžˆ ์นœ์ˆ™ํ•œ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ๊นŠ์ด ๊ณ ๋ฏผํ•  ํ•„์š”์—†์ด ์ด๋ฏธ ์—ฌ๋Ÿฌ๋ถ„์˜ ๋จธ๋ฆฟ์†์— ์–ด๋А ์ •๋„ ์ถ”์ƒํ™”๊ฐ€ ๋˜์–ด ์ •๋ฆฌ๋œ ์ƒํƒœ์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

    ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ ์„ค๊ณ„์— OOP๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์นœ์ˆ™ํ•œ ์•„์ดํฐ๊ณผ ๊ฐ™์€ ๊ฐœ๋…์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ๊ฐœ๋… ์ž์ฒด๋ถ€ํ„ฐ ์ •์˜ํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์ด๋•Œ ์ถ”์ƒํ™”๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์ž์นซ ์ด์ƒํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ •ํ™•ํžˆ ์ถ”์ƒํ™”๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์งš๊ณ  ๋„˜์–ด๊ฐ€๋„๋ก ํ•˜๊ฒ ๋‹ค.

    ์ถ”์ƒ์ด๋ผ๋Š” ๋‹จ์–ด์˜ ๋œป๋ถ€ํ„ฐ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด์ž. ์ถ”์ƒ์€ ์–ด๋– ํ•œ ์กด์žฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ์†์„ฑ ์ค‘์—์„œ ํŠน์ •ํ•œ ์†์„ฑ์„ ๊ฐ€๋ ค๋‚ด์–ด ํฌ์ฐฉํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์ถ”์ƒํŒŒ ํ™”๊ฐ€ ์ค‘ ํ•œ๋ช…์ธ ํ”ผ์นด์†Œ๊ฐ€ ์†Œ๋ฅผ ์ ์  ์ถ”์ƒํ™”ํ•˜๋ฉฐ ๊ทธ๋ ค๊ฐ€๋Š” ๊ณผ์ •์„ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๋ฉด ์ถ”์ƒํ™”๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์กฐ๊ธˆ ๋” ์ดํ•ด๊ฐ€ ๋œ๋‹ค.

    picasso bull 피카소가 소를 추상화하는 과정

    ์ด๋ ‡๋“ฏ, ์ถ”์ƒํ™”๋ผ๋Š” ๊ฒƒ์€ ๊ทธ ์กด์žฌ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ€์žฅ ํŠน์ง•์ ์ธ ์†์„ฑ๋“ค์„ ํŒŒ์•…ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

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

    ์ƒ์œ„ ๊ฐœ๋…
    ์•„์ดํฐ: ์• ํ”Œ์—์„œ ๋งŒ๋“  iOS ๊ธฐ๋ฐ˜์˜ ์Šค๋งˆํŠธํฐ

    ์•„์ดํฐ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์˜ ํ•˜์œ„ ๊ฐœ๋…
    ์•„์ดํฐX: ์• ํ”Œ์—์„œ ๋งŒ๋“  iOS ๊ธฐ๋ฐ˜์˜ ์Šค๋งˆํŠธํฐ์ด๋ฉฐ, ํ™ˆ ๋ฒ„ํŠผ์ด ์—†๊ณ  ๋ฒ ์ ค๋ฆฌ์Šค ๋””์ž์ธ์ด ์ ์šฉ๋œ ์•„์ดํฐ
    ์•„์ดํฐ7: ์• ํ”Œ์—์„œ ๋งŒ๋“  iOS ๊ธฐ๋ฐ˜์˜ ์Šค๋งˆํŠธํฐ์ด๋ฉฐ, ํ–…ํ‹ฑ ์—”์ง„์ด ๋‚ด์žฅ๋œ ํ™ˆ ๋ฒ„ํŠผ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์•„์ดํฐ.
    ์•„์ดํฐ SE: ์• ํ”Œ์—์„œ ๋งŒ๋“  iOS ๊ธฐ๋ฐ˜์˜ ์Šค๋งˆํŠธํฐ์ด๋ฉฐ, ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘์•„์„œ ํ•œ ์†์— ์žก์„ ์ˆ˜ ์žˆ๋Š” ์•„์ดํฐ.

    ์ด ์˜ˆ์‹œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ํ•˜์œ„ ๊ฐœ๋…๋“ค์€ ์ƒ์œ„ ๊ฐœ๋…์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›๋Š”๋ฐ, ๊ทธ๋ž˜์„œ ์ด ๊ณผ์ •์„ ์ƒ์†(Inheritance)์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ด ์ƒ์†์— ๊ด€ํ•ด์„œ๋Š” ๋ฐ‘์—์„œ ๋‹ค์‹œ ์ž์„ธํ•˜๊ฒŒ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

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

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

    ํ•˜์ง€๋งŒ ์ด ๊ฐœ๋…๋“ค์€ JavaScript์—๋Š” ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ฐœ๋…๋„ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฒˆ์—๋Š” Java๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์˜ˆ์ œ๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค. ๋‹จํŽธ์ ์ธ ๋ฌธ๋ฒ•๋งŒ ๋ณด๋ฉด ๊ทธ๋ ‡๊ฒŒ ์ด์งˆ๊ฐ ๋А๊ปด์งˆ ์ •๋„๋กœ ์ฐจ์ด๊ฐ€ ํฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— JavaScript๋งŒ ํ•˜์…จ๋˜ ๋ถ„๋“ค๋„ ์•„๋งˆ ๊ธˆ๋ฐฉ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์ฐธ๊ณ ๋กœ TypeScript๋„ OOP๋ฅผ ์ง€์›ํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ ์ด๊ฑฐ ์„ธํŒ…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๊ทธ๋ƒฅ Java ์ปดํŒŒ์ผํ•˜๋Š”๊ฒŒ ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์— Java๋กœ ๊ฐ„๋‹ค.

    ๊ทธ๋Ÿผ ์ด์ œ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ 3๋Œ€์žฅ์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ์ƒ์†๊ณผ ์บก์Аํ™”, ๊ทธ๋ฆฌ๊ณ  ๋‹คํ˜•์„ฑ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

    ์ƒ์†

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

    class IPhone {
        String manufacturer = "apple";
        String os = "iOS";
    }
      
    class IPhone7 extends IPhone {
        int version = 7;
    }
      
    class Main {
        public static void main (String[] args) {
            IPhone7 myIPhone7 = new IPhone7();
    
            System.out.println(myIPhone7.manufacturer);
            System.out.println(myIPhone7.os);
            System.out.println(myIPhone7.version);
        }
    }
    apple
    iOS
    7

    IPhone7 ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•  ๋•Œ extends ์˜ˆ์•ฝ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ IPhone ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์•˜๋‹ค. IPhone7 ํด๋ž˜์Šค์—๋Š” manufacturer์™€ os ์†์„ฑ์ด ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ถ€๋ชจ ํด๋ž˜์Šค์ธ IPhone ํด๋ž˜์Šค์˜ ์†์„ฑ์„ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ ค๋ฐ›์€ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ด ์ƒํ™ฉ์—์„œ IPhoneX ํด๋ž˜์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ• ๋•Œ๋„ IPhone ํด๋ž˜์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

    class IPhoneX extends IPhone {
        int version = 10;
    }

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

    ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋งŒ์•ฝ ์š”๊ตฌ์‚ฌํ•ญ์ด ๋ณ€๊ฒฝ๋˜์–ด์„œ ๊ฐค๋Ÿญ์‹œ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๋งŒ๋“ค์–ด์•ผํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๊ฐค๋Ÿญ์‹œ ์‹œ๋ฆฌ์ฆˆ๋Š” iOS๊ฐ€ ์•„๋‹ˆ๋ผ Android๋ฅผ ์‚ฌ์šฉํ•˜๊ณ , ์ œ์กฐ์‚ฌ๋„ ์• ํ”Œ์ด ์•„๋‹ˆ๋ผ ์‚ผ์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ๋ฐฉ๊ธˆ ๋งŒ๋“  IPhone ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด๋•Œ ์šฐ๋ฆฌ๋Š” IPhone ํด๋ž˜์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ๋ƒ…๋‘๊ณ  ๊ทธ๋ƒฅ Galaxy ํด๋ž˜์Šค๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์ง€๋งŒ SmartPhone์ด๋ผ๋Š” ํ•œ๋‹จ๊ณ„ ๋” ์ƒ์œ„ ๊ฐœ๋…์„ ๋งŒ๋“œ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๊ฐ€๋‹ฅ์„ ์žก์„ ์ˆ˜๋„ ์žˆ๋‹ค.

    class SmartPhone {
        SmartPhone (String manufacturer, String os) {
            this.manufacturer = manufacturer;
            this.os = os;
        }
    }
    
    class IPhone extends SmartPhone {
        IPhone () {
            super("apple", "iOS");
        }
    }
    class Galaxy extends SmartPhone {
        Galaxy () {
            super("samsung", "android");
        }
    }
      
    class IPhone7 extends IPhone {
        int version = 7;
    }
    class GalaxyS10 extends Galaxy {
        String version = "s10";
    }

    ์œ„์˜ ์ฝ”๋“œ์—์„œ super ๋ฉ”์†Œ๋“œ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ฉ”์†Œ๋“œ์ด๋‹ค. ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ Super Class, ์ž์‹ ํด๋ž˜์Šค๋ฅผ Sub Class๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋ชจ์™€ ๊ด€๋ จ๋œ ํ‚ค์›Œ๋“œ ์—ญ์‹œ super๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

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

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

    ์บก์Аํ™”

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

    ์ด๋ ‡๊ฒŒ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ถ”๋Š” ๊ฒƒ์„ ์ •๋ณด ์€๋‹‰(Information Hiding)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ๋ณดํ†ต public, private, protected ๊ฐ™์€ ์ ‘๊ทผ์ œํ•œ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ์ •๋ณด๋ฅผ ๊ฐ์ถ”๊ฑฐ๋‚˜ ๋…ธ์ถœ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

    // Capsulation.java
    class Person {
        public String name;
        private int age;
        protected String address;
    
        public Person (String name, int age, String address) {
            this.name = name;
            this.age = age;
            this.address = address;
        }
    }

    ์ž ์ด๋ ‡๊ฒŒ ๊ฐ„๋‹จํ•œ ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด๋ณด์•˜๋‹ค. Person ํด๋ž˜์Šค๋Š” ์ƒ์„ฑ์ž์˜ ์ธ์ž๋กœ ๋“ค์–ด์˜จ ๊ฐ’๋“ค์„ ์ž์‹ ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•˜๋Š”๋ฐ, ์ด ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋“ค์€ ๊ฐ๊ฐ public, private, protected์˜ ์ ‘๊ทผ์ œํ•œ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์นœ๊ตฌ๋“ค์ด๋‹ค. ๊ทธ๋Ÿผ ํ•œ๋ฒˆ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด๋ณด๊ณ  ์ด ์นœ๊ตฌ๋“ค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ์•Œ์•„๋ณด์ž.

    // Capsulation.java
    class CapsulationTest {
        public static void main (String[] args) {
            Person evan = new Person("Evan", 29, "Seoul");
            System.out.println(evan.name);
            System.out.println(evan.age);
            System.out.println(evan.address);
        }
    }

    ์ž, ์—ฌ๊ธฐ๊นŒ์ง€ ์ง์ ‘ ์ž‘์„ฑํ•ด๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ Java๋Š” ์ปดํŒŒ์ผ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ์‹คํ–‰์‹œ์ผœ๋ณด์ง€ ์•Š๋”๋ผ๋„ IDE์—์„œ ์ด๋ฏธ ์•Œ์•„์„œ ๋‹ค ๋ถ„์„์„ ๋๋‚ด๊ณ  ๋นจ๊ฐ„์ค„์„ ์ซ™์ซ™ ๊ทธ์–ด์ฃผ์—ˆ์„ ๊ฒƒ์ด๋‹ค.

    private error

    ์—๋Ÿฌ๊ฐ€ ๋‚œ ๋ถ€๋ถ„์€ private ์ ‘๊ทผ์ œํ•œ์ž๋ฅผ ์‚ฌ์šฉํ•œ ๋ฉค๋ฒ„๋ณ€์ˆ˜์ธ age์ด๋‹ค. ์ด์ฒ˜๋Ÿผ private ์ ‘๊ทผ์ œํ•œ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธ๋œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋Š” ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๊ณ  ์™ธ๋ถ€๋กœ๋Š” ์•„์˜ˆ ๋…ธ์ถœ ์ž์ฒด๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค. public๊ณผ protected๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•œ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์ธ name๊ณผ address๋Š” ์ •์ƒ์ ์œผ๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ด๋‹ค.

    public ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ด๋ฆ„๋งŒ ๋ด๋„ ํด๋ž˜์Šค ์™ธ๋ถ€์—์„œ ๋งˆ์Œ๋Œ€๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ด์–ด์ฃผ๋Š” ์ ‘๊ทผ์ œํ•œ์ž๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์ง€๋งŒ, protected๊ฐ€ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์กฐ๊ธˆ ์ด์ƒํ•˜๋‹ค. ์ด๋ฆ„๋งŒ ๋ณด๋ฉด ์™ ์ง€ ์ด ์นœ๊ตฌ๋„ private์ฒ˜๋Ÿผ ์ ‘๊ทผ์ด ๋ง‰ํ˜€์•ผํ•  ๊ฒƒ ๊ฐ™์€๋ฐ ์™œ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์ผ๊นŒ?

    protected ์ ‘๊ทผ์ œํ•œ์ž๋Š” ํ•ด๋‹น ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์™€ ๊ฐ™์€ ํŒจํ‚ค์ง€ ์•ˆ์— ์žˆ๋Š” ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ฉด ๋ชจ๋‘ ์ ‘๊ทผ์„ ๋ง‰๋Š” ์ ‘๊ทผ์ œํ•œ์ž์ธ๋ฐ, ์œ„์˜ ์˜ˆ์‹œ์˜ ๊ฒฝ์šฐ ํ•„์ž๋Š” Person ํด๋ž˜์Šค์™€ CapsulationTest ํด๋ž˜์Šค๋ฅผ ๊ฐ™์€ ํŒŒ์ผ์— ์„ ์–ธํ–ˆ์œผ๋ฏ€๋กœ ๊ฐ™์€ ํŒจํ‚ค์ง€๋กœ ์ธ์‹๋˜์–ด ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ–ˆ๋˜ ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋Ÿผ Person ํด๋ž˜์Šค๋ฅผ ๋‹ค๋ฅธ ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌํ•ด๋‚ด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ํ…Œ์ŠคํŠธ ํ•ด๋ณด๊ธฐ ์œ„ํ•ด ๋จผ์ € MyPacks๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ทธ ์•ˆ์— Person.java ํŒŒ์ผ์„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ์„ ์–ธํ•ด์ฃผ๊ฒ ๋‹ค.

    // MyPacks/Person.java
    package MyPacks;
    
    public class Person {
        public String name;
        private int age;
        protected String address;
    
        public Person (String name, int age, String address) {
            this.name = name;
            this.age = age;
            this.address = address;
        }
    }
    // Capsulation.java
    import MyPacks.Person;
    
    class CapsulationTest {
        public static void main (String[] args) {
            Person evan = new Person("Evan", 29, "Seoul");
            System.out.println(evan.name);
            System.out.println(evan.address);
        }
    }

    ์ด๋ ‡๊ฒŒ Person ํด๋ž˜์Šค๋ฅผ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ์ด์ œ evan.address์—๋„ ๋นจ๊ฐ„ ์ค„์ด ์ซ™ ๊ทธ์–ด์ง„๋‹ค.

    protected error

    ์ด๋ ‡๊ฒŒ ์™ธ๋ถ€ ํŒจํ‚ค์ง€๋กœ ๋ถˆ๋Ÿฌ์˜จ ํด๋ž˜์Šค ๋‚ด๋ถ€ ๋‚ด์˜ protected ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ์—๋Š” ๋ฐ”๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Person ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•œ๋‹ค๋ฉด ์™ธ๋ถ€ ํŒจํ‚ค์ง€์ธ์ง€ ์•„๋‹Œ์ง€ ์—ฌ๋ถ€์™€ ์ƒ๊ด€ ์—†์ด ์ž์‹ ํด๋ž˜์Šค ๋‚ด์—์„œ๋Š” protected ๋ฉค๋ฒ„์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    // Capsulation.java
    import MyPacks.Person;
    
    class CapsulationTest {
        public static void main (String[] args) {
            Evan evan = new Evan();
        }
    }
    
    class Evan extends Person {
        Evan () {
            super("Evan", 29, "Seoul");
            System.out.println(this.address);
            System.out.println(super.address);
        }
    }
    Seoul
    Seoul

    ์ ‘๊ทผ์ œํ•œ์ž๋Š” Java ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ TypeScript, Ruby, C++ ๋“ฑ๊ณผ ๊ฐ™์ด OOP๋ฅผ ์ง€์›ํ•˜๋Š” ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค๋„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋ฏ€๋กœ ์ด ๊ฐœ๋…์„ ์ž˜ ์•Œ์•„๋‘๋ฉด ํด๋ž˜์Šค๋ฅผ ์„ค๊ณ„ํ•  ๋•Œ ์›ํ•˜๋Š” ์ •๋ณด๋งŒ ๋…ธ์ถœ์‹œํ‚ค๊ณ  ์›ํ•˜์ง€ ์•Š๋Š” ์ •๋ณด๋Š” ๊ฐ์ถ”๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์•ˆ๋„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๊ณ  ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ์‚ฌ์šฉ์ž๋กœ ํ•˜์—ฌ๊ธˆ ์“ธ๋ฐ์—†๋Š” ๊ณ ๋ฏผ์„ ์•ˆํ•˜๊ฒŒ ํ•ด์ค„ ์ˆ˜๋„ ์žˆ๋‹ค.

    ๋‹คํ˜•์„ฑ

    ๋‹คํ˜•์„ฑ(Polymorphism)์€ ์–ด๋–ค ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๋ช…์ด๋‚˜ ํ•จ์ˆ˜๋ช…์ด ์ƒํ™ฉ์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹คํ˜•์„ฑ์€ ์–ด๋–ค ํ•œ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

    Java์—์„œ ๋‹คํ˜•์„ฑ์„ ์œ„ํ•œ ๋Œ€ํ‘œ์ ์ธ ๊ธฐ๋Šฅ์€ ๋ฐ”๋กœ ์ถ”์ƒ ํด๋ž˜์Šค(Abstract Class)์™€ ์ธํ„ฐํŽ˜์ด์Šค(Interface), ๊ทธ๋ฆฌ๊ณ  Overloading์ด ์žˆ๋‹ค. ์ถ”์ƒ ํด๋ž˜์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์‚ฌ์‹ค ๊ทธ ์šฉ๋„๊ฐ€ ์กฐ๊ธˆ ๋‹ค๋ฅด์ง€๋งŒ ํ•„์ž๊ฐ€ ์˜ˆ๋กœ ๋“ค ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ์—์„œ๋Š” ๊ทธ ์ฐจ์ด๋ฅผ ํฌ๊ฒŒ ๋А๋ผ๊ธฐ ํž˜๋“ค๊ธฐ๋„ ํ•˜๊ณ  ๋ฌด์—‡๋ณด๋‹ค ์ด ํฌ์ŠคํŒ…์€ Java ํฌ์ŠคํŒ…์ด ์•„๋‹ˆ๋ผ ๋‹จ์ˆœํžˆ ๋‹คํ˜•์„ฑ์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•จ์ด๋ฏ€๋กœ ํ•„์ž๋Š” ์ด ์ค‘ ์ถ”์ƒ ํด๋ž˜์Šค๋งŒ์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋Ÿผ ์ด ๊ธฐ๋Šฅ๋“ค์ด ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š” ์ง€ ์‚ดํŽด๋ณด๋ฉด์„œ ๋‹คํ˜•์„ฑ์ด ๋ฌด์—‡์ธ๊ฐ€๋ฅผ ์ข€ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž. ๋จผ์ €, ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹คํ˜•์„ฑ์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ์˜ˆ์‹œ๋ฅผ ๋จผ์ € ์„ค๋ช…ํ• ํ…๋ฐ, ์‚ฌ์‹ค ๋‹คํ˜•์„ฑ์ด๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ชจ๋ฅด๊ณ  ์žˆ๋˜ ๋ถ„๋“ค์ด๋ผ๋„ ์ž์‹ ๋„ ๋ชจ๋ฅด๊ฒŒ ์ด๋Ÿฐ ์„ค๊ณ„ ํŒจํ„ด์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์„ ์ˆ˜๋„ ์žˆ์„ ์ •๋„๋กœ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์‹œ์ด๋‹ค.

    ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•œ ๋‹คํ˜•์„ฑ ๊ตฌํ˜„

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

    overwatch 갓겜 고오급 시계

    ์ž, ํ•„์ž๋Š” ์ด์ œ ์˜ค๋ฒ„์›Œ์น˜์˜ ์—ฌ๋Ÿฌ ์˜์›…๋“ค์„ ํด๋ž˜์Šค๋กœ ๋งŒ๋“œ๋ ค๊ณ  ํ•œ๋‹ค. ์˜ค๋ฒ„์›Œ์น˜์˜ ์˜์›…๋“ค์€ ๊ณตํ†ต์ ์œผ๋กœ โ€œ๊ถ๊ทน๊ธฐ ๊ฒŒ์ด์ง€๊ฐ€ ์ฐผ์„ ๋•Œ Q ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๊ถ๊ทน๊ธฐ๊ฐ€ ๋ฐœ๋™๋œ๋‹คโ€๋ผ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ค๋ฒ„์›Œ์น˜์˜ ์˜์›…๋“ค์€ ๊ฐ์ž ํŠน์ƒ‰์— ๋งž๊ฒŒ ๋‹ค๋ฅธ ๊ถ๊ทน๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ๋ผ์ธํ•˜๋ฅดํŠธ๋Š” ๋ง์น˜๋ฅผ ๋‚ด๋ฆฌ์น˜๋ฉฐ ๋‹ค๋ฅธ ์˜์›…๋“ค์„ ๊ธฐ์ ˆ์‹œํ‚ค๊ณ  ๋งฅํฌ๋ฆฌ๋Š” ์‹œ์•ผ์— ๋ณด์ด๋Š” ์—ฌ๋Ÿฌ ์˜์›…์—๊ฒŒ ๋™์‹œ์— ํ—ค๋“œ์ƒท์„ ๋‚ ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ฉ”์ด๋Š” ๋กœ๋ด‡์„ ๋˜์ ธ์„œ ์ผ์ • ๋ฒ”์œ„ ์•ˆ์˜ ์˜์›…๋“ค์„ ์–ผ๋ฆฐ๋‹ค.

    ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋‹คํ˜•์„ฑ์„ ๊ฐ€์ง€์ง€ ์•Š์€ ์˜ค๋ฒ„์›Œ์น˜ ์˜์›… ํด๋ž˜์Šค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชจ์Šต์„ ๋ณด์ผ ๊ฒƒ์ด๋‹ค.

    class Hero {
        public String name;
        Hero (String name) {
            this.name = name;
        }
    }
    
    class Reinhardt extends Hero {
        Reinhardt () {
            super("reinhardt");
        }
    
        public void attackHammer () {
            System.out.println("๋ง์น˜ ๋‚˜๊ฐ€์‹ ๋‹ค!");
        }
    }
    
    class McCree extends Hero {
        McCree () {
            super("mccree");
        }
        public void attackGun () {
            System.out.println("์„์–‘์ด ์ง„๋‹ค. ๋นต์•ผ๋นต์•ผ");
        }
    }
    
    class Mei extends Hero {
        Mei () {
            super("mei");
        }
        public void throwRobot () {
            System.out.println("๊ผผ์ง ๋งˆ! ์›€์ง์ด์ง€ ๋งˆ์„ธ์š”!");
        }
    }

    ์ด๋•Œ ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ Hero ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์˜์›… ํด๋ž˜์Šค๋“ค์˜ ๊ถ๊ทน๊ธฐ๋ฅผ ๋ฐœ๋™์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์•ˆ๋ด๋„ ๋ป”ํ•˜๊ฒ ์ง€๋งŒ ๋ˆˆ๋ฌผ๋‚˜๋Š” if๋ฌธ ๋˜๋Š” switch๋ฌธ์˜ ํ–ฅ์—ฐ์ด ํŽผ์ณ์งˆ ๊ฒƒ์ด๋‹ค.

    ๋ชจ๋“  ์˜์›…๋“ค์˜ ๊ถ๊ทน๊ธฐ ๋ฐœ๋™ ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ฌ๋ฆฌ ๋ฐฉ๋„๊ฐ€ ์—†๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ถ”๊ฐ€์ ์œผ๋กœ Hero ํด๋ž˜์Šค์—๋Š” ๊ถ๊ทน๊ธฐ ๋ฐœ๋™ ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด๋ฅผ ํ•ด๋‹น ์˜์›…์˜ ํด๋ž˜์Šค๋กœ ํ˜•๋ณ€ํ™˜ ํ•ด์ค˜์•ผํ•˜๋Š” ๋ถˆํŽธํ•œ ์ž‘์—…๋„ ํ•ด์•ผํ•œ๋‹ค.

    class Main {
        public static void main (String[] args) {
            Mei myMei = new Mei();
            Reinhardt myReinhardt = new Reinhardt();
            McCree myMcCree = new McCree();
    
            Main.doUltimate(myMei);
            Main.doUltimate(myReinhardt);
            Main.doUltimate(myMcCree);
        }
    
        public static void doUltimate (Hero hero) {
            if (hero instanceof Reinhardt) {
                Reinhardt myHero = (Reinhardt)hero;
                myHero.attackHammer();
            }
            else if (hero instanceof McCree) {
                McCree myHero = (McCree)hero;
                myHero.attackGun();
            }
            else if (hero instanceof Mei) {
                Mei myHero = (Mei)hero;
                myHero.throwRobot();
            }
        }
    }
    ๊ผผ์ง ๋งˆ! ์›€์ง์ด์ง€ ๋งˆ์„ธ์š”!
    ๋ง์น˜ ๋‚˜๊ฐ€์‹ ๋‹ค!
    ์„์–‘์ด ์ง„๋‹ค. ๋นต์•ผ๋นต์•ผ

    ์—ฌ๊ธฐ์— ์˜์›…์ด ๋” ์ถ”๊ฐ€๋œ๋‹ค๋ฉด ์˜์›…์˜ ์ข…๋ฅ˜ ๋งŒํผ ๋ถ„๊ธฐ์˜ ๊ฐœ์ˆ˜๋„ ๋Š˜์–ด๋‚  ๊ฒƒ์ด๊ณ , ๋ฌด์—‡๋ณด๋‹ค Mei myHero = (Mei)hero์ฒ˜๋Ÿผ ๊ตณ์ด ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๊ฑธ ๋ณด์ž๋‹ˆ ๋งˆ์Œ์ด ํ•œ์ผ ์ด ๋จน๋จนํ•ด์ ธ์˜จ๋‹ค. ๋‹คํ˜•์„ฑ์€ ๋ฐ”๋กœ ์ด๋Ÿด ๋•Œ ์šฐ๋ฆฌ๋ฅผ ํ–‰๋ณตํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค„ ์ˆ˜ ์žˆ๋Š” ๋‹จ๋น„์™€ ๊ฐ™์€ ๊ฐœ๋…์ด๋‹ค.

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

    ์ด๋Ÿฐ ๊ฒฝ์šฐ ๊ทธ๋ƒฅ Hero ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์˜์›… ํด๋ž˜์Šค๋“ค์—๊ฒŒ ์ง์ ‘ ํ•˜๋‚˜ํ•˜๋‚˜ ultimate๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์‹ค์ˆ˜ํ•  ํ™•๋ฅ ์ด ์กด์žฌํ•œ๋‹ค.(ํŠนํžˆ ์˜คํƒ€๋กœ ์ธํ•œ ์‹ค์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์„ ๊ฒƒ์ด๋‹ค) ๊ทธ๋ž˜์„œ Java๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ํŠน์ • ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ•์ œ๋กœ ๊ตฌํ˜„ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

    ๊ทธ ๊ธฐ๋Šฅ์ด ๋ฐ”๋กœ ์ถ”์ƒ ํด๋ž˜์Šค(Abstract Class)์™€ ์ธํ„ฐํŽ˜์ด์Šค(Interface)์ธ ๊ฒƒ์ด๋‹ค. ํ•„์ž๋Š” ์œ„์—์„œ ํ•œ๋ฒˆ ์ด์•ผ๊ธฐ ํ–ˆ๋“ฏ์ด ์ด ์ค‘ ์ถ”์ƒ ํด๋ž˜์Šค๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜ˆ์ œ๋ฅผ ์ง„ํ–‰ํ•  ๊ฒƒ์ด๋‹ค.

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

    ์ด ์˜ˆ์ œ์˜ Hero ํด๋ž˜์Šค๋Š” name ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์„œ ์ž์‹ ์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋กœ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์ ์ ˆํ•˜๋‹ค. ๊ทธ๋Ÿผ ์ด์ œ ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ultimate ๋ฉ”์†Œ๋“œ์˜ ๊ตฌํ˜„์„ ๊ฐ•์ œํ•ด๋ณด๋„๋ก ํ•˜์ž.

    abstract class Hero {
        public String name;
        Hero (String name) {
            this.name = name;
        }
    
        // ๋‚ด๋ถ€ ๊ตฌํ˜„์ฒด๊ฐ€ ์—†๋Š” ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ์„ ์–ธํ•œ๋‹ค.
        public abstract void ultimate ();
    }
    
    class Reinhardt extends Hero {
        Reinhardt () {
            super("reinhardt");
        }
    
        public void ultimate () {
            System.out.println("๋ง์น˜ ๋‚˜๊ฐ€์‹ ๋‹ค!");
        }
    }
    
    class McCree extends Hero {
        McCree () {
            super("mccree");
        }
        public void ultimate () {
            System.out.println("์„์–‘์ด ์ง„๋‹ค. ๋นต์•ผ๋นต์•ผ");
        }
    }
    
    class Mei extends Hero {
        Mei () {
            super("mei");
        }
        public void ultimate () {
            System.out.println("๊ผผ์ง ๋งˆ! ์›€์ง์ด์ง€ ๋งˆ์„ธ์š”!");
        }
    }

    ์ด๋ ‡๊ฒŒ ์ถ”์ƒ ํด๋ž˜์Šค์ธ Hero๋ฅผ ์ƒ์†๋ฐ›์€ ์˜์›… ํด๋ž˜์Šค๋“ค์€ ๋ฌด์กฐ๊ฑด ultimate ๋ฉ”์†Œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฉ”์†Œ๋“œ๋ช…์ด ํ†ต์ผ๋˜๋ฉด ์˜์›… ํด๋ž˜์Šค๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ์ž…์žฅ์—์„œ๋Š” ๊ถ๊ทน๊ธฐ๋ฅผ ๋ฐœ๋™์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ ์–ด๋–ค ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด์•ผํ• ์ง€ ์ด์ œ ๋” ์ด์ƒ ๊ณ ๋ฏผํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

    class Main {
        public static void main (String[] args) {
            Mei myMei = new Mei();
            Reinhardt myReinhardt = new Reinhardt();
            McCree myMcCree = new McCree();
    
            Main.doUltimate(myMei);
            Main.doUltimate(myReinhardt);
            Main.doUltimate(myMcCree);
        }
    
        public static void doUltimate (Hero hero) {
            // Hero ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋Š”
            // ๋ฌด์กฐ๊ฑด ultimate ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ณด์žฅ๋œ๋‹ค.
            hero.ultimate();
        }
    }

    ์–ด๋–ค๊ฐ€? ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ์‹ฌํ”Œํ•ด์ง€์ง€ ์•Š์•˜๋Š”๊ฐ€? ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ž˜์Šค ๋‚ด๋ถ€์˜ ultimate๋ผ๋Š” ๋ฉ”์†Œ๋“œ์˜ ๊ตฌํ˜„์„ ๊ฐ•์ œํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Hero ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์˜์›… ํด๋ž˜์Šค์— ํ•ด๋‹น ๋ฉ”์†Œ๋“œ๊ฐ€ ์—†์„ ํ™•๋ฅ ์€ ์ „ํ˜€ ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜๋Š” ์ž…์žฅ์—์„œ๋Š” ๊นŠ์€ ๊ณ ๋ฏผ์—†์ด ์•ˆ์‹ฌํ•˜๊ณ  ultimate ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

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

    ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•œ ๋‹คํ˜•์„ฑ ๊ตฌํ˜„

    ์ด๋ฒˆ์—๋Š” ์˜ค๋ฒ„๋กœ๋”ฉ(Overloading)์„ ์‚ฌ์šฉํ•œ ๋‹คํ˜•์„ฑ์˜ ์˜ˆ์‹œ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž. ์œ„์˜ ์ƒ์† ์ฑ•ํ„ฐ์—์„œ ์ž ๊น ์–ธ๊ธ‰ํ•˜๊ณ  ๋„˜์–ด๊ฐ„ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(Overriding)๊ณผ ํ—ท๊ฐˆ๋ฆฌ์ง€ ๋ง์ž.

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

    ์˜ค๋ฒ„๋กœ๋”ฉ์€ ์ƒ๊ฐ๋ณด๋‹ค ๋‹จ์ˆœํ•œ ๊ฐœ๋…์ด์ง€๋งŒ, ๋งŒ์•ฝ ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์–ธ์–ด์ธ JavaScipt๋‚˜ Python์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ๋Š” ๋‚˜๋ฆ„ ์ถฉ๊ณต๊นฝ์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ ์ด์œ ๋Š” ๋ฐ”๋กœ ์˜ค๋ฒ„๋กœ๋”ฉ์ด โ€œ๋ฉ”์†Œ๋“œ์˜ ์ธ์ž๋กœ ์–ด๋–ค ๊ฒƒ์„ ๋„˜๊ธฐ๋ƒ์— ๋”ฐ๋ผ์„œ ์ด๋ฆ„๋งŒ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ธฐ๋Šฅโ€์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.


    이게 뭔 개소리야?

    ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ sum์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์ด๋•Œ sum์€ ๋‘ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์€ ํ›„ ์ด ๋‘ ๊ฐ’์„ ํ•ฉ์ณ์„œ ๋ฆฌํ„ดํ•˜๋Š” ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ๊ทผ๋ฐ ๋งŒ์•ฝ 3๊ฐœ๋ฅผ ํ•ฉ์น˜๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์ด๋Ÿฐ ๊ฒฝ์šฐ์— JavaScript์™€ ๊ฐ™์ด ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์–ธ์–ด์—์„œ๋Š” ํŽธ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.

    class Calculator {
      sum (...args) {
        return args.reduce((prev, current) => prev + current);
      }
    }
    const c = new Calculator();
    c.sum(1, 2, 3, 4, 5);
    15

    ๋ญ ์–ด์จŒ๋“  ๋˜๊ธด ๋˜๋‹ˆ๊นŒ ์ƒ๊ด€์—†๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ด๊ฑด ๊ฐ์ฒด์˜ ๋‹คํ˜•์„ฑ์ด๋ผ๊ธฐ๋ณด๋‹ค ๊ทธ๋ƒฅ JavaScript์˜ ์–ธ์–ด์ ์ธ ํŠน์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฐํšŒํ•œ ๊ฒƒ์— ๋ถˆ๊ณผํ•˜๋‹ค. ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•˜๋ฉด โ€œ๋‘ ๊ฐœ์˜ ์ธ์ž๋ฅผ ๋”ํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œโ€์—์„œ โ€œn๊ฐœ์˜ ์ธ์ž๋ฅผ ๋”ํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์†Œ๋“œโ€๋กœ๋Š” ๋งŒ๋“ค ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐ์ฒด์˜ ๋‹คํ˜•์„ฑ์„ ๋งŒ์กฑํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด ๋ฉ”์†Œ๋“œ์˜ ๋”ํ•œ๋‹ค๋ผ๋Š” ๊ธฐ๋Šฅ ์ž์ฒด๋„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๊ทธ์ œ์„œ์•ผ ๋‹คํ˜•์„ฑ์„ ๋งŒ์กฑํ•œ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

    ๋ฐ˜๋ฉด, Java๋‚˜ C++๊ณผ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ์ œ๋Œ€๋กœ ๋‹คํ˜•์„ฑ์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ง€์›ํ•œ๋‹ค.

    class Overloading {
        public int sum (int a, int b) {
            return a + b;
        }
        public int sum (int a, int b, int c) {
            return a + b + c;
        }
        public String sum (String a, String b) {
            return a + b + "์ž…๋‹ˆ๋‹ค.";
        }
    }

    ์จ˜, ๊ฐ„๋‹จํ•œ ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•˜๊ณ  sum์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์„ ์–ธํ–ˆ๋‹ค. ๋งŒ์•ฝ JavaScript์—์„œ ์ด๋ ‡๊ฒŒ ์„ ์–ธํ–ˆ๋‹ค๊ฐ€๋Š” ์œ„์— ์„ ์–ธ๋œ ๋‘๊ฐœ์˜ sum์€ ๋ฌด์‹œ๋˜๊ณ  ๋งจ ์•„๋ž˜์˜ sum ๋ฉ”์†Œ๋“œ๋กœ ๋ฎ์–ด์”Œ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„๋กœ๋”ฉ์„ ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ๋ฌธ์ž์—ด์„ ์ธ์ž๋กœ ๋ฐ›๋Š” sum ๋ฉ”์†Œ๋“œ์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฌธ์ž์—ด ๋งจ ๋’ค์— ์ž…๋‹ˆ๋‹ค๋„ ๋ถ™ํžˆ๋Š” ์„ผ์Šค๋ฅผ ๋ฐœํœ˜ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ์—ˆ๋‹ค. JavaScript์—์„œ๋Š” ์ด ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ๋ฐ˜๋“œ์‹œ ํƒ€์ž…์„ ์ฒดํฌํ•˜๋Š” ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฌธ์ด ํ•„์š”ํ•˜์ง€๋งŒ Java๋Š” ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋Ÿด ํ•„์š”๊ฐ€ ์—†๋‹ค.

    ๊ทธ๋Ÿผ ์ด์ œ ํ•œ๋ฒˆ ์ด ๋ฉ”์†Œ๋“œ๋“ค์ด ์ž˜ ์ž‘๋™ํ•˜๋‚˜ ํ˜ธ์ถœํ•ด๋ณด๋„๋ก ํ•˜์ž.

    class Main {
        public static void main (String[] args) {
            Overloading o = new Overloading();
            System.out.println(o.sum(1, 2));
            System.out.println(o.sum(1, 2, 3));
            System.out.println(o.sum("์ž", "๋ฐ”"));
        }
    }
    3
    6
    ์ž๋ฐ”์ž…๋‹ˆ๋‹ค.

    ์œ„์˜ ์˜ˆ์‹œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด Overloading ํด๋ž˜์Šค๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ sum ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ๋ฉ”์†Œ๋“œ์˜ ์ธ์ž๊ฐ€ ๋ฌด์—‡์ธ์ง€์— ๋”ฐ๋ผ์„œ ์ด๋ฆ„๋งŒ ๋™์ผํ•œ ๋‹ค๋ฅธ ๋ฉ”์†Œ๋“œ๋“ค์„ ํ˜ธ์ถœํ•ด์ฃผ๊ณ  ์žˆ๋‹ค. ์ด๊ฒƒ์ด ์˜ค๋ฒ„๋กœ๋”ฉ์ด๋ฉฐ, Java์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋Œ€ํ‘œ์ ์ธ ๋‹คํ˜•์„ฑ ์ง€์› ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์ด๋‹ค. (์˜ค๋ฒ„๋ผ์ด๋”ฉ์ด๋ž‘ ํ—ท๊ฐˆ๋ฆฌ์ง€ ๋ง์ž!)

    ๋งˆ์น˜๋ฉฐ

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

    ํ•„์ž๊ฐ€ ์ด ํฌ์ŠคํŒ…์˜ ํƒ€๊ฒŸ์œผ๋กœ ํ•œ ๋…์ž ์ธต์€ ๋ฐ”๋กœ ํ•™์›์ด๋‚˜ ๋ถ€ํŠธ์บ ํ”„์—์„œ ์ฝ”๋”ฉ์„ ์ฒ˜์Œ ๋ฐฐ์šฐ์‹ ์ง€ ์–ผ๋งˆ ์•ˆ๋œ ๋ถ„๋“ค์ด๋‹ค. ํ•™์›์ด๋‚˜ ๋ถ€ํŠธ์บ ํ”„์—์„œ๋Š” Java๋ฅผ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด OOP์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ๊ฑฐ์˜ ์–ธ๊ธ‰ํ•˜์ง€ ์•Š๊ณ  ๋„˜์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€ ๊ฒƒ์œผ๋กœ ์•Œ๊ณ  ์žˆ๋‹ค.

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

    ์ฐธ๊ณ ๋กœ ํ•„์ž๋Š” OOP๊ฐ€ ์ข‹์€ ํŒจ๋Ÿฌ๋‹ค์ž„์ด๋‹ˆ๊นŒ ๋ฐฐ์›Œ์•ผ ํ•œ๋‹ค๋ผ๊ณ  ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ด ํฌ์ŠคํŒ…์˜ ์„œ๋‘์—์„œ ํ•œ๋ฒˆ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ „ ์„ธ๊ณ„์—์„œ ์ƒ๋‹นํ•œ ์ ์œ ์œจ์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๋ฉ”์ด์ € ์–ธ์–ด์ธ Java, Python, C++๊ณผ ๊ฐ™์€ ์–ธ์–ด๋“ค์ด ๋Œ€๋ถ€๋ถ„ OOP๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๊ฑฐ๋‚˜ OOP๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 2019๋…„์— ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ์ข‹๋“  ์‹ซ๋“  OOP๋ฅผ ์•Œ๊ณ ๋Š” ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— OOP๋ฅผ ์ถ”์ฒœํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    language index TIOBE의 2019년 8월 전 세계 언어 순위
    C와 JavaScript, SQL을 제외한 모든 언어가 OOP를 사용한다.

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

    ์–ด์จŒ๋“  ์ด ํฌ์ŠคํŒ…์„ ํ†ตํ•ด ํ˜น์‹œ๋‚˜ OOP๋ฅผ ๋ชจ๋ฅด๊ณ  ์žˆ์—ˆ๊ฑฐ๋‚˜, ์•„๋‹ˆ๋ฉด ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ๋А๋ผ๊ณ  ์žˆ๋˜ ๋ถ„๋“ค์ด ์ข€ ๋” OOP๋ฅผ ์นœ์ˆ™ํ•˜๊ฒŒ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ผ๋Š” ๋งˆ์Œ์ด๋‹ค.

    ์ด์ƒ์œผ๋กœ ์•Œ๊ณ  ๋ณด๋ฉด ์žฌ๋ฐŒ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ, OOP ํ์–ด๋ณด๊ธฐ ํฌ์ŠคํŒ…์„ ๋งˆ์นœ๋‹ค.

    Evan Moon

    ๐Ÿข ๊ฑฐ๋ถ์ด์ฒ˜๋Ÿผ ์‚ด์ž

    ๊ฐœ๋ฐœ์„ ์ž˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ฐœ์„ ์ฆ๊ธฐ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ์ƒ๊ฐ ์ •๋ฆฌ๋ถ€ํ„ฐ ํŠœํ† ๋ฆฌ์–ผ, ์‚ฝ์งˆ๊ธฐ ์ •๋„๋ฅผ ์ฃผ๋กœ ๋„์ ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.