์์ฑ์ : ์๊ทธ๋ฆผ
Table of Contents
1960๋ ๋ ๋ง, ํ๋์จ์ด ๋ฐ์ ์๋์ ๋นํด ์ํํธ์จ์ด ๋ฐ์ ์๋๊ฐ ๋๋ฆฌ๋ค๋ ํ์์ ๋ฐ๋ผ '์ํํธ์จ์ด ์๊ธฐ๋ก '์ด ๋ฑ์ฅํ์๋ค. ์ด ๋ ํ๋์จ์ด์ ์ํํธ์จ์ด์ ํน์ง์ ๋น๊ตํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ํ๋์จ์ด๋ ๊ฐ ๊ธฐ๋ฅ๋ค์ด ๋
๋ฆฝ์ ์ธ ๋ชจ๋๋ก ๊ฐ๋ฐ๋๋ค.
์ฌ๋ฌ ๋ชจ๋์ ์กฐ๋ฆฝํ ์ ์๊ณ , ํน์ ๋ชจ๋์ด ๊ณ ์ฅ๋๊ฑฐ๋ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ฉด ๊ต์ฒด ๋ฐ ์์ ์ด ์ฉ์ดํ๋ค. - ์ํํธ์จ์ด๋ ๋ชจ๋ํ๊ฐ ๋์ง ์์๋ค.
๋ฐ๋ผ์ ํ ๋ฒ ์์ฑ๋ ์ฝ๋๋ ์ฌ์ฌ์ฉ์ด ์ด๋ ต๋ค๋ ๋ฌธ์ ์ ์ด ์์๋ค.
์ด๋ฌํ ๋ถ์์ ๋ฐ๋ผ ๋ชจ๋ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ๋ํ ์๊ตฌ๊ฐ ๋ฐ์ํ์๊ณ , ์ด๋ ๊ฐ์ฒด ์งํฅ ํจ๋ฌ๋ค์์ผ๋ก ์ด์ด์ก๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๋ฑ์ฅํ๊ธฐ ์ด์ ์๋ ์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด์๋ค. ์ ์ฐจ ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์คํ ์์๊ฐ ์ -> ์๋๋ก ์์ฐจ์ ์ผ๋ก ์งํ๋์๊ณ , ์ฝ๋ ์ฌ์ฌ์ฉ์ ์ํด์๋ ๊ธฐ์กด์ ๋ง๋ค์ด์ง ์ฝ๋๋ฅผ ๋ณต์ฌ + ๋ถ์ฌ๋ฃ๊ธฐ ํด์ผ ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ํจ์๊ฐ ๋ฑ์ฅํ์๋ค. ํจ์๋ ์์ฃผ ์ฌ์ฉ๋๋ ํน์ ํ ์ฝ๋๋ฅผ ํ๋์ ๋ชจ๋(๋ฌถ์)์ผ๋ก ๋ฌถ์ด ๋์ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ํ์ํ ๋๋ง๋ค ํจ์๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ์ง๋ง, ๋ฐ์ดํฐ์ ํจ์ ๊ฐ ์ ๊ธฐ์ ์ธ ๊ด๊ณ์ฑ์ ๊ฐ์ง ๋ชปํ๋ค๋ ์์ฌ์์ด ์์๋ค.
์ดํ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ด ๋ฑ์ฅํ๋ฉด์ ํจ์๋ณด๋ค ๋ ๋์ ๋ชจ๋ํ๋ฅผ ์ง์ํ๊ฒ ๋๋ค. ๊ฐ์ฒด ์์ ์ด ๊ฐ์ง ๊ณ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๊ฐ ๋ฑ์ฅํ๊ฒ ๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํตํด ๋ณด๋ค ๋์ ์ ์ง๋ณด์์ฑ์ ๊ฐ์ง๊ฒ ๋์๊ณ , ๊ฐ์ฒด ๊ฐ ์์ ๋ก์ด ๋ฐ์ดํฐ ์ด๋์ด ๊ฐ๋ฅํด์ง๊ฒ ๋์๋ค.
๊ด๊ณ : ๊ฐ์ฒด โถ๏ธ ํด๋์ค โถ๏ธ ์ธ์คํด์ค
- ๊ฐ์ฒด (Object) : ํ์ค ์ธ๊ณ์ ์กด์ฌํ๋ ์ ๋ฌดํ์ ๋ชจ๋ ๊ฒ
- ์ ์ ์ธ ์์ : ๋ณ์ (Variable)
- ๋์ ์ธ ์์ : ๋ฉ์๋ (Method)
- ํด๋์ค (Class) : ํ์ค ์ธ๊ณ์ ๊ฐ์ฒด๋ฅผ ํ๋ก๊ทธ๋จ์์ ์ด์ฉํ ์ ์๋ ๊ฐ์ฒด๋ก ํํํ๋ ๊ฒ
- ํ์ค ์ธ๊ณ์ ๊ฐ์ฒด๋ฅผ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ์์ฑํ ์ ์๋ ํ ํ๋ฆฟ์ด๋ผ๊ณ ๋ณผ ์ ์๋ค.
- ์๋ฐ ํ๋ก๊ทธ๋จ์ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์์ด๋ค.
- ์ธ์คํด์ค (Instance) : ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ์กด์ฌํ๋ ๊ฐ์ฒด
- ํด๋์ค๋ก๋ถํฐ ์์ฑ๋ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ์์ ๊ฐ์ฒด์ด๋ค.
- Object = Instance
๋ง์ผ ๊ธฐ์กด์ ํด๋์ค์ ๋ํ์ฌ ์์ฑ๊ณผ ๋ฉ์๋๊ฐ ์ฝ๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ํ์๋ก ํ๋ค๊ณ ์๊ฐํด๋ณด์. ์ด ๊ฒฝ์ฐ ์์์ ์ด์ฉํ๋ฉด ์ด๋ฏธ ์กด์ฌํ๋ ํด๋์ค๋ฅผ ๋ฐํ์ผ๋ก ํ์ํ ๋ณ์, ๋ฉ์๋๋ฅผ ์ถ๊ฐ ์ ์ํ์ฌ ์๋ก์ด ํด๋์ค๋ฅผ ์์ฑํ ์ ์๋ค.
- ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์
๊ณตํต์ ์์ฑ/๊ธฐ๋ฅ์ ๋ํ์ฌ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ํด๋น ํด๋์ค์ ๋ํด์๋ง ์์ ํ๋ฉด ๋๋ค. - ๊ฐ์ฒด๋ค ์ฌ์ด์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ด๋ฃฐ ์ ์์
- ์์ ๊ณ์ธต์ผ๋ก ๊ฐ์๋ก : ์ผ๋ฐํ, ๋ณดํธํ
- ํ์ ๊ณ์ธต์ผ๋ก ๊ฐ์๋ก : ํน์ํ, ๊ฐ๋ณํ
- ์์ ํด๋์ค๋ ์์ ์ ๋ณ์&๋ฉ์๋ ๋ฟ๋ง ์๋๋ผ ๋ถ๋ชจ ํด๋์ค์ ๋ณ์์ ๋ฉ์๋๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ์ ์๋ค.
- ์์ ๊ด๊ณ๋ ๋
ผ๋ฆฌ์ ์ผ๋ก ๋ฐ๋์ is a~ ๊ด๊ณ๊ฐ ์ฑ๋ฆฝ๋์ด์ผ ํ๋ค.
๋ถ๋ชจ-์์ ํด๋์ค์ ๊ด๊ณ๊ฐ ์ผ๋ฐํ, ํน๋ณํ ๊ด๊ณ(is a~)์ ์์ด์ผ ํ๋ค. ์ด๋ ๋ฌธ๋ฒ์ ์ผ๋ก ๊ฐ์ ๋๋ ๊ฒ์ด ์๋๋ผ ๋ ผ๋ฆฌ์ ์ผ๋ก ํ๋จ๋์ด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ ์ง๋ณด์๊ฐ ์ด๋ ค์์ง๋ค.
- ๋ค์ค ์์ : ํ๋์ ํ์ ํด๋์ค๊ฐ ๋ ๊ฐ ์ด์์ ์์ ํด๋์ค๋ฅผ ๊ฐ๋ ๊ฒ
- ๋จ์ผ ์์ : ํ๋์ ํ์ ํด๋์ค๊ฐ ๋จ ํ๋์ ์์ ํด๋์ค๋ฅผ ๊ฐ๋ ๊ฒ
์๋ฐ๋ ๋จ์ผ ์์๋ง์ ์ง์ํ๋ ์ธ์ด์ด๋ค.
one interface, multiple implementation
์ธํฐํ์ด์ค๋ ํ๋์ง๋ง ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ ์ฌ๋ฌ๊ฐ์ง๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ ์ ์๋ค๋ ๊ฐ๋ ์ด๋ค.
๋คํ์ฑ์ ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ์ ํตํด ์ง์๋๋ค.
- ์ค๋ฒ๋ก๋ฉ(Overloading) : ํ ํด๋์ค ์์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ํ๋ฉด์, ๊ทธ ์ธ์์ ๊ฐ์๋ ์ ํ์ ๋ค๋ฅด๊ฒ ํด ๋์ ํํ
- ์ค๋ฒ๋ผ์ด๋ฉ(Overriding) : ์์ ๊ด๊ณ์ ์๋ ํ์ ํด๋์ค๊ฐ ์์ ํด๋์ค๊ฐ ๊ฐ์ง๊ณ ์๋ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ ๊ฒ (์ฌ์ ์๋ ๋ฉ์๋๊ฐ ์ ์ธ๋ ํํ๋ ์์ ํด๋์ค์์ ์ ์ธ๋ ๊ฒ๊ณผ ๊ฐ์)
ํ์ค ์ธ๊ณ์ ์กด์ฌํ๋ ๋ค์ํ ๊ฐ์ฒด๋ค์ ๊ณตํต๋ ํน์ฑ์ ๋ชจ์ ์ผ๋ฐํ ํด๋๋ ๊ฒ์ผ๋ก, ํด๋์ค๋ฅผ ์ ์ํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
ex. [๋นํ๊ธฐ, ์๋์ฐจ, ์ด์ฐจ, ๋ฐฐ]๋ ํ๋ฌผ์ด๋ ์น๊ฐ์ ์ด๋ฐํ๋ค๋ ๊ณตํต์ ํน์ง์ด ์๋ค.
๋ฐ๋ผ์ ์ด์ก ์๋จ์ผ๋ก ์ถ์ํ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๋ ๋์๊ฐ ํด๋์ค๋ก์ ์ ์๊ฐ ๊ฐ๋ฅํ๋ค.
๋ณ์์ ๋ฉ์๋๋ฅผ ํ๋์ ์ถ์ํ๋ ํด๋์ค๋ก ๋ฌถ์ด ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ์ง ์๋๋ก ํ๋ค. ์ด๋ค์ ๋ฐ๋ก ๋ถ๋ฆฌํ ์ ์๋ค. ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ๋๋ ๊ฐ์ฒด๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ฅผ ํตํด ์ด์ฉํ๊ณ ๋ฐ์ดํฐ๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง๋ ์ ํ์ ์๋ค.
์บก์ํ๋ ๋ณ์๋ ๋ฉ์๋๋ฅผ ์ ํ์ ์ผ๋ก ๊ณต๊ฐํ๊ฑฐ๋ ์จ๊ธธ ์ ์๋ค๋ ๊ฐ๋
์ด๋ค. ์จ๊ฒจ์ผ ํ๋ ์ ๋ณด๋ private
, ๊ณต๊ฐํ๋ ์ ๋ณด๋ public
์ผ๋ก ๊ด๋ฆฌํ๋ฉฐ ์ธ๋ถ์์๋ public
๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๊ฐ์ฒด๋ค์ ์๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋ฐฉ์์ผ๋ก ํต์ ํ๋ค.
๊ฐ์ฒด ๊ฐ์ ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ๊ฐ์ฒด๋ ๋์ผํ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ง ํ์๊ฐ ์์ผ๋ฉฐ, ์๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ฐ ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ์์น๋ ์ ์ฝ์ด ๋์ง ์๋๋ค.
- ๋ฉ์์ง๋ฅผ ์ ๋ฌํ ๋์ ๊ฐ์ฒด 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๋ฅผ ์ง์ ํ์ง ์์ผ๋ฉด ๊ฐ์ ํจํค์ง ๋ด์ ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ์ ๊ทผ ๊ถํ ์์ฝ์ด
public
: ๋ชจ๋ ํด๋์ค์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ ํด๋์ค์์ ์๋ฏธ
- ํ์ฉ ๋ฐฉ๋ฒ ์์ฝ์ด
final
: ์์ ํด๋์ค๋ฅผ ๊ฐ์ง ์ ์๋ ํด๋์ค์์ ์๋ฏธabstract
: ๊ฐ์ฒด ์์ฑ์ด ๋ถ๊ฐ๋ฅํ ์ถ์ ํด๋์ค๋ฅผ ์๋ฏธ
- ๊ฐ์ฒด๊ฐ ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ํ ๋นํ๋ ๊ณผ์ ์์ ์์ฝ์ด
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) ๋ผ๊ณ ํ๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฉค๋ฒ ๋ณ์๋ค์ private์ผ๋ก ์ ์ธํ๊ณ public ๋ฉ์๋๋ฅผ ํตํด ์ ๊ทผํ๋๋ก ํด๋์ค๋ฅผ ๊ตฌ์ฑํ๋ค. ์ด๋ฅผ ํตํด ์ ๋ณด ์๋์ ๊ฐ๋ ์ ๊ตฌํํ๋ค.
- Getter : private ๋ฉค๋ฒ ๋ณ์์ ์ ์ฅ๋ ๊ฐ์ ๋ฐํ
- Setter : private ๋ฉค๋ฒ ๋ณ์์ ๊ฐ์ ์ ์ฅ