-
Notifications
You must be signed in to change notification settings - Fork 1
Day 14(21.09.23)
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์์ ์์์ด๋ ๊ฐ๋
์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉค๋ฒ(field, method)๋ฅผ ์์ ํด๋์ค์๊ฒ ๋ฌผ๋ ค์ฃผ๋ ๊ฒ์ ๋ปํ๋ค.
์ข ๋ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์๊ธฐํ๋ฉด, ์๋์ฐจ ์์ฅ์๋ ํฌ๋, ํ๋ผ๋ฆฌ, ๋ฒค์ธ ๋ฑ ๋ค์ํ ๋ฉ์ด์ปค๊ฐ ์๊ณ ๋ฉ์ด์ปค์ ๋ฐ๋ผ ์ฑ๋ฅ๊ณผ ์ธํ์ ์ฒ์ฐจ๋ง๋ณ์ด๋ค. ํ์ง๋ง, ๊ฒฐ๊ตญ ์๋์ฐจ๋ผ๋ ํฐ ์งํฉ์ ์์๋์ด ์์ผ๋ฉฐ, ์๋์ฐจ๋ผ๋ ํฐ ๊ฐ๋
์ด ๊ฐ์ง๋ ๊ณตํต์ ์ธ ์์ฑ์ ๋ชจ๋ ์๋์ฐจ ๋ฉ์ด์ปค๊ฐ ๊ณตํต์ ์ผ๋ก ๊ฐ์ง๊ณ ์๋ค. ์ฌ๊ธฐ์ ์๋์ฐจ๋ผ๋ ๋์ฑ ํฌ๊ด์ ์ธ ๊ฐ๋
์ ๋ถ๋ชจ ํด๋์ค, ๊ทธ๋ฆฌ๊ณ ๊ฐ ์๋์ฐจ ๋ฉ์ด์ปค๋ฅผ ์์ ํด๋์ค๋ผ๊ณ ์๊ฐํ๋ฉด ์ข๋ค. ์ด๋ฌํ ์์์ ์ ๊ฐ๋ฐ๋ ํด๋์ค๋ฅผ ์ฌ์ฌ์ฉํ์ฌ ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋๋ ๊ฒ์ด๋ฏ๋ก ์ฝ๋์ ์ค๋ณต์ ์ค์ฌ์ฃผ๊ณ , ๋์ฑ ํจ์จ์ ์ธ ๊ฐ๋ฐ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
ํ์ง๋ง ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์์ ์์์ ํ์ค๊ณผ๋ ๋ฌ๋ฆฌ ์์ ํด๋์ค๊ฐ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ ํํ ์ ์๋ค. ์๋ฐ์์๋ ์ด๋ด ๋ extends๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํ๋ค. ์๋ฅผ ๋ค์ด, Porsche์ ๊ฒฝ์ฐ ์๋์ฐจ ๋ฉ์ด์ปค๋ก ์ ๋ช ํ์ง๋ง ํ๋ ํฑํฌ์ ๊ฐ์ ๊ฒ๋ค๋ ๋ง๋ค์๋ ๋ธ๋๋์ด๋ค. ํ์ง๋ง ์๋์ฐจ๋ฅผ ๋ง๋ค๊ณ ์ถ๋ค ํ ๋๋ ์๋์ฐจ ๊ณต์ฅ์ ์ธ์ฐ๋ ๊ฒ์ฒ๋ผ, ์ด ๊ฒฝ์ฐ์ Tank ํด๋์ค๊ฐ ์๋ Car ํด๋์ค๋ฅผ ์์ํ๋ ๊ฒ์ด๋ค.
class Porsche extends Car {
//Field
//Constructor
//Method
}์ ์์์ฒ๋ผ Porche๋ extends ํค์๋๋ฅผ ์ฌ์ฉํด Car ํด๋์ค๋ฅผ ์์ํ๊ฒ ๋ค๊ณ ์ ์ธํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง, ํ๋์ ์๋์ฐจ ๊ณต์ฅ์์ ํฑํฌ๋ ๋นํ๊ธฐ๋ฅผ ๋ฝ์๋ผ ์๋ ์๋ฏ์ด(์ค์ ๋ก๋ ๊ฐ๋ฅํ ์๋ ์๋ค๊ณ ์ณ๋) ์๋ฐ ์์๋ ๋ค์ค ์์์ ํ์ฉํ์ง ์๊ณ ์๋ค. ์ฆ, extends ํค์๋๋ฅผ ์ฌ์ฉํด์ Car ํด๋์ค๋ฅผ ์์ํ๊ฒ ๋ค๊ณ ์ ์ธํ๋ฐ๋ฉด Tank, Airplane๊ณผ ๊ฐ์ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ค๋ณต์ผ๋ก ๊ฐ์ง ์ ์๋ค. ์๋๋ ํด๋์ค ์์์ ์์์ด๋ค.
//Porche.java
public class Porsche {
public static void main(String[] args) {
Vehicle normalCar = new Vehicle();
SportsCar carrera = new SportsCar();
normalCar.maxSpeed = 120;
normalCar.name = "Just car";
normalCar.info();
carrera.maxSpeed = 300;
carrera.name = "Carrera";
carrera.cost = 12000;
carrera.info();
}
}//Vehicle.java
public class Vehicle {
int maxSpeed;
String name;
public void info() {
System.out.println("์ด๋ฆ: " + name);
System.out.println("์ต๋ ์๋: " + maxSpeed);
}
}//SportsCar.java
public class SportsCar extends Vehicle{
int cost;
}Result
์ด๋ฆ : Just car
์ต๋ ์๋ : 120
์ด๋ฆ : Carrera
์ต๋ ์๋ : 300
์ ์์์์ ํ์ธํ ์ ์๋ฏ์ด SportsCar ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ธ Vehicle์ ๋ชจ๋ ํ๋์ ์์ฑ์๋ฅผ ์ด์ด๋ฐ์๊ธฐ ๋๋ฌธ์ Porsche ํด๋์ค์์ name๊ณผ maxSpeed์ ํ๋๊ฐ์ ์ค์ ํ ์ ์๊ณ , info() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๊ธฐ๊น์ง ํ ์ ์๋ค๋ ๊ฒ์ ํ์ธํ๋ค. ํ์ง๋ง ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ์๋ค. ๋ถ๋ช SportsCar ํด๋์ค์์๋ cost๋ผ๋ ํ๋๊ฐ์ ํ๋ ์ถ๊ฐํ๋๋ฐ info() ๋ฉ์๋์ ํด๋น ๋ด์ฉ์ด ๋ฐ์๋์ง ์์๋ค. ์ด ๋ถ๋ถ์ ๋ฉ์๋ ์ฌ์ ์(Method Override)๋ฅผ ํตํด์ ํด๊ฒฐํ ์ ์๋ค.
๋ฉ์๋ ์ฌ์ ์๋ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๊ฐ ์์ ํด๋์ค์ ๋ง๊ฒ ์ค๊ณ๋์ด ์์ง ์์ ์์ ํด๋์ค์์ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ ๊ฒฝ์ฐ, ๋ฌธ์ ๊ทธ๋๋ก ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ '์ฌ์ ์(override)'ํจ์ผ๋ก์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์ ์ํฉ์ ๋ง๊ฒ ์ฌ์ฉํ ์ ์๊ฒ๋๋ค. ์ฌ๊ธฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ๊ธฐ ์ํด์ '@Override'๋ผ๋ ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด์ผํ๋๋ฐ, ์์๋ ์๋์ ๊ฐ๋ค.
//SportsCar.java
public class SportsCar extends Vehicle{
int cost;
@Override //Vehicle ํด๋์ค๋ฅผ ์์๋ฐ์ SportsCar์์ ๋ถ๋ชจ ํด๋์ค์ info() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ์ ์ธ
public void info() {
System.out.println("๊ฐ๊ฒฉ: " + cost);
}
}Result
์ด๋ฆ: Just car
์ต๋ ์๋: 120
๊ฐ๊ฒฉ: 12000
SportsCar ํด๋์ค์์ ์ฌ์ ์(์ค๋ฒ๋ผ์ด๋ฉ)ํ info() ๋ฉ์๋๊ฐ ์ ๋๋ก ์ ์ฉ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค. ํ์ง๋ง ๋ ๋ค์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. SportsCar์ ํ๋๊ฐ์ธ ์ด๋ฆ๊ณผ ์ต๋ ์๋๊ฐ ๋ณด์ด์ง ์๊ฒ ๋๋ค. ์ฌ๊ธฐ์ ๋ฉ์๋ ์ฌ์ ์์ ํน์ง์ ํ์ธํ ์ ์๋๋ฐ, ์์ ํด๋์ค์์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ๊ณ , ์์ ๊ฐ์ฒด(์ฌ๊ธฐ์ SportsCar)์์ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋ถ๋ชจ ๋ฉ์๋(์ฌ๊ธฐ์ Vehicle)๊ฐ ํธ์ถ๋์ง ์๊ณ ์์ ํด๋์ค์ info() ๋ฉ์๋๋ง ํธ์ถ๋๋ ๊ฒ์ ์ ์ ์๋ค. ์ด๋ ๊ฒ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ผํ๋ ์ํฉ์ด ๋ฐ์ํ ๊ฒฝ์ฐ์, ํ๋ํ๋ ์ถ๋ ฅ ์ฝ๋๋ฅผ ์๋ก ์์ฑํ ์๋ ์๊ฒ ์ง๋ง ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ์ฌ์ฉํ๋ค๋ฉด ํจ์ฌ ํจ์จ์ ์ผ๋ก ์์ ์ ์งํํ ์ ์๊ฒ๋๋ค.
์ ํญ๋ชฉ์์ ์ค๋ช ํ๋ฏ, ์์ ํด๋์ค์์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ๊ณ , ์์ ๊ฐ์ฒด์์ ์ฌ์ ์ํ ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ์ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ ํธ์ถ์ด ๋์ง ์๋๋ค. ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๊ฐ ํ์๊ฐ ์์๋ ๋ฌธ์ ๊ฐ ๋์ง ์์ง๋ง, ์ ์์์ ๊ฐ์ด ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๊ฐ ์ฃผ๋ ์ ๋ณด(์ด๋ฆ๊ณผ ์ต๋์๋)๊ฐ ํ์ํ ๊ฒฝ์ฐ์๋ ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋๋ฅผ ํธ์ถํด์ผ ํ๋๋ฐ, ์ด๋ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด super ํค์๋์ด๋ค. super๋ฅผ ๋ช ์์ ์ผ๋ก ์ฌ์ฉํด ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์์ ๋ฉ์๋ ๋ฑ์ ํธ์ถํ ์ ์๋ค.(์ด ํ์ด์ง์์๋ ๋ฉ์๋๋ง ํธ์ถํ๋ค.) ์ฌ์ฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
//SportsCar.java
public class SportsCar extends Vehicle{
int cost;
@Override //Vehicle ํด๋์ค๋ฅผ ์์๋ฐ์ SportsCar์์ ๋ถ๋ชจ ํด๋์ค์ info() ๋ฉ์๋๋ฅผ ์ฌ์ ์ํด์ ์ฌ์ฉํ๊ฒ ๋ค๊ณ ์ ์ธ
public void info() {
super.info(); //superํค์๋๋ก ๋ถ๋ชจ ํด๋์ค๋ฅผ ํธ์ถํ ๋ค์์ ๋ท ์ฐ์ฐ์(.)๋ก info๋ฉ์๋๋ฅผ ํธ์ถ
System.out.println("๊ฐ๊ฒฉ: " + cost);
}
}Result
์ด๋ฆ: ๊ทธ๋ฅ ์ฐจ
์ต๋ ์๋: 120
์ด๋ฆ: Carrera
์ต๋ ์๋: 300
๊ฐ๊ฒฉ: 12000
super ํค์๋๋ฅผ ์ฌ์ฉํ ๋ค์์ ๋ถ๋ชจ ํด๋์ค์ info ๋ฉ์๋๋ฅผ ํธ์ถํ ๊ฒฐ๊ณผ ์๋ํ๋ ๋๋ก ์ด๋ฆ๊ณผ ์ต๋ ์๋, ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฒฉ์ด ์ถ๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.