์๋
! ์ค๋ ์ฐ๋ฆฌ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ(OOP)์ ํ ๊ฐ์ง ์์น์ธ ์์์ ๋ํด ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๋ํ ํด๋์ค ๊ฐ์ ๋ค๋ฅธ ์ ํ์ ๊ด๊ณ์ธ ๊ตฌ์ฑ๊ณผ ์ง๊ณ์ ๋ํด์๋ ์์๋ด
๋๋ค. ์ด ์ฃผ์ ๋ ์ด๋ ต์ง ์์ ๊ฒ์
๋๋ค. ์ด์ ์์
์์ ์ด๋ฏธ ์์๊ณผ ์์์ ์๋ฅผ ์ฌ๋ฌ ๋ฒ ์ ํ์ต๋๋ค. ์ค๋์ ์ฃผ์ ๋ด์ฉ์ ์ง์์ ๊ฐํํ๊ณ ์์ ๋ฉ์ปค๋์ฆ์ ์์ธํ ์ดํด๋ณด๊ณ ๋ค์ ํ ๋ฒ ๋ช ๊ฐ์ง ์๋ฅผ ์ดํด๋ณด๋ ๊ฒ์
๋๋ค. :) ๊ธ์, ๊ฐ์!
Java์ ์์๊ณผ ์ฅ์
ํ์คํ ๊ธฐ์ตํ๊ณ ์๋ฏ์ด ์์์ ๊ธฐ์กด ํด๋์ค(๋ถ๋ชจ ํด๋์ค)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ ํด๋์ค๋ฅผ ์ค๋ช ํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ ์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ์ฐจ์ฉํฉ๋๋ค. ์ด์ ์์ ์์ ์ฃผ์ด์ง ์์์ ์๋ฅผ ์๊ฐํด ๋ด ์๋ค.
public class Car {
private String model;
private int maxSpeed;
private int yearOfManufacture;
public Car(String model, int maxSpeed, int yearOfManufacture) {
this.model = model;
this.maxSpeed = maxSpeed;
this.yearOfManufacture = yearOfManufacture;
}
public void gas() {
// Gas
}
public void brake() {
// Brake
}
}
public class Truck extends Car {
public Truck(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
public class Sedan extends Car {
public Sedan(String model, int maxSpeed, int yearOfManufacture) {
super(model, maxSpeed, yearOfManufacture);
}
}
๋ค์ํ ์ ํ์ ์๋์ฐจ ์์
๊ณผ ๊ด๋ จ๋ ํน์ ํ๋ก๊ทธ๋จ์ด ์์ต๋๋ค. ์๋์ฐจ ์ ํธ๊ฐ๊ฐ ์๋๋๋ผ๋ ์ธ์์๋ ์๋ง์ ์ข
๋ฅ์ ์๋์ฐจ๊ฐ ์๋ค๋ ๊ฒ์ ์๊ณ ๊ณ์ค ๊ฒ์
๋๋ค. :) ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์๋์ฐจ์ ๊ณตํต ์์ฑ์ ๋ผ๋ ๊ณตํต ๋ถ๋ชจ ํด๋์ค๋ก ๋ถ๋ฆฌํ ๊ฒ์
๋๋ค Car
. ๊ทธ๋ ๋ค๋ฉด ์ ํ์ ๊ด๊ณ์์ด ๋ชจ๋ ์๋์ฐจ์ ๊ณตํต๋๋ ์ฌํญ์ ๋ฌด์์
๋๊น? ๋ชจ๋ ์๋์ฐจ์๋ ์ ์กฐ ์ฐ๋, ๋ชจ๋ธ๋ช
๋ฐ ์ต๊ณ ์๋๊ฐ ์์ต๋๋ค. model
์ด๋ฌํ ์์ฑ์ , maxSpeed
๋ฐ ํ๋ ์ ์
๋ ฅํฉ๋๋ค yearOfManufacture
. ํ๋์ ๊ดํด์๋ ๋ชจ๋ ์๋์ฐจ๊ฐ ๊ฐ์ ๋ฐ ๊ฐ์ํ ์ ์์ต๋๋ค. :) ์ฐ๋ฆฌ๋ ์ด ๋์์ ๋ฐ์์ ์ ์ํฉ๋๋ค gas()
.brake()
ํ๋ ์์. ์ด๊ฒ์ ์ฐ๋ฆฌ์๊ฒ ์ด๋ค ์ด์ ์ ์ ๊ณตํฉ๋๊น? ์ฐ์ ์ฝ๋์ ์์ด ์ค์ด๋ญ๋๋ค. ๋ฌผ๋ก ๋ถ๋ชจ ํด๋์ค ์์ด๋ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ ์๋์ฐจ๋ ๊ฐ์ ๋ฐ ๊ฐ์ํ ์ ์์ด์ผ ํ๋ฏ๋ก , , ๋ฐ ํด๋์ค์ ๋ค๋ฅธ ๋ชจ๋ ์๋์ฐจ ํด๋์ค ์์ gas()
๋ฐ brake()
๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ผ ํฉ๋๋ค . ์ผ๋ง๋ ๋ง์ ์ถ๊ฐ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋์ง ์์ํด ๋ณด์ญ์์ค. ๊ทธ๋ฆฌ๊ณ , ๋ฐ ํ๋ ๋ฅผ ์์ง ๋ง์ญ์์ค . ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ ๊ฑฐํ๋ฉด ๊ฐ ์๋์ฐจ ํด๋์ค์์ ๋ง๋ค์ด์ผ ํฉ๋๋ค! Truck
Sedan
F1Car
SportsCar
model
maxSpeed
yearOfManufacture
์์ญ ๊ฐ์ ์๋์ฐจ ํด๋์ค๊ฐ ์์ผ๋ฉด ์ค๋ณต ์ฝ๋์ ์์ด ์ ๋ง ์ฌ๊ฐํด์ง๋๋ค. ๊ณตํต ํ๋ ๋ฐ ๋ฉ์๋("์ํ" ๋ฐ "๋์"์ด๋ผ๊ณ ๋ ํจ)๋ฅผ ์์ ํด๋์ค๋ก ์ด๋ํ๋ฉด ๋ง์ ์๊ฐ๊ณผ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค. ์ผ๋ถ ์ ํ์ ๋ค๋ฅธ ์๋์ฐจ ์ ํ์๋ ์๋ ๊ณ ์ ํ ์์ฑ์ด๋ ๋ฉ์๋๊ฐ ์๋ ๊ฒฝ์ฐ ๋ณ๊ฑฐ ์๋๋๋ค. ๋ค๋ฅธ ์ฌ๋๊ณผ๋ ๋ณ๋๋ก ์์ ํด๋์ค์์ ํญ์ ์์ฑํ ์ ์์ต๋๋ค.
public class F1Car extends Car {
public void pitStop() {
// Only race cars make pit stops
}
public static void main(String[] args) {
F1Car formula1Car = new F1Car();
formula1Car.gas();
formula1Car.pitStop();
formula1Car.brake();
}
}
Formula One ๊ฒฝ์ฃผ์ฉ ์๋์ฐจ๋ฅผ ์๋ก ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ค์ "์น์ฒ"๊ณผ๋ ๋ฌ๋ฆฌ, ๊ทธ๋ค์ ๋
ํนํ ํ๋์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ค์ ๋๋๋ก ํผํธ ์คํ์ ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๋ฅผ ๊ดด๋กญํ์ง ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ ์์ ํด๋์ค์ ์ผ๋ฐ์ ์ธ ๋์์ ์ค๋ช
ํ์ผ๋ฉฐ Car
ํ์ ํด๋์ค์ ํน์ ๋์์ ํด๋น ํด๋์ค์ ์ถ๊ฐํ ์ ์์ต๋๋ค. ํ๋๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ์์ ํด๋์ค์ ๊ณ ์ ํ ์์ฑ์ด ์๋ ๊ฒฝ์ฐ ์์ ํด๋์ค ๋ด์์ ์ด๋ฌํ ํ๋๋ฅผ ์นจ์ฐฉํ๊ฒ ์ ์ธํ๊ณ ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค. :) ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ ๋ฅ๋ ฅ์ ์์์ ์ฃผ์ ์ด์ ์
๋๋ค. ํ๋ก๊ทธ๋๋จธ์๊ฒ๋ ์ถ๊ฐ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๋ ๊ฒ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋น์ ์ ๋น์ ์ ์ผ์์ ์ด๊ฒ์ ๋ฐ๋ณต์ ์ผ๋ก ๋ณด๊ฒ ๋ ๊ฒ์
๋๋ค. ๋ค๋ฅธ ์ค์ํ ์ฌํญ์ ๊ธฐ์ตํ์ญ์์ค. Java์๋ ๋ค์ค ์์์ด ์์ต๋๋ค.. ๊ฐ ํด๋์ค๋ ํ๋์ ํด๋์ค๋ง ์์ํฉ๋๋ค. ์ด์ ๋ํ ์ด์ ์ ๋ํด์๋ ๋ค์ ๊ฐ์์์ ๋ ์์ธํ ์ด์ผ๊ธฐํ๊ฒ ์ต๋๋ค. ์ง๊ธ์ ๊ทธ๋ฅ ๊ธฐ์ตํ์ธ์. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์ด๊ฒ์ Java๋ฅผ ๋ค๋ฅธ OOP ์ธ์ด์ ๋ค๋ฅด๊ฒ ๋ง๋ญ๋๋ค. ์๋ฅผ ๋ค์ด C++๋ ๋ค์ค ์์์ ์ง์ํฉ๋๋ค. ์์์ผ๋ก ๋ชจ๋ ๊ฒ์ด ๋ค์ ๋ช
ํํฉ๋๋ค. ๊ณ์ํฉ์๋ค.
๊ตฌ์ฑ ๋ฐ ์ง๊ณ
ํด๋์ค์ ๊ฐ์ฒด๋ ํจ๊ป ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์์์ "is-a" ๊ด๊ณ๋ฅผ ์ค๋ช ํฉ๋๋ค. ์ฌ์๋ ๋๋ฌผ์ ๋๋ค. ์ด๋ฌํ ๊ด๊ณ๋Animal
๋ถ๋ชจ ํด๋์ค์ Lion
์์ ํด๋์ค์ธ ์์์ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ํํ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ๊ด๊ณ๊ฐ ์ด๋ฐ ์์ผ๋ก ์ค๋ช
๋๋ ๊ฒ์ ์๋๋๋ค. ์๋ฅผ ๋ค์ด ํค๋ณด๋๋ ํ์คํ ์ปดํจํฐ์ ๊ด๋ จ์ด ์์ง๋ง ์ปดํจํฐ๊ฐ ์๋๋๋ค . ์์ ์ด๋ป๊ฒ๋ ์ฌ๋๊ณผ ๊ด๋ จ์ด ์์ง๋ง ์ฌ๋์ด ์๋๋๋ค. ์ด ๊ฒฝ์ฐ "is-a"๊ฐ ์๋๋ผ "has-a"๋ผ๋ ๋ ๋ค๋ฅธ ์ ํ์ ๊ด๊ณ๊ฐ ์์ต๋๋ค. ์์ ์ฌ๋์ด ์๋๋ผ ์ฌ๋์ ์ผ๋ถ์
๋๋ค. ํค๋ณด๋๋ ์ปดํจํฐ๊ฐ ์๋๋ผ ์ปดํจํฐ์ ์ผ๋ถ์
๋๋ค. ๊ตฌ์ฑ ๋ฐ ์ง๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋์์ has-a ๊ด๊ณ๋ฅผ ์ค๋ช
ํ ์ ์์ต๋๋ค.. ์ฐจ์ด์ ์ ๊ด๊ณ์ "์๊ฒฉ์ฑ"์ ์์ต๋๋ค. ๊ฐ๋จํ ์๋ฅผ ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ์์
์ด ์์ต๋๋ค Car
. ๋ชจ๋ ์๋์ฐจ์๋ ์์ง์ด ์์ต๋๋ค. ๋ํ ๋ชจ๋ ์ฐจ๋์๋ ์น๊ฐ์ด ์์ต๋๋ค. Engine engine
๋ฐ ํ๋ ์ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ ์ ๋ฌด์์
๋๊น Passenger[] passengers
? ๋์น์๊ฐ ์ฐจ์ ์์ ์๋ค๊ณ ํด์ ๋์น์ ๊ฐ ์ฐจ ์์ ์์ง ์๋ค๋ A
์๋ฏธ๋ ์๋๋๋ค . ์๋์ฐจ๋ ์ฌ๋ฌ ์น๊ฐ์ ํด๋นํ ์ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ๋ชจ๋ ์น๊ฐ์ด ์ฐจ์์ ๋ด๋ฆฌ๋๋ผ๋ ์ฐจ๋ ์ฌ์ ํ ์ํํ๊ฒ ์๋ํ ๊ฒ์
๋๋ค. ํด๋์ค์ ๋ฐฐ์ด ๊ฐ์ ๊ด๊ณ๋ ๋ ์๊ฒฉํฉ๋๋ค. ์ง๊ณ ๋ผ๊ณ ํฉ๋๋ค . ์ง๊ณ์ ๋ ๋ค๋ฅธ ์ข์ ์๋ฅผ ์ ๊ณตํฉ๋๋ค. ํด๋์ค ์B
C
Car
Passenger[] passengers
Student
StudentGroup
์์
. ํ์์ ๋ฌผ๋ฆฌํ ํด๋ฝ, ์คํ์์ฆ ํฌ ํด๋ฝ ๋ฐ/๋๋ ํ์ ์ฝ๋ฏธ๋ ํด๋ฝ๊ณผ ๊ฐ์ ์ฌ๋ฌ ํ์ ์กฐ์ง์ ๊ฐ์
ํ ์ ์์ต๋๋ค. ๊ตฌ์ฑ์ ๋ ์๊ฒฉํ ์ข
๋ฅ์ ๊ด๊ณ์
๋๋ค. ๊ตฌ์ฑ์ ์ฌ์ฉํ ๋ ๊ฐ์ฒด๋ ์ผ๋ถ ๊ฐ์ฒด์ ์ผ๋ถ์ด๋ฉฐ ๋์ผํ ์ ํ์ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ํ ์ ์์ต๋๋ค. ๊ฐ์ฅ ๊ฐ๋จํ ์๋ ์๋์ฐจ ์์ง์
๋๋ค. ์์ง์ ์๋์ฐจ์ ์ผ๋ถ์ด๋ฉฐ ๋ค๋ฅธ ์๋์ฐจ์ ์ผ๋ถ๊ฐ ๋ ์ ์์ต๋๋ค. ๋ณด์๋ค์ํผ ์ด๋ค์ ๊ด๊ณ๋ Car
and ์ฌ์ด์ ๊ด๊ณ๋ณด๋ค ํจ์ฌ ๋ ์๊ฒฉํฉ๋๋ค Passengers
.
๋ ์ฝ์ด๋ณด๊ธฐ: |
---|
GO TO FULL VERSION