...

๊ฐ์ฒด ์งํฅ(OOP) ๊ฐ๋ ๊ณผ ํน์ง
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ด๋, ๋ง์ ๊ฐ์ฒด(Objcet)๋ค์ด ๋ชจ์ฌ์ ์ํธ ํ๋ ฅํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ํ๋ก๊ทธ๋๋ฐ ์ค๊ณ ๋ฐฉ๋ฒ์ ์ผ์ปซ๋๋ค.
์ข๋ ์ฝ๊ฒ ๋งํ๋ฉด, ํ๋ก๊ทธ๋จ์ ๋ฌถ์ ๋จ์๋ก ์๊ฒ ์ชผ๊ฐ์, ์ถํ์ ๊ฐ์ ธ๋ค ์ฐ๊ธฐ ํธํ๊ฒ ๋ง๋ค์ด ๋์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์ด์ฒ๋ผ ๋ ๊ณ ๋ธ๋ญ ์กฐ๋ฆฝํ๋ฏ์ด ์ปดํฌ๋ํธ๋ฅผ ์ ์ฐํ๊ณ ๋ณ๊ฒฝ์ด ์ฉ์ดํ๊ธฐ ๋๋ฌธ์, ํ์ ์์ ๋๊ท๋ชจ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ง์ด ์ฌ์ฉ๋๋ค.
๋ํ์ ์ผ๋ก ๋ง์ด ์๋ ค์ง Java์ธ์ด๋ฅผ ํฌํจํ์ฌ Ruby Python, C++, Objectivc-C, C#, Kotlin ๋ฑ์ด ๋ชจ๋ ๊ฐ์ฒด์งํฅ ์์๋ฅผ ๊ฐ์ง ์ธ์ด์ด๋ค.
๊ฐ์ฒด ์งํฅ ์ค๊ณ ์ ๋ต์ ๊ผญ ๋ฐ๋์ ๊ฐ์ฒด ์งํฅ ์ธ์ด(Java, kotlin ๋ฑ)์์๋ง ์ฌ์ฉ๋๋ ๊ฒ์ ์๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ๋ ํ์ด์ฌ์ ๊ฐ์ฒด ์งํฅ ์ธ์ด๋ ์๋์ง๋ง, ๋ฐ๋ก ํด๋์ค(class) ๋ฌธ๋ฒ์ ์ง์ํ๋ ๊ฒ ์ฒ๋ผ ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ๊ฐ์ฒด ์งํฅ ์ธ์ด ๋ฐฉ์์ ์ง์ํ๊ณ ์๋ค.
์ฆ, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ๋ฐฐ์ฐ๋ฉด, ๊ทธ ๊ธฐ์ ์ ๋ค์ํ ๋ง์ ์ธ์ด์ ์ ์ฉํ ์ ์๋ค๋ ๋ป์ด๊ธฐ๋ ํ๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐ๋ ๊ฐ๋
์ผ๋ก๋, ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ (Procedure Programming) ์ด๋ผ๋ ๊ฒ์ด ์๋ค.
์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ๋งํ์๋ฉด ํจ์(function)๋ฅผ ์ด์ฉํด์ ์ ๋ฆฌ ์ ๋ํ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ ์ด๋ผ๊ณ ํ ์ ์๋ค.
๋ํ์ ์ธ ์ธ์ด๋ C๊ฐ ์๋ค.
์ฆ , ํจ์๋ฅผ ์ด์ฉํด์ ์์ ๋ถํ์ ๋ง๋ค๊ณ ์ด๊ฒ์ ๊ฒฐํฉํด์ ๋ ํฐ ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด๊ฐ๋ ํ ํฌ๋์ด ๋ฐ๋ก ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ ์ด๋ค.
ํ์ง๋ง ๊ธฐ์ ์ด ๋ฐ์ ๋จ์ ๋ฐ๋ผ, ๋ ๋ณต์กํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ํ ์์๊ฐ ์ฆ๊ฐํ๋ฉด์ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ๊ฐ ๋ํ๋๊ธฐ ์์ํ๋ค. ๋ณต์กํ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ํด์๋ ์ค์ ์ธ๊ณ์ฒ๋ผ ๋ ๋ฐ์ ํ ๋ชจ๋ธ๋ง ๋ฐฉ์์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ ์๋ก ์ฐ๊ด๋ ํจ์(method)์ ๋ณ์(variable) ์ ๋ชจ์์ ๋ฐ์ค(๋ ๊ณ )๋ฅผ ๋ง๋ค๊ณ ๊ฑฐ๊ธฐ์ ์ด๋ฆ์ ๋ถ์ฌ์ ์ ๋ฆฌ์ ๋์ ํ ์๋ฉ์์๋ฅผ ๋ง๋ค์๋๋ฐ ์ด๊ฒ์ด ๋ฐ๋ก Class ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๋ฐ ํด๋์ค๋ฅผ ์ค์ฌ์ผ๋ก ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด๊ฐ๋ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ๋ฒ๋ก ์ด ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object Oriented Programming) ์ธ ๊ฒ์ด๋ค.


์ด ํฌ์คํ ์์ ๊ฐ์กฐํ๋ ์ ์ ๊ฐ์ฒด ์งํฅ ๊ธฐ๋ฒ์ '์ฌ์ฉ' ๊ธฐ๋ฒ์ด ์๋ '์ค๊ณ' ๊ธฐ๋ฒ ์ธ ์ ์ด๋ค.
๋๋ถ๋ถ ํ๋ก๊ทธ๋๋ฐ ์ ๋ฌธ์๋ค์ ๊ฐ์ฒด ์งํฅ ๊ธฐ๋ฒ์ ๋ํด ์ ์๋ฟ์ง ์๋๋ค๊ณ ํ๋ค.
์๋ํ๋ฉด ์ฐ๋ฆฌ๋ ํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ธ๋ ์ฌ์ฉํ๋ ๋ฒ์ ๋ฐฐ์ ๊ณ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋งค์ฐ ๋น์ฐํ๊ฒ ์ฌ์ฉํด์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ณ์ ์ ์ธ, ํจ์ ์ ์ธ, ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ, ์ฐ์ฐ์ ๋ฑ์ ์ดํดํ๋๋ฐ ์์ด ์ง์ ๋ฌธ์ ๋ฅผ ๊ตฌํํด๋ด์ผ๋ก์จ ํ์์ฑ์ ์ดํดํ์ง๋ง, ๊ฐ์ฒด์งํฅ ๊ฐ๋ (ํด๋์ค, ๊ฐ์ฒด, ์บก์ํ, ์์, ๋คํ์ฑ, ์ฌ์ ์, ์ธํฐํ์ด์ค, ์ถ์ ํด๋์ค ๋ฑ) ์ ์ดํดํ๋๋ฐ ์์ด ์์ด๋ ์ถฉ๋ถํ if๋ฌธ for๋ฌธ์ผ๋ก๋ ๋ฌธ์ ๋ฅผ ๊ตฌํ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๊ตฌ์กฐ์ ์ผ๋ก ํธํ๋ค ์ ๋๋ก๋ง ๊นจ๋ซ์ง ์๋ฒฝํ ํ์ํ ์ด์ ๋ฅผ ์์ง ๋ชปํ๋ค
๊ทธ๋์ ๋ณดํต ๊ฐ์ฒด ์งํฅ์ ๋ํด ์์ฝ ์ ๋ฆฌ๋ ๋ฌธ์๋ฅผ ๋ณด๋ฉด, ์ถ์ํ ๋ผ๊ณ ํ๋ฉด abstract class, ๋คํ์ฑ์ด๋ผ ํ๋ฉด ์ค๋ฒ๋ก๋ฉ / ์ค๋ฒ๋ผ์ด๋ฉ, ์บก์ํ ๋ผ๊ณ ํ๋ฉด private ๋ง ์๋ ค์ฃผ๋ ๋ฌธ์๊ฐ ๋ง๋ค.
์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ด ๊ณ์ฐ๊ธฐ์ ๊ฐ์ ์์ํ์ ์์ฑํ๋ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ์ด๋ผ๋ฉด, ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ด์ฉํ ์ ์๊ฒ ๊ตฌ์กฐ๋ฅผ ๋ง๋๋ ๊ฒ์ผ๋ก ๋ณด๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฑฐ๋ํ ๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฒด์งํฅ๊ณผ ์ ์ฐจ์ ํ๋ก๊ทธ๋๋ฐ์ด ์ ์ตํฉํ์ฌ ๋ง๋ค์ด์ง๋ค.
๋ฐ๋ผ์ ์ด๋ฒ ํฌ์คํ ์์๋ ์ค๊ณ ๊ด์ ์์ ์ ์ถ์ํ, ์์, ๋คํ์ฑ, ์บก์ํ๋ฅผ ์ฌ์ฉํ๋์ง, ์ถ์ํ๋ฅผ ํ๋ฉด ์ด๋ค ์ ์ด ์ข์์ง , ์๋ก ์ ์ธ ์ด์ผ๊ธฐ๋ก ํ์ด๊ฐ ๋ ์๋ค์๊ฒ ํ์ฌ๊ธ ์ข ๋ ๊ฐ์ฒด ์งํฅ์ ๋ํด ์น์ํ๊ฒ ํ๊ณ ํ์์ฑ์ ๋๋ผ๊ฒ ํ๋ ๊ฒ์ ์ค์ ์ผ๋ก ๋๊ณ ํ์ต์ ์ด์ด๋๊ฐ ์์ ์ด๋ค.
๊ฐ์ฒด์งํฅ 4๊ฐ์ง ํน์ฑ์ ๋ํด ํ์คํ ์ตํ๊ฒ ๋๋ค๋ฉด, ์ถํ์ ์ฌ๋ฌ ์คํ ์์ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ ํ๊ฒ ๋ ํ ๋ฐ, ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ด๋ค ๊ธฐ๋ฅ์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ๋ณด๋ ค๋ฉด ์ด ํด๋์ค, ์ ํด๋์ค ํ์ผ์ ๋์๋ค๋ฉฐ ์์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ ๋คํ์ฑ ์๋ฆฌ๋ฅผ ํตํด ์ ๊ธฐ์ ์ผ๋ก ์ฝ๋๊ฐ ๋์๊ฐ๋ ๊ตฌ์กฐ๋ฅผ ํ์ ํด์ผ ํ๋๋ฐ ๋งค์ฐ ๋์์ด ๋ ๊ฒ์ด๋ค.
์ถ์ํ (Abstraciton)
์ถ์ํ ๋ผ๋ ๋จ์ด๋ ๋ฏธ์ ์๊ฐ์ ํ๋ฒ์ฏค์ ๋ค์ด๋ณธ์ ์ด ์์ ๊ฒ์ด๋ค.
๋ฏธ์ ์์์ ์ถ์ํ๋ ์ฌ์ง ์ฒ๋ผ ์ฌ๋ฌผ์ ๋์ ๋ณด์ด๋ ๊ฒ์ฒ๋ผ ์์ฐ์ , ์ฌ์ค์ ์ผ๋ก ์ฌํํ๋ ๊ฒ์ด ์๋๋ผ, ์ , ์ , ๋ฉด, ์์ฑ ๋ฑ์ ๋จ์ํ ํํ์ ์ด์ฉํด ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๊ฒ์ ๋งํ๋ค.
์ด์ฒ๋ผ ์ปดํจํฐ ๊ณผํ์์๋ ์ถ์ํ๋ฅผ ๋ณต์กํ ์๋ฃ, ๋ชจ๋, ์์คํ ๋ฑ์ผ๋ก๋ถํฐ ํต์ฌ์ ์ธ ๊ฐ๋ ๋๋ ๊ธฐ๋ฅ์ ๊ฐ์ถ๋ ค ๋ด๋ ๊ฒ์ ๋งํ๋ค.
์ฆ, ์ ๋ฆฌํ์๋ฉด ๋ณดํต ์๊ณ ๋ ์์ง๋ง ์ ํํ๊ฒ ํํํ๊ธฐ ํ๋ ๊ฒ๋ค์ ์ค์ํ ๋ถ๋ถ์ด๋ ํน์ง์ ์ ์ก์ ์ค๋ช ํ๋ ๊ฒ์ '์ถ์์ ์ผ๋ก ํํํ๋ค' ์ฆ '์ถ์ํํ๋ค' ๋ผ๊ณ ๋งํ๋ค๊ณ ๋ณผ ์ ์๋ค.

๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์๋ ์ด ์ถ์ํ๋ ์ค์ํ ๊ฐ๋ ์ค์ ํ๋์ด๋ค.
ํ๋ก๊ทธ๋๋ฐ์์์ ์ถ์ํ๋ ํด๋์ค๋ฅผ ์ ์ํ ๋ ๋ถํ์ํ ๋ถ๋ถ๋ค์ ์๋ตํ๊ณ ๊ฐ์ฒด์ ์์ฑ ์ค ์ค์ํ ๊ฒ์๋ง ์ค์ ์ ๋์ด ๊ฐ๋ตํ ํ๋ ๊ฒ์ ๋งํ๋ค.
์ฆ ํด๋์ค๋ค์ ์ค์ํ๊ณ ๊ณตํต๋ ์ฑ์ง๋ค์ ์ถ์ถํ์ฌ ๋ถ๋ชจ(์ํผ) ํด๋์ค๋ฅผ ์ ์ ํ๋ ๊ฐ๋ ๊ณผ, ์ด๋ฒคํธ ๋ฐ์์ ์ ํํ ์ ์ฐจ๋ ๋ฐฉ๋ฒ์ ์ ์ํ์ง ์๊ณ ๋ํํ ์ ์๋ ํํ์ผ๋ก ๋์ฒดํ๋ ๊ฒ์ ๋งํ๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ถ์ํ๋ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋๋๋ฐ, ๊ฐ์ฒด์ ๊ด๋ จ ์์ฑ ๋ง 'ํ์' - ๋ฐ์ดํฐ ์ถ์ํ ํ๊ณ ๋ถํ์ํ ์ธ๋ถ ์ ๋ณด๋ '์จ๊ธด๋ค' - ์ ์ด ์ถ์ํ ๊ฐ ์๋ค.
์ ์ด ์ถ์ํ
์ ์ด ์ถ์ํ๋ ์ด๋ค ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ ํด๋น ๋ฉ์๋์ ์๋๋ฐฉ์๊ณผ ๊ฐ์ ๋ด๋ถ ๋ก์ง์ ์จ๊ธฐ๋ ๊ฒ์ ๋งํ๋ค.
์๋ฅผ๋ค์ด ์๋น์๊ฐ ์๋์ฐจ๋ฅผ ์ด์ ํ ๋, ์ฐ๋ฆฌ๋ ์๋์ฐจ์ ์๋ / ์ ์ง, ๊ฐ์ / ๋ธ๋ ์ดํฌ ๋ฑ๊ณผ ๊ฐ์ ์๋์ฐจ ์ด์ ๋์์๋ง ์ ๊ฒฝ ์ฐ๋ฉด ๋์ง, ์ค์ ์์ / ์ ์ง ๋ฉ์ปค๋์ฆ์ด๋ ๊ฐ์ / ์ ๋ ํ๋ก์ธ์ค๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํด์๋ ์ ํ์๊ฐ ์๋ค.
์๋น์๋ ์๋์ฐจ์ ๋์ ์๋ฆฌ ์ธ๋ถ ์ฌํญ์ ๋ชฐ๋ผ๋ ์ด์ ํ๋๋ฐ๋ ์ง์ฅ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ง์ผ ์๋์ฐจ๋ฅผ ์ด์ ํ๋๋ฐ ๋ด๋ถ ์์ง ์๋ฆฌ๊น์ง ์์์ผ ๋๋ค๋ฉด ์ด์ ํ๋๋ฐ ๊น๋ค๋ก์ ์ง๊ธ ์ฒ๋ผ ์๋์ฐจ๋ ๋ง์ด ํ๋ฆฌ์ง์์ ์์ฐ ๋น์ฉ์ ๋นํด ํ์ฌ์ ์ ์๊ฐ ์๊ธฐ๊ฒ ๋๊ณ ์๋์ฐจ ์ข ๋ฅ๋ ์ด์ฒ๋ผ ๋ง์ด ๋ฐ์ ๋์ง ์์์ ๊ฒ์ด๋ค.

์ ์ด ์ถ์ํ ์ดํด๋ฅผ ์ํด ์๋์ฐจ๋ฅผ ๋น๋์ด ์ ์ด ์ถ์ํ๋ฅผ ์ค๋ช ํ์ง๋ง, ๊ฒฐ๊ตญ ํต์ฌ์ ๋ณด๋ค ํ๋ก๊ทธ๋๋ฐ์ ๋น ๋ฅด๊ฒ ์ค๊ณํ๊ณ ๊ตฌํํ๊ธฐ ์ํด ์ถ์ํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ณด๋ฉด ๋๋ค.
๋ง์ผ ์ฌ๋ฌ ๊ตญ๊ฐ์ ๋ฌ๋ ฅ์ ์ฌ์ฉํ๊ฒ ํด์ฃผ๋ ์ด๋ ์๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์ด ๋ฐ์ ์ฌ์ฉํ๋ค ํ์.
๋ฌ๋ ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋๋ ๋ฌ๋ ฅ ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๋์ด ์๋ค.
import CountryCalendar; // ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ถ๋ฌ์ด
CountryCalendar cal = CountryCalendar.getInstance("countryName");
๊ทธ์ getInstance() ๋ฉ์๋์ ๋๋ผ์ด๋ฆ์ ์๊ท๋จผํธ๋ก ๋ฃ์ด์ ํธ์ถ๋ง ํด์ฃผ๋ฉด ์๋์ผ๋ก ๋ฌ๋ ฅ ๊ฐ์ ์ป์ ์ ์๋ ๊ฒ์ด๋ค.
getInstance() ๋ฉ์๋๊ฐ ๋ด๋ถ์์ ์ด๋ค ๋ก์ง์ผ๋ก ๊ฐ ๋๋ผ์ ๋ฌ๋ ฅ์ ๊ตฌ๋ถํด ๊ณ์ฐ ํ๋์ง๋ ์ดํดํ์ง๋ ๋ชปํ๋ฉฐ ๊ด์ฌ๋ ์๋ค. ์ฐ๋ฆฌ๊ฐ ์ํ๋๊ฑด ๊ฒฐ๊ณผ๊ฐ์ด์ง ์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ค์ ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ค ์ฝ๋๋ฅผ ๊น๋ณด๋ ํด๋์ค ๋ด๋ถ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ ์ธ๋์ด ์์๋ค.
์์ ์ฒ์๋ณด๋ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ฆฌํดํ๊ฑฐ๋, ์์ ์ฒ์ ๋ณด๋ BuddhistCalendar ํด๋์ค๋ JapaneseImperialCalendar ํด๋์ค๋ฅผ ์์ฑํ์ฌ ํ ๋นํ๊ณ ์๋ค.
public static CountryCalendar getInstance(Locale aLocale) {
return createCalendar(TimeZone.getDefault(), aLocale);
}
private static CountryCalendar createCalander(TimeZone zone, Locale aLocale) {
// ...
if(caltype != null) {
switch (caltype) {
case "buddhist" :
cal = new BuddhistCalendar(zone, aLocale);
break;
case "japanese" :
cal = new JapaneseImperialCalendar(zone, aLocale);
break;
case "gregory" :
cal = new GregoryianCalendar(zone, aLocale);
break;
}
}
}
๋ฌผ๋ก ์์ ์ ๋ณด๋ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ํ๋๋ฐ ์์ด ํ์์ ์ผ๋ก ํ์ํ ํด๋์ค๋ค ์ด๊ฒ ์ง๋ง, ๊ทธ๋ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์ ์ ์ฅ์์๋ ์์ ๊ฐ์ ๋ณต์กํ ๋ก์ง์ด๋ ๊ฐ๊ฐ์ ํด๋์ค ์ ๋ณด๋ฅผ ์ผ์ผํ ์ ํ์ ์์ด, ์๊ฐ ์์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์๊ฐ ์์ด ์ฌ์ฉํ๋ค๋ผ๋ ๋ง์ ๊ตฌ์ฒด์ ์ด์ง ์๊ณ ์ถ์์ ์ผ๋ก ๋ฉ์๋ ๋์์ ๊ฐ๋ ํด ๊ฒฐ๊ณผ๊ฐ๋ง ๋ฐ๊ณ ๋๋ธ๋ค๋ ๋ป์ด ๋๋ฉฐ ์ด๋ ๊ณง ์ถ์ํ์ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ค๋ผ๊ณ ๋ณผ ์ ์๋ ๊ฒ์ด๋ค.
์ข๋ ๋จ์ ์ผ๋ก ์๋ฅผ ๋ค์๋ฉด, ์ฌ์ค ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ for, while ๋ฌธ๋ ์ฌ์ค ๋ฐ๋ณตํ๋ ๊ฐ๋
์ ์ ์ด ์ถ์ํ ํ ๊ฒ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
์ฝ๋๋ฅผ ๋ฐ๋ณตํ๋๋ฐ ์์ด ๋ด๋ถ CPU ๋์์ด ์ด๋ป๊ฒ ์ด๋ฃจ์ด์ง๋๊ฐ๋ฅผ ์ ํ์์์ด, ๋ฐ๋ณต ๊ธฐ๋ฅ์ด ์ถ์ํ๋ for, while ๋ฌธ๋ฒ์ ์ ์ํจ์ผ๋ก์จ, ์ฐ๋ฆฌ๋ ๋ณต์กํ ์ปดํจํฐ ์ง์์์ด ๊ฐ๋จํ๊ฒ ๋ฃจํ ๊ธฐ๋ฅ์ ์ด์ฉํ์ฌ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ํ ์ ์์ ๋ ๊ฒ์ด๋ค.
์ถ์ํ ๋ผ๋ ๊ฐ๋ ์ด ๋ฐ๋ก ๋จธ๋ฆฟ์์ ๋ค์ด์ค์ง ์์๋ ์ด์ ๋, ์ฐ๋ฆฌ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ฒ์ ๋ฐฐ์ธ๋ '์ค๊ณ'๊ฐ ์๋ '์ฌ์ฉ' ํ๋ ๋ฒ์ ๋จผ์ ๋ฐฐ์ ๊ธฐ ๋๋ฌธ์ด๋ค.
์ฆ, ์ฐ๋ฆฌ๋ ์ฒ์๋ถํฐ ์ถ์ํ์ ๋๋ ํ ํจ๊ณผ๋ฅผ ๋๋ฆฌ๋ฉฐ ์ฝ๋ฉํด์๋ ๊ฒ์ด๋ผ, ๋๋ฌด๋ ๋น์ฐํ ๊ฒ์ ๊ฑฐ๊พธ๋ก ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ์ ์ดํดํ๋ ค๋ ๋ํดํ๋ ๊ฒ์ด๋ค.
๊ฐ์ฒด ์งํฅ์ ์ค๊ณ ์ด๋ก ์ด์ง ์ฌ์ฉ ์ด๋ก ์ด ์๋๋ค. ์ด์ ์ ์ ์ํ๋ฉฐ ์ถ์ํ์ ๋ํด ์ ๊ทผํ๋ฉด ์ดํดํ๊ธฐ ํธํ๋ค.
์ด์ฒ๋ผ ์ ์ด ์ถ์ํ๋ฅผ ํตํด ํ๋ก๊ทธ๋จ์ ์ ์ค๊ณํ๋ค๋ฉด ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ฐ์ฑ ์ฆ๊ฐ, ๊ฐ๋ ์ฑ ์ฆ๊ฐ, ์๋ฌ ๊ฐ์, ์ ์ง ๋ณด์์ ์๊ฐ ๋จ์ถ ๋ฑ์ ํจ๊ณผ๋ฅผ ์ป๊ฒ ๋๋ค.
์ฆ, ์ถ์ํ๋ ํ๋ก๊ทธ๋๋ฐ ๋ ธ๋ ฅ๊ณผ ๋ณต์ก์ฑ์ ์ค์ฌ์ค๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
๋ฐ์ดํฐ ์ถ์ํ
๋ฐ์ดํฐ ์ถ์ํ๋, ๋์์ ๊ฐ๋จํ ๊ฐ๋ ์ผ๋ก ์ผ๋ฐํ ํ๋ ๊ณผ์ ์ ๋งํ๋ค.
์ฝ๊ฒ ์๋ฅผ ๋ค์๋ฉด ์ผ๊ฐํ, ์ฌ๊ฐํ, ์์ด๋ผ๋ ๊ฐ์ฒด๊ฐ ์์ ๋, ์ด ๊ฐ์ฒด๋ค์ ํ๋๋ก ๋ฌถ์ ๋ ๊ฐ์ฒด๋ค์ ๊ณตํต ํน์ง์ธ ๋ํ์ผ๋ก ๋ฌถ์ด ์ด๋ฆ์ ๋ถ์ด๋ ๊ฒ์ ๋ฐ์ดํฐ ์ถ์ํ๋ผ๊ณ ๋ณด๋ฉด ๋๋ค.
์ด์ฒ๋ผ ์ถ์ํ๋ฅผ ํ๋ฉด ํ ์๋ก ๊ฐ์ฒด์ ๋ํ ์ผํจ์ด ์ฌ๋ผ์ง๊ณ ๊ณตํต๋ ํน์ง๋ง ๋จ๊ฒ ๋๋ค.
์๋ฅผ๋ค์ด ์์ดํฐ ๊ฐ์ฒด๋ฅผ ์ถ์ํ๋ฅผ ํตํด ๊ฐ์ฒด ์ ๋ณด ๋ถ๋ฆฌ๋ฅผ ํ ๋, ์์ดํฐ โ ํด๋ํฐ โ ํต์ ๊ธฐ๊ธฐ โ ์ ์์ ํ ์ผ๋ก ์ถ์ํ(abstract)๊ฐ ์ด์ด์ง ์ ์๋ค.

abstract class ์ ์์ ํ {
}
abstract class ํต์ ๊ธฐ๊ธฐ {
}
abstract class ํด๋ํฐ {
}
class ์์ดํฐ {
}
๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ ์ถ์ํํ ์์ ์์๋ถํฐ ๊ฐ ์์์ ๋ง๋ ๊ธฐ๋ฅ๋ค์ ์ ์ ํ๋ค.
์ ์์ ํ์ ์ ์ ๊ธฐ๋ฅ์, ํต์ ๊ธฐ๊ธฐ๋ ํตํ๊ธฐ๋ฅ, ํด๋ํฐ์ ์นด๋ฉ๋ผ, ๊ฒ์ ๊ธฐ๋ฅ, ์์ดํฐ์ ์ ํ ์ฑ์ ์ด์ฉํ ์์๋ ์ฐ๋ ๊ธฐ๋ฅ์ ์์๋ง๋ค ์์ฑ์ ๋ฐฐ์นํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ผ๋ก ์์ ์์๊ฐ ๊ฐ์ง ๋ด์ฉ๋ค์ ๊ฐ์ง ์ ์๋๋ก ์์ ๊ด๊ณ(extends)๋ฅผ ์ค์ ํ์ฌ ์ด์ด์ค๋ค.
์ด๋ ๊ฒ ๊ณตํต๋ ๊ธฐ๋ฅ๋ค์ ์์ ์์์์ ๋ฏธ๋ฆฌ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ ์์ดํฐ์ ๋ง๋ค๋ ์์ดํฐ๋ง์ ๊ณ ์ ๊ธฐ๋ฅ ์์กฐ๋ก ๊ฐ๋ฐํ ์ ์๊ฒ ๋๋ค.

abstract class ์ ์์ ํ {
์ ์๊ธฐ๋ฅ();
}
abstract class ํต์ ๊ธฐ๊ธฐ extends ์ ์์ ํ {
ํตํ๊ธฐ๋ฅ();
}
abstract class ํด๋ํฐ extends ํต์ ๊ธฐ๊ธฐ {
์นด๋ฉ๋ผ๊ธฐ๋ฅ();
๊ฒ์๊ธฐ๋ฅ();
}
class ์์ดํฐ extends ํด๋ํฐ {
์ ์๊ธฐ๋ฅ() { ... }
ํตํ๊ธฐ๋ฅ() { ... }
์นด๋ฉ๋ผ๊ธฐ๋ฅ() { ... }
๊ฒ์๊ธฐ๋ฅ() { ... }
์ ํ ์ ํ ์ฐ๋๊ธฐ๋ฅ() { ... }
}
// โ ์ต์ข
์ ์ผ๋ก ์์ดํฐ class๋ ์ ์, ํตํ, ์นด๋ฉ๋ผ, ๊ฒ์, ์ ํ ์ฐ๋ 5๊ฐ์ง ๊ธฐ๋ฅ์ ์ ์ํ์ฌ ์ค๊ณ๋๋ค
๋ฌผ๋ก ํด๋ํฐ์ ๊ฐ๋ฐํ๋๋ฐ ์ ์ ์ ํ ๊น์ง ๋ชฉ๋ก์ ์ถ์ํ ํ ํ์๊ฐ ์๊ฒ ๋๋ ์ถ์ง๋ง, ์ด๋ฐ ์ถ์ํ ๊ตฌ์กฐ ๋ถ๋ฆฌ๋ ๊ฐ๋ฐ์ ๋ณด๋ค ๋น ๋ฅด๊ฒ ํด์ค๋ค.
์์ดํฐ ์ ํ ํ๋๋ง ๋ง๋ค๋๋ ๋นํจ์จ์ ์ผ๋ก ๋ณด์ผ์ ์์ง๋ง ์ ํ ์ข ๋ฅ๊ฐ ๋์ด๋ ์๋ก ์ฅ์ ์ผ๋ก ์์ฉ ๋๋ค.
๊ณตํต ๊ธฐ๋ฅ์ ๋ฏธ๋ฆฌ ๊ฐ๋ฐํด ๋๋ฉด, ๊ธฐ๋ฅ ์์์ ํตํด ๋น ๋ฅด๊ฒ ๊ตฌ์กฐ๋ฅผ ํ์ฅ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.

์์ (Inheritance)
์๋ฐ์์์ ์์์ด๋ ๊ฐ์ฒด๋ค ๊ฐ์ ๊ด๊ณ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐฉ๋ฒ์ ๋งํ๋ค.
์์ ์์ดํฐ ์ถ์ํ ์์์์, ์ถ์ํ๋ฅผ ํตํด ๋ถ๋ฆฌํ ์ถ์ ๊ฐ๋ ์ ๋ณด๋ค์ ์๋ก ์ด์๋๋ฐ ์ด๊ฒ์ด ๋ฐ๋ก ์์์ด๋ค.
์ฆ, ์์ ํด๋์ค์ ์์ฑ(๋ณ์)๊ณผ ๊ธฐ๋ฅ(๋ฉ์๋)์ ์ฌ์ฌ์ฉํ์ฌ(์์) ํ์ ํด๋์ค๊ฐ ์ ๋ถ ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ ๋งํ๋ค.
์์์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ extends ํค์๋๋ฅผ ์์ ๋ฐ์ ํด๋์ค์ ๋ช
์ํ์ฌ ์ฌ์ฉํ๋ค.
๊ทธ๋ฆฌ๊ณ ์์๋๋ ํด๋์ค๋ super/parent ํด๋์ค๋ผ ๋ถ๋ฅด๊ณ ์๋กญ๊ฒ ์์ฑ๋ ํด๋์ค๋ฅผ sub/child ํด๋์ค๋ผ ๋ถ๋ฆฌ์ด๋ค.
// super ํด๋์ค
class Parent {
String name;
String age;
public void say() {
System.out.println(name + age);
}
}
// sub ํด๋์ค (์์ ๋ฐ์)
class Child extend Parent{
String hair;
public void myHair() {
System.out.println(hair);
}
}
// ์์๋ฐ์ sub ํด๋์ค๋ super ํด๋์ค์ ์์ฑ๋ค์ ์ด์ฉ์ด ๊ฐ๋ฅํ๋ค.
Child c = new Child();
c.name = "ํ์ฑํ";
c.age = 17;
c.say();
c.hair = "M์ํ.."
c.myHair();
์ค๋ณต ์์ฑ ์ ๊ฑฐ
์์ ๊ธฐ๋ฅ์ ์ด์ฉํ๊ฒ ๋๋ฉด, ์์ ํด๋์ค์ ํน์ง์ ํ์ํด๋์ค์์ ์์๋ฐ์ ์ฝ๋์ ์ค๋ณต ์ ๊ฑฐ, ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ์ฆ๋ ํจ๊ณผ๋ ๋๋ฆด ์ ์๋ค.
์ฆ, ์์ฃผ ์ฌ์ฉ๋ ๊ฒ์ด ์์๋๋ ๊ธฐ๋ฅ์ ๋ชจ์๋์ ํด๋์ค๋ฅผ ํ๋ฒ ๋ง๋ค์ด ๋์ผ๋ฉด ํธํ๊ฒ ์ฌ์ฌ์ฉ์ ํจ์ผ๋ก์จ ์ ์ง๋ณด์ ํจ์จํ๋ฅผ ์ถ๊ตฌํ ์ ์๋ ๊ฒ์ด๋ค.
๋ค์์ Dog, Cat, Lion ํด๋์ค์ ๊ณตํต๋ ์์ฑ๋ค teethCount, legCount, tailCount๋ฅผ Animal ํด๋์ค๋ก ํ๋๋ก ๋ฌถ์ด ์์(extends)๋ฅผ ํตํด ์ฝ๋๋์ ์ค์ธ ๊ฒ์ ๋ณผ ์ ์๋ค.
class Dog {
int teethCount; // ์ค๋ณต๋ ์์ฑ๋ค
int legCount; // ์ค๋ณต๋ ์์ฑ๋ค
int tailCount; // ์ค๋ณต๋ ์์ฑ๋ค
void bark();
}
class Cat {
int teethCount; // ์ค๋ณต๋ ์์ฑ๋ค
int legCount; // ์ค๋ณต๋ ์์ฑ๋ค
int tailCount; // ์ค๋ณต๋ ์์ฑ๋ค
void meow();
}
class Lion {
int teethCount; // ์ค๋ณต๋ ์์ฑ๋ค
int legCount; // ์ค๋ณต๋ ์์ฑ๋ค
int tailCount; // ์ค๋ณต๋ ์์ฑ๋ค
void roar();
}
class Animal {
int teethCount;
int legCount;
int tailCount;
}
class Dog extends Animal { // ์์์ ํตํด ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐ
void bark();
}
class Cat extends Animal { // ์์์ ํตํด ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐ
void meow();
}
class Lion extends Animal { // ์์์ ํตํด ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐ
void roar();
}
# ์ฐธ๊ณ ์๋ฃ
https://www.youtube.com/watch?v=M3zlc6jiB5o
https://m.blog.naver.com/tkdldjs35/221299078193
์ด ๊ธ์ด ์ข์ผ์ จ๋ค๋ฉด ๊ตฌ๋ & ์ข์์
์ฌ๋ฌ๋ถ์ ๊ตฌ๋
๊ณผ ์ข์์๋
์ ์์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค.