๊ฐ์ฒด์งํฅ์ธ์ด(Object-Oriented Programming = OOP)
- ์ปดํจํฐํ๋ก๊ทธ๋จ์ ๋ช ๋ น์ด์ ๋ชฉ๋ก์ผ๋ก ๋ณด๋ ์๊ฐ์์ ๋ฒ์ด๋ ์ฌ๋ฌ ๊ฐ์ ๋ ๋ฆฝ๋ ๋จ์, ์ฆ "๊ฐ์ฒด"๋ค์ ๋ชจ์์ผ๋ก ํ์ ํ๊ณ ์ ํ๋ ๊ฒ.
- ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ message passing์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค
ํด๋์ค์ ๊ฐ์ฒด
ํด๋์ค
- ๊ฐ์ฒด์ ์ค๊ณ๋ ํน์ ํ
- ๊ฐ์ฒด๋ค์ ์ค์ํ ์์ฑ์ ๊ณต์ ํ๋ ๊ฐ์ฒด๋ค์ ๋ชจ์
- ๊ฐ๋ ์
๊ฐ์ฒด(Object)
- ํด๋์ค์ ํ๋ก ์ฐ์ด๋ธ ์ค์ฒด → ํ๋ก๊ทธ๋จ ์คํ ์ค์ ์์ฑ๋๋ ์ค์ฒด, ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ๋ ๊ตฌ์ฒด์ ์ค์ฒด
- = instance (์ธ์คํด์ค)
- ์ฃผ๋ณ์ ๋ณด์ด๋ ์ฌ๋ฌผ, ์๋ช
- ๊ตฌ์ฒด์
โถ class๋ ์ค๊ณ๋, instance๋ ์ค์ ๋ก ๋ด๊ฐ ์ฐ๋ ๊ฒ
โถ ๊ฐ์ฒด(์น์์, ์ ฐํผ๋, ์ง๋) → ์์ฑ(๋ฉ๋ฉ, ๊ผฌ๋ฆฌ๋ฅผ ํ๋ฆ) → ํด๋์ค(๊ฐ)
โถ ๊ฐ์ฒด๋ค์ ํด๋์ค์ ์ ์ธ๋ ๋์ผํ ์์ฑ์ ๊ฐ์ง์ง๋ง ์์ฑ ๊ฐ์ ์๋ก ๋ค๋ฅด๋ค !
๊ฐ์ฒด ์งํฅ ํน์ฑ
1) ์บก์ํ
- ์ธ๋ถ์ ์ ๊ทผ์ผ๋ก๋ถํฐ ๊ฐ์ฒด ๋ณดํธ → ์บก์ํ ํตํด ์ ๋ณด ์๋ ๊ฐ๋ฅ
- ํด๋์ค(class): ๊ฐ์ฒด ๋ชจ์์ ์ ์ธํ ํ (์บก์ํ ํ๋ ํ)
- ๊ฐ์ฒด: ์์ฑ๋ ์ค์ฒด(instance), ํด๋์ค ๋ด์ ๋ฉ์๋์ ํ๋ ๊ตฌํ
2) ์์
- ์์ ๊ฐ์ฒด์ ์์ฑ์ด ํ์ ๊ฐ์ฒด์ ๋ฌผ๋ ค์ง = ์์ ํด๋์ค์ ๋ฉค๋ฒ๋ฅผ ํ์ ํด๋์ค๊ฐ ๋ฌผ๋ ค๋ฐ์
- ์์ํด๋์ค: ์ํผ ํด๋์ค
- ํ์ํด๋์ค: ์๋ธ ํด๋์ค, ์ํผ ํด๋์ค ์ฝ๋์ ์ฌ์ฌ์ฉ, ์๋ก์ด ํน์ฑ ์ถ๊ฐ ๊ฐ๋ฅ
- ํ๋ก๊ทธ๋จ์ ์ฝ๊ฒ ํ์ฅํ ์ ์๋๋ก ๋์์ฃผ๋ ์๋จ
3) ๋คํ์ฑ
- ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๊ฐ ํด๋์ค ํน์ ๊ฐ์ฒด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๊ตฌํ๋๋ ๊ฒ = ์ฌ๋ฌ ํด๋์ค์ ๊ฐ์ ์ด๋ฆ์ ํจ์๊ฐ ์กด์ฌํ์ง๋ง ๋์์ ๋ค๋ฅด๊ฒ ์ํ
- ์ฌ๋ก
- ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ: ํ ํด๋์ค ๋ด์์ ๊ฐ์ ์ด๋ฆ์ด์ง๋ง ๋ค๋ฅด๊ฒ ์๋ํ๋ ์ฌ๋ฌ ๋ฉ์๋
- ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ: ์ํผ ํด๋์ค์ ๋ฉ์๋๋ฅผ ๋์ผํ ์ด๋ฆ์ผ๋ก ์๋ธ ํด๋์ค๋ง๋ค ๋ค๋ฅด๊ฒ ๊ตฌํ
์ ์ฐจ์งํฅ vs ๊ฐ์ฒด์งํฅ
์ ์ฐจ์งํฅ
- ์์ ์์๋ฅผ ํํํ๋ ์ปดํจํฐ ๋ช ๋ น ์งํฉ
- ํจ์๋ค์ ์งํฉ์ผ๋ก ํ๋ก๊ทธ๋จ ์์ฑ
๊ฐ์ฒด์งํฅ
- ์ปดํจํฐ๊ฐ ์ํํ๋ ์์ ์ ๊ฐ์ฒด๋ค๊ฐ์ ์ํธ์์ฉ์ผ๋ก ํํ
- ํด๋์ค or ๊ฐ์ฒด๋ค์ ์งํฉ์ผ๋ก ํ๋ก๊ทธ๋จ ์์ฑ
์๋ฐ ํด๋์ค์ ๊ตฌ์ฑ
ํด๋์ค
- class ํค์๋๋ก ์ ์ธ
- ๋ฉค๋ฒ: ํด๋์ค ๊ตฌ์ฑ ์์
- ํ๋ (๋ฉค๋ฒ ๋ณ์) & ๋ฉ์๋ (๋ฉค๋ฒ ํจ์)
ํด๋์ค์ ๊ฐ์ฒด ์์ฑ ๋ฐ ํ์ฉ ์์
public class Circle {
int radius; // ์์ ๋ฐ์ง๋ฆ ํ๋
String name; // ์์ ์ด๋ฆ ํ๋
public double getArea() {
// ๋ฉค๋ฒ ๋ฉ์๋
// ์์์ ๋ฆฌํดํ๊ธฐ ๋๋ฌธ์ double๋ก ์ ์ธ
return 3.14 * radius * radius;
}
public static void main(String[] args) {
Circle pizza; // ๋ ํผ๋ฐ์ค ๋ณ์ ์ ์ธ
pizza = new Circle(); // circle ๊ฐ์ฒด ์ ์ธ
// ๊ฐ์ฒด ๋ฉค๋ฒ ์ ๊ทผ์ .์ผ๋ก!
pizza.radius = 10;
pizza.name = "์๋ฐํผ์";
double area = pizza.getArea();
System.out.println(pizza.name + "์ ๋ฉด์ ์ " + area);
Circle donut = new Circle(); // ๋ ํผ๋ฐ์ค ๋ณ์ ์ ์ธ & circle ๊ฐ์ฒด ์ ์ธ
donut.radius = 2;
donut.name = "์๋ฐ๋๋";
area = donut.getArea();
System.out.println(donut.name + "์ ๋ฉด์ ์ " + area);
}
}
๋๋น(width)์ ๋์ด(height) ํ๋, ๊ทธ๋ฆฌ๊ณ ๋ฉด์ ๊ฐ์ ์ ๊ณตํ๋ getArea() ๋ฉ์๋๋ฅผ ๊ฐ์ง Rectangle ํด๋์ค ์์ฑ ์์
import java.util.Scanner;
class Rectangle{
int width;
int height;
public int getArea(){
return width * height;
}
}
public class RectApp {
public static void main(String[] args) {
Rectangle rect = new Rectangle();
Scanner scanner = new Scanner(System.in);
System.out.print(">> ");
rect.width = scanner.nextInt();
rect.height = scanner.nextInt();
System.out.println("์ฌ๊ฐํ์ ๋ฉด์ ์ " + rect.getArea());
scanner.close();
}
}
728x90