์์
์์ - ์์
package extends1.ex1;
public class ElectricCar {
public void move() {
System.out.println("์ฐจ๋ฅผ ์ด๋ํฉ๋๋ค.");
}
public void charge() {
System.out.println("์ถฉ์ ํฉ๋๋ค.");
}
}
package extends1.ex1;
public class GasCar {
public void move() {
System.out.println("์ฐจ๋ฅผ ์ด๋ํฉ๋๋ค.");
}
public void fillUp() {
System.out.println("๊ธฐ๋ฆ์ ์ฃผ์ ํฉ๋๋ค.");
}
}
package extends1.ex1;
public class CarMain {
public static void main(String[] args) {
ElectricCar electricCar = new ElectricCar();
electricCar.move();
electricCar.charge();
GasCar gasCar = new GasCar();
gasCar.move();
gasCar.fillUp();
}
}
์ ๊ธฐ์ฐจ๋ ๊ฐ์๋ฆฐ์ฐจ๋ ์ฃผ์ ํ๋ ๋ฐฉ์์ด ๋ค๋ฅธ ๊ฒ์ด์ง ์ด๋ํ๋ ๊ฒ์ ๋๊ฐ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ์์ ๊ด๊ณ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ด๋ค.
์์ ๊ด๊ณ
์์์ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํต์ฌ ์์ ์ค ํ๋์ด๋ค.
๊ธฐ์กด ํด๋์ค์ ํ๋์ ๋ฉ์๋๋ฅผ ์๋ก์ด ํด๋์ค์์ ์ฌ์ฌ์ฉํ๊ฒ ํด ์ค๋ค.
์ด๋ฆ ๊ทธ๋๋ก ๊ธฐ์กด ํด๋์ค์ ์์ฑ๊ณผ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ด๋ค. ์์์ ์ฌ์ฉํ๋ ค๋ฉด extends ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ทธ๋ฆฌ๊ณ extends ๋์์ ํ๋๋ง ์ ํํ ์ ์๋ค.
์ฉ์ด ์ ๋ฆฌ
- ๋ถ๋ชจ ํด๋์ค (์ํผ ํด๋์ค) : ์์์ ํตํด ์์ ์ ํ๋์ ๋ฉ์๋๋ฅผ ๋ค๋ฅธ ํด๋์ค์ ์ ๊ณตํ๋ ํด๋์ค์ด๋ค.
- ์์ ํด๋์ค (์๋ธ ํด๋์ค) : ๋ถ๋ชจ ํด๋์ค๋ก๋ถํฐ ํ๋์ ๋ฉ์๋๋ฅผ ์์๋ฐ๋ ํด๋์ค์ด๋ค.
๊ธฐ์กด ์ฝ๋๋ฅผ ์ ์งํ๊ธฐ ์ํด ex2 ํจํค์ง๋ฅผ ์๋ก ๋ง๋ ๋ค.
package extends1.ex2;
public class Car {
public void move() {
System.out.println("์ฐจ๋ฅผ ์ด๋ํฉ๋๋ค.");
}
}
package extends1.ex2;
public class ElectricCar extends Car{
public void charge() {
System.out.println("์ถฉ์ ํฉ๋๋ค.");
}
}
package extends1.ex2;
public class GasCar extends Car{
public void fillUp() {
System.out.println("๊ธฐ๋ฆ์ ์ฃผ์ ํฉ๋๋ค.");
}
}
package extends1.ex2;
public class CarMain {
public static void main(String[] args) {
ElectricCar electricCar = new ElectricCar();
electricCar.move();
electricCar.charge();
GasCar gasCar = new GasCar();
gasCar.move();
gasCar.fillUp();
}
}
์ฐธ๊ณ ๋ก ๋น์ฐํ ์ด์ผ๊ธฐ์ง๋ง ์์์ ๋ถ๋ชจ์ ๊ธฐ๋ฅ์ ์์์ด ๋ฌผ๋ ค๋ฐ๋ ๊ฒ์ด๋ค. ๋ฐ๋ผ์ ์์์ด ๋ถ๋ชจ์ ๊ธฐ๋ฅ์ ๋ฌผ๋ ค๋ฐ์์ ์ฌ์ฉํ ์ ์๋ค.
๋ฐ๋๋ก ๋ถ๋ชจ ํด๋์ค๋ ์์ ํด๋์ค์ ์ ๊ทผํ ์ ์๋ค. ์์ ํด๋์ค๋ ๋ถ๋ชจ ํด๋์ค์ ๊ธฐ๋ฅ์ ๋ฌผ๋ ค๋ฐ๊ธฐ ๋๋ฌธ์ ์ ๊ทผํ ์ ์์ง๋ง, ๊ทธ ๋ฐ๋๋ ์๋๋ค.
๋จ์ผ ์์
์ฐธ๊ณ ๋ก ์๋ฐ๋ ๋ค์ค ์์์ ์ง์ํ์ง ์๋๋ค. ๊ทธ๋์ extends ๋์์ ํ๋๋ง ์ ํํ ์ ์๋ค. ๋ถ๋ชจ๋ฅผ ํ๋๋ง ์ ํํ ์ ์๋ค๋ ๋ป์ด๋ค.
๋ฌผ๋ก ๋ถ๋ชจ๊ฐ ๋ ๋ค๋ฅธ ๋ถ๋ชจ๋ฅผ ํ๋ ๊ฐ์ง๋ ๊ฒ์ ๊ด์ฐฎ๋ค.
๋ค์ค ์์์ ์ฌ์ฉํ๋ฉด ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ๋งค์ฐ ๋ณต์กํด์ง ์ ์๋ค. ์ด๋ฐ ๋ฌธ์ ์ ๋๋ฌธ์ Java๋ ํด๋์ค์ ๋ค์ค ์์์ ํ์ฉํ์ง ์๋๋ค.
์์๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
์ด ๋ถ๋ถ์ ์ ๋๋ก ์ดํดํ๋ ๊ฒ์ด ์์ผ๋ก ์ ๋ง ์ค์ํ๋ค!
ElectricCar electricCar = new ElectricCar();
new ElectricCar( )๋ฅผ ํธ์ถํ๋ฉด ElectricCar ๋ฟ๋ง ์๋๋ผ ์์ ๊ด๊ณ์ ์๋ Car๊น์ง ํจ๊ป ํฌํจํด์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ค.
์ฐธ์กฐ๊ฐ์ x001๋ก ํ๋์ด์ง๋ง ์ค์ ๋ก ๊ทธ ์์์๋ Car, ElectircCar๋ผ๋ ๋ ๊ฐ์ง ํด๋์ค ์ ๋ณด๊ฐ ๊ณต์กดํ๋ ๊ฒ์ด๋ค.
์์์ด๋ผ๊ณ ํด์ ๋จ์ํ๊ฒ ๋ถ๋ชจ์ ํ๋์ ๋ฉ์๋๋ง ๋ฌผ๋ ค๋ฐ๋ ๊ฒ ์๋๋ค. ์์ ๊ด๊ณ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ชจ ํด๋์ค๋ ํจ๊ป ํฌํจํด์ ์์ฑ๋๋ค.
์ธ๋ถ์์ ๋ณผ ๋๋ ํ๋์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๊ฒ ๊ฐ์ง๋ง ๋ด๋ถ์์๋ ๋ถ๋ชจ์ ์์์ด ๋ชจ๋ ์์ฑ๋๊ณ ๊ณต๊ฐ๋ ๊ตฌ๋ถ๋๋ค.
electricCar.charge( ) ํธ์ถ
electricCar.charge( )๋ฅผ ํธ์ถํ๋ฉด ์ฐธ์กฐ๊ฐ์ ํ์ธํด์ x001.charge( )๋ฅผ ํธ์ถํ๋ค. ๋ฐ๋ผ์ x001์ ์ฐพ์์ charge( )๋ฅผ ํธ์ถํ๋ฉด ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์์ ๊ด๊ณ์ ๊ฒฝ์ฐ์๋ ๋ด๋ถ์ ๋ถ๋ชจ์ ์์์ด ๋ชจ๋ ์กด์ฌํ๋ค. ์ด๋ ๋ถ๋ชจ์ธ Car๋ฅผ ํตํด์ charge( )๋ฅผ ์ฐพ์์ง ์๋๋ฉด ElectricCar๋ฅผ ํตํด์ charge( )๋ฅผ ์ฐพ์์ง ์ ํํด์ผ ํ๋ค.
์ด๋๋ ํธ์ถํ๋ ๋ณ์์ ํ์
(ํด๋์ค)์ ๊ธฐ์ค์ผ๋ก ์ ํํ๋ค. electricCar ๋ณ์์ ํ์
์ด ElectricCar์ด๋ฏ๋ก ์ธ์คํด์ค ๋ด๋ถ์ ๊ฐ์ ํ์
์ธ ElectricCar๋ฅผ ํตํด์ charge( )๋ฅผ ํธ์ถํ๋ค.
electricCar.move( ) ํธ์ถ
electricCar.move( )๋ฅผ ํธ์ถํ๋ฉด ๋จผ์ x001 ์ฐธ์กฐ๋ก ์ด๋ํ๋ค. ๋ด๋ถ์๋ Car, ElectricCar ๋ ๊ฐ์ง ํ์
์ด ์๋ค. ์ด๋ ํธ์ถํ๋ ๋ณ์์ธ electricCar์ ํ์
์ด ElectricCar์ด๋ฏ๋ก ์ด ํ์
์ ์ ํํ๋ค.
๊ทธ๋ฐ๋ฐ ElectricCar์๋ move( ) ๋ฉ์๋๊ฐ ์๋ค. ์์ ๊ด๊ณ์์๋ ์์ ํ์
์ ํด๋น ๊ธฐ๋ฅ์ด ์์ผ๋ฉด ๋ถ๋ชจ ํ์
์ผ๋ก ์ฌ๋ผ๊ฐ์ ์ฐพ๋๋ค. ์ด ๊ฒฝ์ฐ ElectricCar์ ๋ถ๋ชจ๋ Car๋ก ์ฌ๋ผ๊ฐ์ move( )๋ฅผ ์ฐพ๋๋ค. ๋ถ๋ชจ์ธ Car์ move( )๊ฐ ์์ผ๋ฏ๋ก ๋ถ๋ชจ์ ์๋ move( ) ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
๋ง์ฝ ๋ถ๋ชจ์์๋ ํด๋น ๊ธฐ๋ฅ์ ์ฐพ์ง ๋ชปํ๋ฉด ๋ ์์ ๋ถ๋ชจ์์ ํ์ํ ๊ธฐ๋ฅ์ ์ฐพ์๋ณธ๋ค. ๋ถ๋ชจ์ ๋ถ๋ชจ๋ก ๊ณ์ ์ฌ๋ผ๊ฐ๋ฉด์ ํ๋๋ ๋ฉ์๋๋ฅผ ์ฐพ๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ๊ณ์ ์ฐพ์๋ ์์ผ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์ง๊ธ๊น์ง ์ค๋ช ํ ์์๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ ๋ฐ๋์ ์ดํดํด์ผ ํ๋ค!
- ์์ ๊ด๊ณ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ฉด, ๊ทธ ๋ด๋ถ์๋ ๋ถ๋ชจ์ ์์์ด ๋ชจ๋ ์์ฑ๋๋ค.
- ์์ ๊ด๊ณ์ ๊ฐ์ฒด๋ฅผ ํธ์ถํ ๋, ๋์ ํ์ ์ ์ ํด์ผ ํ๋ค. ์ด๋ ํธ์ถ์์ ํ์ ์ ํตํด ๋์ ํ์ ์ ์ฐพ๋๋ค.
- ํ์ฌ ํ์ ์์ ๊ธฐ๋ฅ์ ์ฐจ์ง ๋ชปํ๋ฉด ์์ ๋ถ๋ชจ ํ์ ์ผ๋ก ๊ธฐ๋ฅ์ ์ฐพ์์ ์คํํ๋ค. ๊ธฐ๋ฅ์ ์ฐพ์ง ๋ชปํ๋ฉด ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
์์๊ณผ ๊ธฐ๋ฅ ์ถ๊ฐ
๊ธฐ์กด ์ฝ๋๋ฅผ ์ ์งํ๊ธฐ ์ํด ex3 ํจํค์ง๋ฅผ ์๋ก ์์ฑํ๋ค.
package extends1.ex3;
public class Car {
public void move() {
System.out.println("์ฐจ๋ฅผ ์ด๋ํฉ๋๋ค.");
}
// ์ถ๊ฐ
public void openDoor() {
System.out.println("๋ฌธ์ ์ฝ๋๋ค.");
}
}
package extends1.ex3;
public class ElectricCar extends Car {
public void charge() {
System.out.println("์ถฉ์ ํฉ๋๋ค.");
}
}
package extends1.ex3;
public class GasCar extends Car {
public void fillUp() {
System.out.println("๊ธฐ๋ฆ์ ์ฃผ์ ํฉ๋๋ค.");
}
}
package extends1.ex3;
public class HydrogenCar extends Car{
public void fillHydrogen() {
System.out.println("์์๋ฅผ ์ถฉ์ ํฉ๋๋ค.");
}
}
package extends1.ex3;
public class CarMain {
public static void main(String[] args) {
ElectricCar electricCar = new ElectricCar();
electricCar.move();
electricCar.charge();
electricCar.openDoor();
GasCar gasCar = new GasCar();
gasCar.move();
gasCar.fillUp();
gasCar.openDoor();
HydrogenCar hydrogenCar = new HydrogenCar();
hydrogenCar.move();
hydrogenCar.fillHydrogen();
hydrogenCar.openDoor();
}
}
์์ ๊ด๊ณ ๋๋ถ์ ์ค๋ณต์ ์ค์ด๋ค๊ณ , ์๋ก์ด ์์์ฐจ๋ฅผ ํธ๋ฆฌํ๊ฒ ํ์ฅ(extend)ํ ๊ฒ์ ์ ์ ์๋ค.
์์๊ณผ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ
๋ถ๋ชจ ํ์
์ ๊ธฐ๋ฅ์ ์์์์๋ ๋ค๋ฅด๊ฒ ์ฌ์ ์ ํ๊ณ ์ถ์ ์ ์๋ค.
์ด๋ ๊ฒ ๋ถ๋ชจ์๊ฒ์ ์์๋ฐ์ ๊ธฐ๋ฅ์ ์์์ด ์ฌ์ ์ ํ๋ ๊ฒ์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ(Overriding)์ด๋ผ๊ณ ํ๋ค.
@Overriding
package extends1.overriding;
public class ElectricCar extends Car {
@Override
public void move() {
System.out.println("์ ๊ธฐ์ฐจ๋ฅผ ๋น ๋ฅด๊ฒ ์ด๋ํฉ๋๋ค.");
}
public void charge() {
System.out.println("์ถฉ์ ํฉ๋๋ค.");
}
}
@์ด ๋ถ์ ๋ถ๋ถ์ ์ ๋
ธํ
์ด์
์ด๋ผ๊ณ ํ๋ค. ์ ๋
ธํ
์ด์
์ ์ฃผ์๊ณผ ๋น์ทํ๋ฐ, ํ๋ก๊ทธ๋จ์ด ์ฝ์ ์ ์๋ ํน๋ณํ ์ฃผ์์ด๋ผ ์๊ฐํ๋ฉด ๋๋ค.
์ด ์ ๋
ธํ
์ด์
์ ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ํ๋ ๊ฒ์์ ๋ํ๋ธ๋ค.
์ด๋ฆ ๊ทธ๋๋ก ์ค๋ฒ๋ผ์ด๋ฉํ ๋ฉ์๋ ์์ ์ด ์ ๋
ธํ
์ด์
์ ๋ถ์ฌ์ผ ํ๋ค.
์ปดํ์ผ๋ฌ๋ ์ด ์ ๋
ธํ
์ด์
์ ๋ณด๊ณ ๋ฉ์๋๊ฐ ์ ํํ ์ค๋ฒ๋ผ์ด๋ ๋์๋์ง ํ์ธํ๋ค. ์ค๋ฒ๋ผ์ด๋ฉ ์กฐ๊ฑด์ ๋ง์กฑ์ํค์ง ์์ผ๋ฉด ์ปดํ์ผ ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค. ๋ฐ๋ผ์ ์ค์๋ก ์ค๋ฒ๋ผ์ด๋ฉ์ ๋ชปํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐฉ์งํด ์ค๋ค. ์๋ฅผ ๋ค์ด์ ์ด ๊ฒฝ์ฐ์ ๋ง์ฝ ๋ถ๋ชจ์ move( ) ๋ฉ์๋๊ฐ ์๋ค๋ฉด ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ฐ์ํ๋ค.
์ฐธ๊ณ ๋ก ์ด ๊ธฐ๋ฅ์ ํ์๋ ์๋์ง๋ง ์ฝ๋์ ๋ช
ํ์ฑ์ ์ํด ๋ถ์ฌ์ฃผ๋ ๊ฒ์ด ์ข๋ค.
์ค๋ฒ๋ก๋ฉ(Overloading)๊ณผ ์ค๋ฒ๋ผ์ด๋ฉ(Overriding)
- ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ : ๋ฉ์๋ ์ด๋ฆ์ด ๊ฐ๊ณ ํ๋ผ๋ฏธํฐ๊ฐ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ์ํ๋ ๊ฒ์ ๋ฉ์๋ ์ค๋ฒ๋ก๋ฉ(Overloading)์ด๋ผ ํ๋ค.
์ค๋ฒ๋ก๋ฉ์ ๋ฒ์ญํ๋ฉด ๊ณผ์ ์ธ๋ฐ, ๊ณผํ๊ฒ ๋ฌผ๊ฑด์ ๋ด์๋ค๋ ๋ป์ด๋ค.
๋ฐ๋ผ์ ๊ฐ์ ์ด๋ฆ์ ๋ฉ์๋๋ฅผ ์ฌ๋ฌ๊ฐ ์ ์ํ๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค. - ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ : ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ์ ํ์ ํด๋์ค์์ ์์ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค. ๋ฐ๋ผ์ ์์ ๊ด๊ณ์์ ์ฌ์ฉํ๋ค. ๋ถ๋ชจ์ ๊ธฐ๋ฅ์ ์์์ด ๋ค์ ์ ์ํ๋ ๊ฒ์ด๋ค.
์ค๋ฒ๋ผ์ด๋ฉ์ ๋จ์ํ ํด์ํ๋ฉด ๋ฌด์ธ๊ฐ๋ฅผ ๋์ด์ ํ๋ ๊ฒ์ ๋งํ๋ค. ์์์ ์๋ก์ด ๊ธฐ๋ฅ์ด ๋ถ๋ชจ์ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋์ด ํ์ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์๋ก์ด ๊ธฐ๋ฅ์ผ๋ก ๋ฎ์ด๋ฒ๋ฆฐ๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค.
์ค๋ฒ๋ผ์ด๋ฉ์ ์ฐ๋ฆฌ๋ง๋ก ๋ฒ์ญํ๋ฉด ๋ฌด์ธ๊ฐ๋ฅผ ๋ค์ ์ ์ํ๋ค๊ณ ํด์ ์ฌ์ ์๋ผ๊ณ ํ๋ค. ์์ ๊ด๊ณ์์๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋ค์ ์ ์ํ๋ค๊ณ ์ดํดํ๋ฉด ๋๋ค. ์ค๋ฌด์์๋ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ, ๋ฉ์๋ ์ฌ์ ์ ๋ ๋ค ์ฌ์ฉํ๋ค.
๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ์กฐ๊ฑด
- ๋ฉ์๋ ์ด๋ฆ : ๋ฉ์๋ ์ด๋ฆ์ด ๊ฐ์์ผ ํ๋ค.
- ๋ฉ์๋ ๋งค๊ฐ๋ณ์(ํ๋ผ๋ฏธํฐ) : ํ๋ผ๋ฏธํฐ ํ์ , ์์, ๊ฐ์๊ฐ ๊ฐ์์ผ ํ๋ค.
- ๋ฐํ ํ์ : ๋ฐํ ํ์ ์ด ๊ฐ์์ผ ํ๋ค. ๋จ ๋ฐํ ํ์ ์ด ํ์ ํด๋์ค ํ์ ์ผ ์ ์๋ค.
- ์ ๊ทผ ์ ์ด์ : ์ค๋ฒ๋ผ์ด๋ฉ ๋ฉ์๋์ ์ ๊ทผ ์ ์ด์๋ ์์ ํด๋์ค์ ๋ฉ์๋๋ณด๋ค ๋ ์ ํ์ ์ด์ด์๋ ์ ๋๋ค. ์๋ฅผ ๋ค์ด ์์ ํด๋์ค์ ๋ฉ์๋๊ฐ protected๋ก ์ ์ธ๋์ด ์์ผ๋ฉด ํ์ ํด๋์ค์์ ์ด๋ฅผ public ๋๋ protected๋ก ์ค๋ฒ๋ผ์ด๋ํ ์ ์์ง๋ง, private ๋๋ default๋ก ์ค๋ฒ๋ผ์ด๋ ํ ์ ์๋ค.
- ์์ธ : ์ค๋ฒ๋ผ์ด๋ฉ ๋ฉ์๋๋ ์์ ํด๋์ค์ ๋ฉ์๋๋ณด๋ค ๋ ๋ง์ ์ฒดํฌ ์์ธ๋ฅผ throws๋ก ์ ์ธํ ์ ์๋ค. ํ์ง๋ง ๋ ์ ๊ฑฐ๋ ๊ฐ์ ์์ ์์ธ, ๋๋ ํ์ ํ์ ์ ์์ธ๋ ์ ์ธํ ์ ์๋ค.
- static, final, private : ํค์๋๊ฐ ๋ถ์ ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ ์๋ค.
- static์ ํด๋์ค ๋ ๋ฒจ์์ ์๋ํ๋ฏ๋ก ์ธ์คํด์ค ๋ ๋ฒจ์์ ์ฌ์ฉํ๋ ์ค๋ฒ๋ผ์ด๋ฉ์ด ์๋ฏธ๊ฐ ์๋ค. ์ฝ๊ฒ ์ด์ผ๊ธฐํด์ ๊ทธ๋ฅ ํด๋์ค ์ด๋ฆ์ ํตํด ํ์ํ ๊ณณ์ ์ง์ ์ ๊ทผํ๋ฉด ๋๋ค.
- final ๋ฉ์๋๋ ์ฌ์ ์๋ฅผ ๊ธ์งํ๋ค.
- private ๋ฉ์๋๋ ํด๋น ํด๋์ค์์๋ง ์ ๊ทผ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํ์ ํด๋์ค์์ ๋ณด์ด์ง ์๋๋ค. ๋ฐ๋ผ์ ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ ์๋ค.
- ์์ฑ์ ์ค๋ฒ๋ผ์ด๋ฉ : ์์ฑ์๋ ์ค๋ฒ๋ผ์ด๋ฉ ํ ์ ์๋ค.
์์๊ณผ ์ ๊ทผ ์ ์ด
์ ๊ทผ ์ ์ด์๋ฅผ ํํํ๊ธฐ ์ํด UML ํ๊ธฐ๋ฒ์ ์ผ๋ถ ์ฌ์ฉํ๋ค.
- + : public
- # : protected
- ~ : default
- - : private
package extends1.access.parent;
public class Parent {
public int publicValue;
protected int protectedValue;
int defaultValue;
private int privateValue;
public void publicMethod() {
System.out.println("Parent.publicMethod");
}
protected void protectedMethod() {
System.out.println("Parent.protectedMethod");
}
void defaultMethod() {
System.out.println("Parent.defaultMethod");
}
private void privateMethod() {
System.out.println("Parent.privateMethod");
}
public void printParent() {
System.out.println("==Parent ๋ฉ์๋ ์==");
System.out.println("publicValue = " + publicValue);
System.out.println("protectedValue = " + protectedValue);
System.out.println("defaultValue = " + defaultValue);
System.out.println("privateValue = " + privateValue);
// ๋ถ๋ชจ ๋ฉ์๋ ์์์ ๋ชจ๋ ์ ๊ทผ ๊ฐ๋ฅ
defaultMethod();
privateMethod();
}
}
package extends1.access.child;
import extends1.access.parent.Parent;
public class Child extends Parent {
public void call() {
publicValue = 1;
protectedValue = 1; // ์์ ๊ด๊ณ or ๊ฐ์ ํจํค์ง
//defaultValue = 1; // ๋ค๋ฅธ ํจํค์ง ์ ๊ทผ ๋ถ๊ฐ, ์ปดํ์ผ ์ค๋ฅ
//privateValue = 1; // ์ ๊ทผ ๋ถ๊ฐ, ์ปดํ์ผ ์ค๋ฅ
publicMethod();
protectedMethod(); // ์์ ๊ด๊ณ or ๊ฐ์ ํจํค์ง
//defaultMethod(); // ๋ค๋ฅธ ํจํค์ง ์ ๊ทผ ๋ถ๊ฐ, ์ปดํ์ผ ์ค๋ฅ
//privatemethod(); // ์ ๊ทผ ๋ถ๊ฐ, ์ปดํ์ผ ์ค๋ฅ
printParent();
}
}
package extends1.access;
import extends1.access.child.Child;
public class ExtendsAccessMain {
public static void main(String[] args) {
Child child = new Child();
child.call();
}
}
๋์ ํจํค์ง๊ฐ ๋ค๋ฅด๋ค๋ ๋ถ๋ถ์ ์ ์ํด์ผ ํ๋ค.
์์ํด๋์ค์ธ Child์์ ๋ถ๋ชจ ํด๋์ค์ธ Parent์ ์ผ๋ง๋ ์ ๊ทผํ ์ ์๋์ง ํ์ธํ๋ค.
- publicValue = 1 : ๋ถ๋ชจ์ public ํ๋์ ์ ๊ทผํ๋ค. public์ด๋ฏ๋ก ์ ๊ทผํ ์ ์๋ค.
- protectedValue = 1 : ๋ถ๋ชจ์ protected ํ๋์ ์ ๊ทผํ๋ค. ์์๊ณผ ๋ถ๋ชจ๋ ๋ค๋ฅธ ํจํค์ง์ด์ง๋ง, ์์ ๊ด๊ณ์ด๋ฏ๋ก ์ ๊ทผํ ์ ์๋ค.
- defaultValue = 1 : ๋ถ๋ชจ์ default ํ๋์ ์ ๊ทผํ๋ค. ์์๊ณผ ๋ถ๋ชจ๊ฐ ๋ค๋ฅธ ํจํค์ง์ด๋ฏ๋ก ์ ๊ทผํ ์ ์๋ค.
- privateValue = 1 : ๋ถ๋ชจ์ private ํ๋์ ์ ๊ทผํ๋ค. private์ ๋ชจ๋ ์ธ๋ถ ์ ๊ทผ์ ๋ง์ผ๋ฏ๋ก ์์์ด๋ผ๋ ํธ์ถํ ์ ์๋ค.
super - ๋ถ๋ชจ ์ฐธ์กฐ
๋ถ๋ชจ์ ์์์ ํ๋๋ช
์ด ๊ฐ๊ฑฐ๋ ๋ฉ์๋๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ ๋์ด ์์ผ๋ฉด, ์์์์ ๋ถ๋ชจ์ ํ๋๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
์ด๋ super ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ๋ชจ๋ฅผ ์ฐธ์กฐํ ์ ์๋ค. super๋ ์ด๋ฆ ๊ทธ๋๋ก ๋ถ๋ชจ ํด๋์ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋ํ๋ธ๋ค.
super - ์์ฑ์
์์ ๊ด๊ณ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ฉด ๊ฒฐ๊ตญ ๋ฉ๋ชจ๋ฆฌ ๋ด๋ถ์๋ ์์๊ณผ ๋ถ๋ชจ ํด๋์ค๊ฐ ๊ฐ๊ฐ ๋ค ๋ง๋ค์ด์ง๋ค.
๋ฐ๋ผ์ ๊ฐ๊ฐ์ ์์ฑ์๋ ๋ชจ๋ ํธ์ถ๋์ด์ผ ํ๋ค.
์์ ๊ด๊ณ๋ฅผ ์ฌ์ฉํ๋ฉด ์์ ํด๋์ค์ ์์ฑ์์์ ๋ถ๋ชจ ํด๋์ค์ ์์ฑ์๋ฅผ ๋ฐ๋์ ํธ์ถํด์ผ ํ๋ค. (๊ท์น)
์์ ๊ด๊ณ์์ ๋ถ๋ชจ์ ์์ฑ์๋ฅผ ํธ์ถํ ๋๋ super(. . .)๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
- ์์ ๊ด๊ณ์ ์์ฑ์ ํธ์ถ์ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ถ๋ชจ์์ ์์ ์์๋ก ์คํ๋๋ค. ๋ฐ๋ผ์ ๋ถ๋ชจ์ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์ด๊ธฐํํ๊ณ ๊ทธ๋ค์์ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ด๊ธฐํํ๋ค.
- ์์ ๊ด๊ณ์์ ์์ ํด๋์ค์ ์์ฑ์ ์ฒซ ์ค์ ๋ฐ๋์ super(. . .)๋ฅผ ํธ์ถํด์ผ ํ๋ค. ๋จ ๊ธฐ๋ณธ ์์ฑ์(super( ))์ธ ๊ฒฝ์ฐ ์๋ตํ ์ ์๋ค.
์ ๋ฆฌ
ํด๋์ค์ ๋ฉ์๋์ ์ฌ์ฉ๋๋ final
ํด๋์ค์ final
- ์์ ๋!
- final๋ก ์ ์ธ๋ ํด๋์ค๋ ํ์ฅ๋ ์ ์๋ค. ๋ค๋ฅธ ํด๋์ค๊ฐ final๋ก ์ ์ธ๋ ํด๋์ค๋ก ์์๋ฐ์ ์ ์๋ค.
๋ฉ์๋์ final
- ์ค๋ฒ๋ผ์ด๋ฉ ๋!
- final๋ก ์ ์ธ๋ ๋ฉ์๋๋ ์ค๋ฒ๋ผ์ด๋ ๋ ์ ์๋ค. ์์๋ฐ์ ์๋ธ ํด๋์ค์์ ์ด ๋ฉ์๋๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค.
'Today I Learned(TIL) > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ๊ธฐ๋ณธํธ ๊ฐ์_๋คํ์ฑ1 (0) | 2024.12.02 |
---|---|
Java ๊ธฐ๋ณธํธ ๊ฐ์_final (2) | 2024.11.28 |
Java ๊ธฐ๋ณธํธ ๊ฐ์_์ ๊ทผ ์ ์ด์ (1) | 2024.11.28 |
Java ๊ธฐ๋ณธํธ ๊ฐ์_ํจํค์ง (0) | 2024.11.26 |
Java ๊ธฐ๋ณธํธ ๊ฐ์_์์ฑ์ (0) | 2024.11.26 |