
์์
- ๊ธฐ์กด(์์) ํด๋์ค์ ์์ฐ(๋ฉค๋ฒ)์ ์์(ํ์) ํด๋์ค์์ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด ์ ์ํ๋ ๊ฒ์ด๋ค.
- extends ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ํ๊ธฐํ๋ค.
- ๋ชจ๋ ํด๋์ค์ ์กฐ์ ํด๋์ค๋ Object์ด๋ค.


ํด๋น ๊ทธ๋ฆผ์ ๋ณด๋ฉด SpiderMan์ด๋ผ๋ ํด๋์ค์ extends๋ฅผ ์ถ๊ฐํด Person์ ์์ ํด๋์ค๋ก ์ ์ํ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด SpiderMan๋ Person์ ๋ณ์์ ๋ฉ์๋์ธ name, jump(), eat()๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
์์์ ์ ์์
- ์๋ฐ์์๋ ์์ ํด๋์ค๋ฅผ ์ ์ธํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ฒ ๋๋ฉด ์์๋ถํฐ ์์ ๋ชจ๋ ๋ถ๋ชจ ํด๋์ค๋ค์ด ๊ฐ์ด ์ฌ๋ผ๊ฐ๋ค.
- ์๋ฐ๊ฐ ๋ฌด๊ฒ๋ค๋ ๋ง์ด ๋์ค๊ฒ ๋ ์ค์ ํฌ์ธํธ์ธ ๊ฒ ๊ฐ๋ค.
- ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ ์ธ ํ, ์์ ํด๋์ค๋ฅผ ๋ฃ์ผ๋ฉด ์์์ ๋ถ๋ชจ ํด๋์ค๋ฅผ ์ฐธ์กฐํ๋ค.
- ์ฌ๊ธฐ์ ๋ณ์๋ฅผ ์ ์ธํ๊ฒ ๋๋ฉด ๋ถ๋ชจ์ ๋ฉค๋ฒ ๋ณ์๊ฐ ๋์ค์ง๋ง, ๋ฉ์๋๋ ์์์ ์ค๋ฒ๋ผ์ด๋ฉ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฆ
- ์์์ด ๋ฉ์๋๋ฅผ ์ฌ์ ์ ํ๋ค๋ฉด ์์์ ๋ฉ์๋๊ฐ ์ถ๋ ฅ๋๋ค.
- ์์์๋ง ์๋ ๋ฉ์๋๋ ์คํํ์ง ๋ชปํ๋ค.
public class ParentTest {
public static void main(String[] args) {
Parent p = new Child();
Child c = (Child)p; //๊ฐ๋ฅ
System.out.println(p.n);
p.pr(); // Child์ pr์ ์คํํจ
p.aa(); // ์๋ฌ๊ฐ ๋ฐ์ํจ
}
}
class Parent{
int n = 10;
void pr() {
System.out.println("pr" + n);
}
}
class Child extends Parent{
int n = 20;
void pr() {
//super.pr(); //์ด๊ฒ ์์ผ๋ฉด ๋ถ๋ชจ์ pr์ ์คํ
System.out.println("ch" + n);
}
void aa() {
System.out.println("๋ผ์ผ์์์
");
}
}
ํฌํจ ๊ด๊ณ(has a)
- ์๋ฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋จ์ผ ์์๋ง ์ง์ํ๊ธฐ์ ํ ํด๋์ค๋ฅผ ์์๋ฐ์ผ๋ฉด ๋ค๋ฅธ ํด๋์ค๋ ์์๋ฐ์ ์ ์๋ค.
- ํ์ง๋ง ์ฌ๋ฌ ๊ฐ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์์์ ๋ฐ๊ณ ์ถ์ผ๋ฉด ํฌํจ ๊ด๊ณ๋ฅผ ์ ์ํ๋ฉด ๋๋ค.
- ๋งด๋ฒ ๋ณ์์ ์์๋ฐ๊ธธ ์ํ๋ ํด๋์ค๋ฅผ ์ ์ธํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํจ
- ํ๋ก์ ํธ์ ํฌ์ปค์ค์ ๋ง์ถฐ์ ์ ๋์ ์ผ๋ก ์์๊ณผ ํฌํจ์ ์ค์ ํ๋ฉด ๋๋ค.
* ex) is a ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค๋ฉด ์์, has a ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค๋ฉด ํฌํจ ๊ด๊ณ๋ก ์ ์
์ค๋ฒ๋ผ์ด๋ฉ(Overriding)
- ๋ถ๋ชจ ํด๋์ค์ ์ ์๋ ๋ฉ์๋๋ฅผ ์์ ํด๋์ค์์ ์ ํฉํ๊ฒ ์์ ํ๋ ๊ฒ์ด๋ค.
- ์์ ํด๋์ค์์ ์ด๋ฆ์ด ๊ฐ์ ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ์ฌ ์์ ํด๋์ค๋ง์ ๋ฉ์๋๋ก ๋ง๋ค ์ ์๋ค.
- ๋งค๊ฐ๋ณ์๊ฐ ๊ฐ์๋ ๋๋ค๋ ์ ์์ ์ค๋ฒ๋ก๋ฉ๊ณผ์ ์ฐจ์ด์ ์ ๊ฐ์ง๊ณ ์๋ค.
์ค๋ฒ๋ผ์ด๋ฉ์ ์กฐ๊ฑด
1. ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋์ ์ด๋ฆ์ด ๊ฐ์์ผ ํจ
2. ๋งค๊ฐ ๋ณ์์ ๊ฐ์, ํ์ , ์์๊ฐ ๋์ผํด์ผ ํจ
3. ๋ฆฌํด ํ์๋ ๊ฐ์์ผ ํจ
4. ์ ๊ทผ ์ ํ์๋ ๋ถ๋ชจ๋ณด๋ค ๋ฒ์๊ฐ ๋๊ฑฐ๋ ๊ฐ์์ผ ํจ
5. ์กฐ์๋ณด๋ค ๋ ํฐ ์์ธ๋ฅผ ๋์ง ์ ์์
Super
- super. ํค์๋๋ฅผ ์ด์ฉํด ๋ถ๋ชจ ํด๋์ค์ ๋ฉ์๋ ํธ์ถ๋ก ๋ถ๋ชจ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค.
- ๋ณ์์ ๊ธฐ๋ณธ์ ์ธ ์กฐํ ์์๋ ๋งค์จ๋ ๋ด -> ์์ ๋งด๋ฒ -> ๋ถ๋ชจ ๋งด๋ฒ -> ๋ถ๋ชจ์ ๋ถ๋ชจ ->...
- super(): ๋ถ๋ชจ์ ๊ธฐ๋ณธ ์์ฑ์
- super()๋ ์์ ํด๋์ค ์์ฑ์์ ๋งจ ์ฒซ ์ค์์๋ง ํธ์ถ ๊ฐ๋ฅ

์ ํ์
- ํด๋์ค, ๋ณ์, ๋ฉ์๋ ์ ์ธ๋ถ์ ๋ถ๊ฐ์ ์ธ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๋ค.
- ์ ๊ทผ ์ ํ์: ๋ณ์ ๋๋ ๋ฉ์๋ ์ ๊ทผ์ ์ ํ์ ๋๋ค.
* public, protected(๋ค๋ฅธ pkg์ฌ๋ ์์๊ด๊ณ๋ฉด ์ ๊ทผ ๊ฐ๋ฅ), (default=package), private
- static: ๋ฉ๋ชจ๋ฆฌ์ ๋ฏธ๋ฆฌ ์ฌ๋ ค ๊ณต์ ํ์ฌ ์ฌ์ฉํ๋๋ก ํด์ค๋ค.
- final: ํด๋น ๋ณ์๋ฅผ ๋ ์ด์ ๋ณ๊ฒฝํ์ง ๋ชปํ๋๋ก ๋ง๋ ๋ค.(const๋ก ๋ง๋ค์ด์ค๋ค.)
- abstract: ์ถ์์ ์ ์ํ ๋ ์ฌ์ฉ
- synchronized: ๋ฉํฐ ์ค๋ ๋ ๋๊ธฐํ์ ์ฌ์ฉ๋๋ ์ ํ์
- ์ฌ๋ฌ ๋์์ ์ฌ์ฉ ๊ฐ๋ฅ(static final num;) ๋จ, ์ ๊ทผ ์ ํ์๋ ํ๋๋ง ์ฌ์ฉ ๊ฐ๋ฅ ํ๋ค.
- ํ์ฉ๋: private ์์ฑ์๋ฅผ ์ด์ฉํด ์์ฑ์ ์ ํ ๊ฑธ๊ณ โฆstatic์ฒ๋ฆฌํ๋ฉด ์ฑ๊ธํค ๋์์ธ ํจํด์ผ๋ก ์ฌ์ฉ
=> getInstance๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด๋ฅผ ํธ์ถ -> public์ ์ฑ๊ธํค ํจํด์ ๊ท์น์ด๋ค.

Sealed Class
- ํน์ ํด๋์ค์๊ฒ๋ง ์์์ด ๋๊ฒ๋ ๋ง๋ค์ด์ฃผ๋ ํค์๋๋ค.
- sealed: ๋ด์ธ๋ ํด๋์ค๋ก permits (ํ์ ํด๋์ค 1), (ํ์ ํด๋์ค 2),... ๋ฅผ ์ ๋ ฅํด์ค์ผ ํ๋ค.
- final: ๋ ์ด์ ์์์ ํ ์ ์๋๋ก ๋ง๋ ํด๋์ค๋ค.
- non-sealed: ๋ด์ธ์ด ํด์ ๋ ํด๋์ค๋ก ์์ ๋ก์ด ์์์ด ๊ฐ๋ฅํ๋ค.
// Animal.java
public sealed class Animal permits Cat, Dog {}
...
// Cat.java
// permits ๋ก ์ ์ธ๋ class ๋ค (Scottishfold , Ragdoll) ๋ง์ด Cat class ๋ฅผ ์์ํ ์ ์๋ค.
public sealed class Cat extends Animal permits Scottishfold, Ragdoll {}
...
// Dog.java
// non-sealed ๋ก ์ ์ธ๋ Dog ๋ ์ด๋ค class ๋ ์ง ์์ ํ ์ ์๋ค.
public non-sealed class Dog extends Animal {}
// Cat ๋ฅผ ์์ ๋ฐ์ ์ ์๋ ํด๋์ค๋ Scottishfold , Ragdoll ๋ฟ์ด๋ค.
public final class Scottishfold extends Cat {}
public final class Ragdoll extends Cat {}
// Scottishfold์ Ragdoll ๋ final ๋ก ์ ์ธ๋ class ๋ค์ด๊ธฐ ๋๋ฌธ์,
// ์ด๋ ํ class ๋ ์ด ๋์ ์์ ํ ์ ์๋ค.
public class Bug extends Animal {} // ์์ ๋ถ๊ฐ๋ฅ, ์๋ฌ
public class Bug extends Ragdoll {} // ์์ ๋ถ๊ฐ๋ฅ, ์๋ฌ
//
public class poodle extends Dog {} // ์์ ๊ฐ๋ฅ
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JAVA] ๋คํ์ฑ (2) | 2024.07.18 |
---|---|
[JAVA] ์ฝ๋ ์ธ ์์ฑํ ๊ฒ๋ค (0) | 2024.07.17 |
[JAVA] ๊ฐ์ฒด (0) | 2024.07.16 |
[JAVA] ์๋ฃ๊ตฌ์กฐ (0) | 2024.07.15 |
[JAVA] ๋ณ์ (0) | 2024.07.15 |