์ ๋ฆฌํ๋ค๋ณด๋ ๋ด์ฉ์ด ๊ธธ์ด์ ธ์ 2๊ฐ์ ๊ธ์ ๋๋์ด ์ ๋ฆฌํ๊ณ ์ ํ๋ค. ์ด๋ฒ ๊ฐ์๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๋ฌด์์ธ์ง, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง์ ๋ํด ๋ค๋ฃจ๋ ๊ฐ์์๋ค.
๊ฐ์ฒด ์งํฅ vs ์ ์ฐจ ์งํฅ
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(Object Oriented Programming)์ ํน์ง์ ์๋์ ๊ฐ๋ค.
- ๋ฐ์ดํฐ์ ๋ฐ์ดํฐ์ ๋ํ ์ฐ์ฐ์ ์ํํ๋ ์ฝ๋๋ฅผ ๊ทธ๋ฃนํ ํ ๊ฐ์ฒด๋ฅผ ์ค์ฌ์ผ๋ก SW๋ฅผ ์ค๊ณ ๊ฐ๋ฐํ๋ ํจ๋ฌ๋ค์
- ์์คํ ์ ์ฐธ์ฌํ๊ณ ์ฑ ์์ ๊ฐ๋ ๊ฐ์ฒด๊ฐ ๋ฌด์์ธ์ง์ ์ฃผ๋ชฉ
- ๋ค์์ ๊ฐ์ฒด๊ฐ ๊ฐ์์ ์ญํ ์ ํ๊ณ , ๊ฐ์ฒด ๊ฐ์๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ์ ์ฒด ์์คํ ์ ๊ตฌ์ฑ
์์๋ฅผ ๋ค์๋ฉด ์๋์ ๊ฐ๋ค.
๐ก ์ปคํผ์์ ์ด์ํ๋ค๊ณ ๊ฐ์ ํ์. ์ง์ A, B, C๊ฐ ์๋ ์ํฉ
A - ๋ฐ๋ฆฌ์คํํ, B- ์ ๋นตํ, C- ์ด์ํ์ ๋งก๊ธด๋ค.
A๋ ์ปคํผ๋ฅผ ๋ด๋ฆฌ๊ณ , B๋ ๋นต์ ๊ตฝ๊ณ , C๋ ์๋ ์๋๋ฅผ ํ๋ค. → ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 2๋ฒ์งธ ํน์ง
๊ทธ๋ฆฌ๊ณ C๋ ์ปคํผ ์ฃผ๋ฌธ์ด ๋ค์ด์ค๋ฉด A์๊ฒ, ๋นต ์ฃผ๋ฌธ์ด ๋ค์ด์ค๋ฉด B์๊ฒ ์๋ ค์ค์ผ ํ๋ค. → ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ 3๋ฒ์งธ ํน์ง
๋ง์ฝ ์ปคํผ๋จธ์ ์ด ๊ณ ์ฅ๋ฌ๋ค๊ณ ํ ๊ฒฝ์ฐ ๋ฐ๋ฆฌ์คํํ์ A๋ง ๊ธฐ๊ณ ์ฌ์ฉ๋ฒ์ ํ์ตํ๋ฉด ๋๋ค.
์ด๋ฒ์๋ ๊ฐ์ฒด์งํฅ๊ณผ ์ ์ฐจ์งํฅ์ ์ฐจ์ด๋ฅผ ์์๋ณด์.
์์์ ๊ฐ์ฒด ์งํฅ์ ๋ค์์ ๊ฐ์ฒด๊ฐ ๊ฐ์์ ์ญํ ์ ํ๊ณ , ๊ฐ์ฒด ๊ฐ์๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค. ๋ผ๊ณ ํ๋ค. ์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์์ฐจ์ ์ธ ์ฒ๋ฆฌ๊ฐ ์ค์์ ๋๋ฉฐ ํ๋ก๊ทธ๋จ ์ ์ฒด๊ฐ ์ ๊ธฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋๋๋ก ๋ง๋๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ์ฐจ์ด์ ์ ์์๋ฅผ ํตํด ๋ณด์. ๋ง์ผ ์ด๋ฌ๋ ์์คํ ์ ์ค๊ณํ๋ค๋ฉด ๊ฐ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ์๋ ์์๋ค์ ๊ณ ๋ คํ ๊ฒ์ด๋ค.
์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ | ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ |
์ด๋ฌ๋ ์์คํ ์ ์ด๋ค ๋์๋ค์ ํด์ผ ํ ๊น? | ์ด๋ฌ๋ ์์คํ ์ ์ฃผ์ ์์๋ค์ ๋ฌด์์ผ๊น? |
ex) ๊ฐ์ ๋ฃ๊ธฐ, ์ง๋ฌธ, ๊ฐ์ ๊ตฌ๋งค ๊ธฐ๋ฅ | ex) ๊ฐ์ฌ ๊ฐ์ฒด, ์๊ฐ์ ๊ฐ์ฒด, ๊ด๋ฆฌ์ ๊ฐ์ฒด |
๊ฐ์ ์๊ฐ ๊ธฐ๋ฅ ํจ์ ๊ตฌํ, ๊ฐ์ ๊ตฌ๋งค ๊ธฐ๋ฅ ํจ์ ๊ตฌํ ... | ๊ฐ์ฌ,์๊ฐ์ ๊ฐ์ฒด๋ ์ด๋ค ์์ฑ์ ๊ฐ๊ณ ์ด๋ค ๊ธฐ๋ฅ์ ํ๋๊ฐ? ๊ฐ์ฌ, ์๊ฐ์ ๊ฐ์ฒด๋ ์ด๋ค ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ ํ๋ ฅํ๋๊ฐ? |
์์ฆ์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ ๋ง์ด ์ฌ์ฉํ๊ณ ์๋ค. ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์๋์ ๊ฐ์ ์ฅ์ ๋ค์ ๊ฐ์ง๊ณ ์๋ค.
- ๊ฐ๋ฐํ๋ ค๋ ๊ฒ์ ๊ธฐ๋ฅ๋ณ๋ก ๋ฌถ์ด ๋ชจ๋ํ
→ ํ๋์จ์ด๊ฐ ๊ฐ์ ๊ธฐ๋ฅ ์ค๋ณต์ผ๋ก ์ฐ์ฐํ๋ ๊ฒ ๋ฐฉ์ง
→ ๋ชจ๋์ ์ฌํ์ฉ ํ๊ธฐ ๋๋ฌธ์ ํ๋์จ์ด์ ๋ถ๋ด ๊ฐ์ - SW ๊ตฌ์ฑ ์์๊ฐ์ ๋ ๋ช ํํ ์ปค๋ฎค๋์ผ์ด์ ๊ฐ๋ฅ
- ๊ฒฐ๊ณผ์ ์ผ๋ก SW๋ฅผ ๋ ์ฝ๊ฒ ์ ์ง๋ณด์ ํ ์ ์์
Java์ ํด๋์ค
์ด์ Java์ ํด๋์ค์ ๋ํด ์์๋ณด๋๋ก ํ์. ์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ “๋ค์์ ๊ฐ์ฒด๊ฐ ๊ฐ์์ ์ญํ ์ ํ๊ณ , ๊ฐ์ฒด ๊ฐ์๋ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค” ๋ผ๊ณ ์ค๋ช ํ์๋ค. ์ด๋์ ๊ฐ์ฒด๋ฅผ ๋ง๋๋ ํ์ด ๋ฐ๋ก ํด๋์ค์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ํด๋์ค๋ ์ฟ ํค ํ, ๊ฐ์ฒด๋ ์ฟ ํค์ ๋น์ ํ์ฌ ๋ง์ด ์ค๋ช ํ๋ค.
๊ฐ์ฒด๋ ์๋์ ๊ฐ์ด ์๊ฒผ๋ค.
์ด๋ ๊ฒ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ , ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋๋ ํด๋์ค๋ช ๋ณ์๋ช = new ํด๋์ค๋ช ();์ ๊ฐ์ด ์์ฑํ๋ค. ์์ Car ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค๋ฉด ์๋์ ๊ฐ์ด ์์ฑ ํ ๊ฒ์ด๋ค. ๋ ๊ฐ ๋ฐ์ดํฐ์ ๋ฉ์๋์๋ ์๋์ ๊ฐ์ด ์ ๊ทผํ๋ค.
//Car ๊ฐ์ฒด ์์ฑ
Car car1=new Car();
//car1์ color์์ฑ์ red๋ก ์ค์ .
car1.color=red;
//car1์ speedUp๋ฉ์๋ ํธ์ถ
car1.speedUp();
๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์ด๋ค ์ผ์ด ๋ฐ์ํ๋์ง ์์ธํ ๋ณด๋๋ก ํ์. ์์์ car1์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ฉด new ํค์๋๋ฅผ ์ฌ์ฉํด Car๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๊ทธ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ ์ ๋ณด๋ฅผ car1์ ๋ด๋ ๊ฒ์ด๋ค. ์ ์ฝ๋๊ฐ ๋ชจ๋ ์คํ๋๋ฉด ์๋์ ๊ฐ์ด ๋ ๊ฒ์ด๋ค.
car1.color=red; ๊ณผ ๊ฐ์ด ๋ฉค๋ฒ ๋ณ์๋ฅผ ์ด๊ธฐํ ํ ์ ์์ง๋ง Java์๋ ์์ฑ์ ๋ผ๋ ๊ฒ์ด ์กด์ฌํ๋ค. ์์ฑ์๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ์์ ์ ํธ์ถ๋๋ ํน๋ณํ ํํ์ ๋ฉ์๋์ด๋ค. ์ฃผ๋ก ๊ฐ์ฒด ๋ฉค๋ฒ ๋ณ์์ ์ด๊ธฐํ ์์ ์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
๐ก ์ฐธ๊ณ : ๋ฉค๋ฒ ๋ณ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ด๊ธฐํ ํ์ง ์์ ๊ฒฝ์ฐ ์๋ ๊ฐ์ด ์ ์ฅ๋๋ค.
์ซ์ํ ๋ณ์ : 0
boolean ๋ณ์ : false
์ฐธ์กฐ ๋ณ์ : null
์์ฑ์(Constructor)์ ํน์ง์ ์๋์ ๊ฐ๋ค.
- ์์ฑ์์ ์ด๋ฆ์ ํด๋์ค์ ์ด๋ฆ๊ณผ ๋์ผ
- ์ ๊ทผ ์ ์ด์๋ ๋ณดํต public์ฌ์ฉ
- 0๊ฐ ๋๋ 1๊ฐ ์ด์์ ํ๋ผ๋ฏธํฐ ์ ์ธ ๊ฐ๋ฅ
- ๋ฆฌํด ํ์ ์ ์๋ต๋จ
- ์์ฑ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ถ๊ฐํ์ง ์์ ๊ฒฝ์ฐ Default ์์ฑ์๋ฅผ ์ ๊ณตํ๋ค. →1๊ฐ ์ด์์ ์์ฑ์๋ฅผ ๋ช ์์ ์ผ๋ก ๊ตฌํํ ๊ฒฝ์ฐ์๋ ์ ๊ณตํ์ง ์๋๋ค.
์์ฑ์ ๊ตฌํ ์์๋ ์๋์ ๊ฐ๋ค.
public class Car {
String color;
int price;
String brand;
//์์ฑ์
public Car(String c,int p, String b){
this.color=c;
this.price=p;
this.brand=b;
}
}
์ดํ Car ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ด ํ๋ฉด ๋๋ค.
//์์ฑ์๋ฅผ ๋ง๋ค๊ธฐ ์ : ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์ ๊ณต๋จ
Car car1=new Car();
System.out.println(car1.price) //๊ธฐ๋ณธ๊ฐ์ธ 0 ์ถ๋ ฅ๋จ
//์์ฑ์๋ฅผ ๋ง๋ ํ
Car car1=new Car("red",10,"brand_A");
System.out.println(car1.price) //์์ฑ์์ ์ํด car1์ price๋ 10์ผ๋ก ์ด๊ธฐํ ๋์ผ๋ 10 ์ถ๋ ฅ
์บก์ํ(Encapsulation)
์บก์ํ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ค์ํ ํน์ง ์ค ํ๋์ด๋ค. ์๋ 2๊ฐ์ง ์๋ฏธ๋ฅผ ๊ฐ์ง๋ค.
์บก์ํ (Encapsulation)์ 2๊ฐ์ง ์๋ฏธ
- ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ํ๋์ ๋จ์๋ก ๊ทธ๋ฃนํ
- ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์๋ →๋ฐ๋์ ํ์ํ ์์ฑ ๋ฐ ๋ฉ์๋๋ง ์ธ๋ถ์ ๋ ธ์ถ →๋๋ถ๋ถ์ ์์ฑ ๋ฐ ๋ฉ์๋๋ ์ธ๋ถ์์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ง์
๋ ๋ฒ์งธ ํน์ง์ ๋ณด๋ฉด ๊ฐ์ฒด์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ์๋ํ๋ค๊ณ ๋์ด์๋ค. ์ด๋ ์ ๊ทผ ์ ์ด์(Access Modifier)๋ฅผ ํ์ฉํด์ ๋ฉค๋ฒ์ ์ ๊ทผ์ ์ ์ดํ๋ค๋ ๋ป์ด๋ค. Java์๋ 4๊ฐ์ง ์ ๊ทผ ์ ์ด์๊ฐ ์๋ค.
์ฝ๊ฒ ๋งํ๋ฉด public๋ ๊ฐ์ฒด.~~ํด์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๊ณ private๋ ๊ฐ์ฒด ๋ด๋ถ์์๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
์์(inheritance)
์์์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ง ์ค ๊ฐ์ฅ ๋ํ์ ์ธ ํน์ง์ด๋ค. ์ผ๋ฐํ๋ ํด๋์ค(๋ถ๋ชจ ํด๋์ค)๋ฅผ ์ฌ์ฌ์ฉ ํ์ฌ ์๋ก์ด ํด๋์ค(์์ ํด๋์ค)๋ฅผ ์์ฑํ๋ ๊ฒ์ ์์์ด๋ผ๊ณ ํ๋ค. ์ด๋ ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๋ชจ๋ ๋ฉค๋ฒ ๋ณ์์ ๋ฉ์๋๋ฅผ ์์๋ฐ๋๋ค.
๋ฌธ๋ฒ์ ์๋์ ๊ฐ๋ค. ์ด๋ ์์๋ฐ์ ๋ฉค๋ฒ๋ ์์ ํด๋์ค์์ ๋ณ๋๋ก ์ ์ธํ์ง ์๋๋ค.
class ์์ํด๋์ค๋ช
extends ๋ถ๋ชจํด๋์ค๋ช
{...}
//ex)
class PaidUser extends User{
String membership;
}
์์์ ํน์ง์ ์๋์ ๊ฐ๋ค.
- ํด๋์ค ๊ฐ์ ๊ณ์ธต์ ๋ถ๋ฃ(hierarchical classifications)๊ฐ ๊ฐ๋ฅํด์ง
- ์์๋ฐ์ ๋ฉค๋ฒ๋ ์์ ํด๋์ค์์ ๋ณ๋๋ก ์ ์ธํ์ง ์์
- ์์๋ฐ์ ๋ฉค๋ฒ์ ๋ํ ์ฝ๋๋ ๋ถ๋ชจ ํด๋์ค์์ ๊ณตํต์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
- ํด๋์ค ๊ฐ์ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ฐ๋ฅธ ๋คํ์ฑ(polymorphism)์ ์ฉ ๊ฐ๋ฅ
์ด๋ ์ฃผ์ํ ์ ์ ์๋ฐ๋ ๋ค์ค ์์์ ํ์ฉํ์ง ์๋๋ค๋ ์ ์ด๋ค. ์ฆ ํ๋์ ํด๋์ค๋ก๋ง ์์์ ๋ฐ์ ์ ์๋ค. ์์ ์ ๊ทผ ์ ์ด์ 4๊ฐ๋ฅผ ์๊ฐํ์๋ค.
private์ ๊ฒฝ์ฐ์๋ ์์ ํด๋์ค์์๋ ์ ๊ทผ์ด ์ ํ๋๋ค. ์ฆ ์์ ํด๋์ค์์์ ์ ๊ทผ์ ์ ํํ๊ธฐ ์ํด์๋ private๋ฅผ ์ฌ์ฉํ๊ณ , ์์ ํด๋์ค์์์ ์ ๊ทผ์ ํ์ฉํ๊ธฐ ์ํด์๋ protected๋ฅผ ์ฌ์ฉํด์ผํ๋ค.
๐์ฝ๋ํ๋ ์ Java ์น ๊ฐ๋ฐ ์ฒดํ๋จ ํ๋์ผ๋ก ์ ๊ณต๋ฐ์ ๊ฐ์์ ๋๋ค.
๐์ฝ๋ํ๋ ์์์ "Java ํ๋ก๊ทธ๋๋ฐ ์ด๊ธ" ๊ฐ์๋ฅผ ์๊ฐ ํ ์์ฑํ ๊ธ์ ๋๋ค.
๐์ฝ๋ํ๋ ์ ๋ฐ๋ก๊ฐ๊ธฐ ๋งํฌ : https://www.codepresso.kr/
๋๊ธ