[Java] μΆμ ν΄λμ€(abstract class)μ λν΄
by rlaehddnd0422μλ°μμ abstarct μ μ΄μλ 'μΆμμ μΈ'μ΄λΌλ μλ―Έλ‘ μ¬μ©λ©λλ€.
μ μΈλΆλ§ μκ³ κ΅¬νλΆκ° μλ λ©μλλ₯Ό μΆμ λ©μλλΌ νκ³ , νλ μ΄μμ μΆμ λ©μλλ₯Ό ν¬ν¨νκ³ μλ ν΄λμ€λ λ°λμ abstract μ μ΄μλ₯Ό λΆμ¬μΌ νλ©° μ΄λ₯Ό μΆμ ν΄λμ€λΌκ³ λΆλ¦ λλ€.
μΆμ ν΄λμ€λ νλ μ΄μμ μΆμ λ©μλλ₯Ό κ°λλ€κ³ νλλ° κ·Έλ λ€λ©΄ μΆμ ν΄λμ€λ λ°λμ μΆμ λ©μλλ₯Ό κ°μ§λ€κ³ λ³Ό μ μμκΉ?
- νμ κ·Έλ μ§λ μμ΅λλ€.
- μΆμ λ©μλλ₯Ό κ°λ ν΄λμ€λ λ°λμ μΆμ ν΄λμ€λ‘ μ€μ ν΄μΌ νλ κ²μ λ§μ§λ§, λ°λλ‘ μΆμ ν΄λμ€κ° λ°λμ μΆμ λ©μλλ₯Ό κ°μ ΈμΌ νλκ³ λ¬»λλ€λ©΄ κΌ κ·Έλ μ§ μμ΅λλ€.
μΆμν΄λμ€λ₯Ό μ°λ μ΄μ λ?
- μΆμ ν΄λμ€λ₯Ό νλ§λλ‘ μ μνλ©΄ λ―Έμμ± μ€κ³λμ λλ€.
λ―Έμμ±μ΄κΈ° λλ¬Έμ μ€μ§ μμμ ν΅ν΄ νμ ν΄λμ€μμλ§ μμ±λ μ μμ΅λλ€. μΆμ ν΄λμ€ λμ μ μΈν°νμ΄μ€λ₯Ό μΈ μλ μμ§λ§, μΈν°νμ΄μ€μμλ μ μΈλΆλ§ μκΈ° λλ¬Έμ μ΄λ₯Ό ꡬνν νμ ν΄λμ€μμλ 곡ν΅μ μΈ κΈ°λ₯μ΄ μ€λ³΅λλλΌλ λͺ¨λ μ€λ³΅μ μΌλ‘ ꡬνλΆμ μμ±μ ν΄μΌνμ§λ§, μΆμ ν΄λμ€λ₯Ό μ¬μ©νλ©΄ μΆμ ν΄λμ€λ₯Ό μμλ°μ νμ ν΄λμ€λ€μ΄ μΆμ ν΄λμ€μμ μ€κ³λ 곡ν΅μ μΈ κΈ°λ₯λ€μ λν λ©μλλ₯Ό κ΅³μ΄ κ΅¬νν νμκ° μλ€λ μ μμ μ₯μ μ κ°μ΅λλ€.
<μμ½>
1) κ°μ²΄λ€μ νλμ λ©μλμ μ΄λ¦μ μΆμ λ©μλμ ν΅μΌνμ¬ μμ€μ κ°λ μ±μ λμΌ μ μκ³ ,
2) λͺ¨λ κ°μ²΄λ€μ 곡ν΅μ μΈ λ©μλμ, νλλ€μ μΆμ ν΄λμ€λ‘ λ§λ€κ³ μ΄ μΆμ ν΄λμ€λ₯Ό νμ μμλ€μ΄ μμλ°μ νμν νλμ λ©μλλ₯Ό κ·Έλλ‘ μμνκ³ μΆμ ν΄λμ€λ μμμμ μ¬μ μνλ λ°©μμ ν΅ν΄ κ°λ°μ ν¨μ¨μ±μ μ¦λμν¬ μ μμ΅λλ€.
μ€λͺ νκ³ λ³΄λ λ§μ΄ μ΄ν΄νκΈ° μ‘°κΈ μ΄λ €μ΄λ° μ½λλ‘ μ΄ν΄ν΄λ΄ μλ€.
abstract class Animal {
abstract void bark();
public void sleep() {
System.out.println("Sleeping...zZZ");
}
}
bark()μ sleep() λ©μλλ₯Ό κ°λ λ―Έμμ± μ€κ³λμΈ μΆμ ν΄λμ€ Animalμ΄ μμ΅λλ€.
μ¬κΈ°μ bark()λ νμ ν΄λμ€μμ ꡬνν΄μΌ νλ μΆμ λ©μλμ΄κ³ , sleep()μ νμ ν΄λμ€λ€μ΄ 곡ν΅μ μΌλ‘ λμΌνκ² λμνλ λ©μλμ λλ€.
public class Dog extends Animal{
private String species;
public Dog(String species) {
this.species = species;
}
@Override
void bark() {
System.out.println("This puppy barks like " + this.species);
}
}
barkλ μ€λ²λΌμ΄λ©νμ¬ κ΅¬ννμκ³ , μΆμ ν΄λμ€μμ 미리 ꡬνν΄λ μΌλ° λ©μλ sleep()μ κ·Έλλ‘ μ¬μ©ν λλΆμ sleepμ λν μ€λ²λΌμ΄λ© λ° κ΅¬νμ λ³λλ‘ νμ§ μμλ λκ² λμμ΅λλ€.
public class AnimalTest {
public static void main(String[] args) {
Dog dog1 = new Dog("ν¬λ©λΌλμ");
dog1.bark();
dog1.sleep();
}
}
λ¬Όλ‘ νμ ν΄λμ€μμ μΆμ ν΄λμ€μ μΌλ° λ©μλλ₯Ό κ·Έλλ‘ μ¬μ©νμ§ μκ³ μΌλ° λ©μλ λν μ€λ²λΌμ΄λ© νμ¬ μ¬μ©ν μ μμ΅λλ€.
abstract class Animal {
abstract void bark();
public void sleep() {
System.out.println("Sleeping...zZZ");
}
}
public class Cat extends Animal {
private String type;
public Cat(String type) {
this.type = type;
}
@Override
void bark() {
System.out.println("This Cat howl like " + this.type);
}
@Override
public void sleep() {
System.out.println("Meow...zZ");
}
}
Cat ν΄λμ€μμλ μΆμ ν΄λμ€μ μΌλ° λ©μλλ₯Ό μ€λ²λΌμ΄λ©νμ¬ κ΅¬ννμμ΅λλ€.
public class AnimalTest {
public static void main(String[] args) {
Cat cat1 = new Cat("λμΉν¨");
cat1.bark();
cat1.sleep();
}
}
Cat ν΄λμ€μ μΈμ€ν΄μ€μ sleep() λ©μλκ° μ€νλ μΆλ ₯ κ²°κ³Όλ₯Ό 보면 Animalμ ꡬνλ sleep()μ μ€ννμ§ μκ³ , νμ ν΄λμ€ Catμ μ€λ²λΌμ΄λ©νμ¬ κ΅¬νν sleep()μ μ€νν κ²μ νμΈν μ μμ΅λλ€.
μ΄λ κ² κ³΅ν΅κΈ°λ₯μ λν΄ μ€λ²λΌμ΄λ©νμ¬ κ΅¬ννλ κ²μ λ§κ³ μΆλ€λ©΄ μΆμ ν΄λμ€μμ μΌλ° λ©μλμ final ν€μλλ₯Ό λΆμ΄λ©΄ λ©λλ€.
μΈν°νμ΄μ€μ μΆμ ν΄λμ€λ μ΄λ»κ² λ€λ₯ΌκΉ?
μΈν°νμ΄μ€λ μΌμ’ μ μΆμ ν΄λμ€λΌκ³ λ³Ό μ μλλ°, λ€λ₯Έ μ μ΄ μλ€λ©΄ μΈν°νμ΄μ€λ λ λμ μΆμν μ λλ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ λ©€λ² λ³μλ ꡬνλΆκ° μλ μΌλ° λ©μλλ₯Ό ꡬμ±μμΌλ‘ κ°μ§ μ μμ΅λλ€. λ€λ§ ν΄λμ€ λ 벨μμ μ¬μ©ν static finalμ κ°μ§ μ μλ€ ^^
public interface Car {
public static final int wheel = 4;
final String MADE_IN_COUNTRY = "KOREA"; // public & staticμ΄ μλ΅λ¨
static String color = "BLACK"; // public & finalμ΄ μλ΅λ¨
}
λ°λ©΄μ μΆμ ν΄λμ€λ μΌλ° λ©μλ λΏλ§ μλλΌ λ©€λ² λ³μλ κ°μ§ μ μμ΅λλ€.
abstract class Animal {
int wakeUpHour = 9;
public abstract void bark();
public void sleep() {
System.out.println("Sleeping...zZZ");
}
public void wakeUp() {
System.out.println("Wake Up at" + wakeUpHour);
}
}
μΆμ ν΄λμ€λ μΈμ€ν΄μ€ μμ±μ΄ κ°λ₯ν κΉ?
- μ΅λͺ μ΄λ ν΄λμ€λ‘ μμ±μ κ°λ₯νμ§λ§, μΆμ ν΄λμ€μ μλμ λͺ©μ μ μκ³ λλ©΄ μΆμ ν΄λμ€λ₯Ό μΈμ€ν΄μ€λ‘ μμ±ν΄μ μ¬μ©ν μ΄μ κ° μ ν μμμ μ μ μμ΅λλ€.
public class AnimalTest {
public static void main(String[] args) {
// μ΅λͺ
μ΄λ ν΄λμ€λ‘ μμ±μ κ°λ₯νλ€λ§, λ§λ€μ΄ μ¬μ©ν μ΄μ κ° μ ν μλ€.
Animal animal = new Animal() {
@Override
public void bark() {
System.out.println("BARKS!");
}
};
animal.bark();
}
}
μΆμ λ©μλ μ κ·Ό μ μ΄μ μ€μ μ μ£Όμν μ
- abstarct λ©μλλ staticκ³Ό ν¨κ» μ¬μ©ν μ μμ΅λλ€.
- abstract μ μ΄μλ μ μΈλΆλ§ μλ λ©μλλ‘ νμ ν΄λμ€μμ ꡬννμ¬ μ¬μ©νλ λ©μλμ΄κ³
- static μ μ΄μλ₯Ό κ°μ§λ λ©μλλ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ λ μ¬μ©ν μ μμ΄μΌ νλ―λ‘ abstarctμ staticμ 곡쑴ν μ μμ΅λλ€.
- abstarct λ©μλλ privateκ³Ό ν¨κ» μ¬μ©ν μ μμ΅λλ€.
- abstract μ μ΄μλ μ μΈλΆλ§ μλ λ©μλλ‘ νμ ν΄λμ€μμ ꡬννμ¬ μ¬μ©νλ λ©μλ
- μ΄ λ private μ κ·Όμ μ΄μ κΉμ§ ν¨κ» μ€μ ν΄λ²λ¦¬λ©΄ νμ ν΄λμ€μμ μ κ·Όν μ μκΈ° λλ¬Έμ abstarctμ privateμ 곡쑴ν μ μμ΅λλ€.
- abstarct λ©μλλ finalκ³Ό ν¨κ» μ¬μ©ν μ μμ΅λλ€.
- abstract μ μ΄μλ μ μΈλΆλ§ μλ λ©μλλ‘ νμ ν΄λμ€μμ ꡬννμ¬ μ¬μ©νλ λ©μλμΈλ°,
- μ΄ λ finalλ‘ μ€λ²λΌμ΄λ©μ λ§μλ²λ¦¬λ©΄ νμ ν΄λμ€μμ μ€λ²λΌμ΄λ©μ΄ λΆκ°λ₯νλ―λ‘ abstractμ finalμ 곡쑴ν μ μμ΅λλ€.
μΆμ ν΄λμ€ μ κ·Ό μ μ΄μ μ€μ μ μ£Όμν μ
- μΆμ ν΄λμ€μλ final ν€μλλ₯Ό λΆμΌ μ μμ΅λλ€.
- final ν€μλκ° ν΄λμ€μ λΆκ² λλ©΄ ν΄λμ€λ₯Ό μμμ λͺ»νλλ‘ λ§μλ²λ¦¬λλ°, abstract ν΄λμ€λ λ€λ₯Έ ν΄λμ€κ° μμν΄μ μ€λ²λΌμ΄λ©ν΄μΌ μ¬μ©ν μ μμΌλ―λ‘ abstarctμ final ν€μλλ 곡쑴ν μ μμ΅λλ€. ( λ©μλμμλ λ§μ°¬κ°μ§ )
<μ°Έκ³ μλ£>
'π Backend > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μμ(Inheritance)μ λν΄ (1) | 2023.09.27 |
---|---|
[Java] String Constant poolκ³Ό Heap μμμ λν΄ (0) | 2023.09.26 |
[Java] μ κ·Ό μ μ΄μ(public, protected, default, private)μ λν΄ (0) | 2023.09.25 |
[Java] thisμ this()μ λν΄ (0) | 2023.09.25 |
[Java] static variable, static methodμ λν΄ (0) | 2023.09.22 |
λΈλ‘κ·Έμ μ 보
Study Repository
rlaehddnd0422