1. μ μ π
interface XXX {
}
λ§μ»€ μΈν°νμ΄μ€(Marker Interface)λ μ무 λ©μλλ μ μΈνμ§ μμ μΈν°νμ΄μ€λ€. ν΄λΉ μΈν°νμ΄μ€λ κ°μ²΄μ νμ κ³Ό κ΄λ ¨λ μ 보λ§μ μ κ³΅ν΄ μ£Όλ μν μ νλ€. κ·Έλμ μ»΄νμΌλ¬μ JVMμ λ§μ»€ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ κ°μ²΄μ λν μΆκ°μ μΈ μ 보λ₯Ό μ»μ μ μλ€. μ‘°κΈ λ κ°λ¨νκ² λ§νμλ©΄, λ§μ»€ μΈν°νμ΄μ€λ μμ μ ꡬννλ ν΄λμ€κ° νΉμ μμ±μ κ°μ§λ€λ κ²μ ννν΄ μ£Όλ κ²μ΄λ€.
2. μμλ₯Ό ν΅ν μ΄ν΄ π₯
λ§μ»€ μΈν°νμ΄μ€λ₯Ό ꡬννλ ν΄λμ€κ° νΉμ μμ±μ κ°μ§λ€λ κ²μ νμν΄ μ£Όλ μ΄μ λ 무μμΌκΉ? μλμ λλ¬Ό μμλ₯Ό ν΅ν΄ μμ보μ. κΈ°λ³Έ μ€μ μ μλμ κ°λ€.
- μμν΄λμ€μΈ Animalμ΄λΌλ ν΄λμ€κ° μλ€.
- Dog, Lion, Snake, Fish... λ± μ¬λ¬ κ°μ§ λ€λ₯Έ λλ¬Ό ν΄λμ€λ€μ΄ Animal ν΄λμ€λ₯Ό μμλ°λλ€.
- isMammaliaλΌλ λ©μλλ₯Ό ν΅ν΄ Animal νμ μ 맀κ°λ³μλ₯Ό λ°κ³ ν΄λΉ λ³μκ° ν¬μ λ₯μΈμ§ μλμ§λ₯Ό νμΈνλ€.
class Animal {
public static boolean isMammalia(Animal animal) {
if(animal instanceof Dog) {
return true;
}
else if(animal instanceof Lion) {
return true;
}
else if(animal instanceof Snake) {
return false;
}
else if(animal instanceof Fish) {
return false;
}
// ...
}
}
class Dog extends Animal{}
class Lion extends Animal{}
class Snake extends Animal{}
class Fish extends Animal{}
μΌλ°μ μΌλ‘ μκ°ν΄ λ³Ό μ μλ isMammalia λ©μλλ₯Ό ꡬννλ λ°©λ²μ instanceof μ°μ°μλ₯Ό μ¬μ©νμ¬ μΌμΌμ΄ λΉκ΅νλ κ²μ΄λ€.
νμ§λ§ μμ ν΄λμ€μ κ°μκ° λ§μμ§λ©΄ μ½λκ° κΈΈμ΄μ§κ³ 볡μ‘ν΄μ§λ€. μ΄λ° κ²½μ°μ μλ¬΄λ° λ΄μ©μ΄ μλ λ§μ»€ μΈν°νμ΄μ€λ₯Ό μ μΈνκ³ μμ ν΄λμ€λ€μ΄ ν΄λΉ μΈν°νμ΄μ€λ₯Ό ꡬννλλ‘ νλ€. κ·Έλ¬λ©΄ ν΄λΉ ν΄λμ€λ€μ΄ νΉμ μμ±μ κ°μ§λ€λ κ²μ΄ νμλλ€.
interface Mammalia{}
class Animal {
public static boolean isMammalia(Animal animal) {
if(animal instanceof Mammalia) {
return true;
}
else {
return false;
}
}
}
class Dog extends Animal implements Mammalia{}
class Lion extends Animal implements Mammalia{}
class Snake extends Animal {}
class Fish extends Animal {}
μ¦, λ§μ»€ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ λ¨μ νμ 체ν¬λ₯Ό ν μ μλ€.
3. μλ°μ λ§μ»€ μΈν°νμ΄μ€ π
μλ°μ λνμ μΈ λ§μ»€ μΈν°νμ΄μ€λ‘λ Serializableκ³Ό Cloneableμ΄ μλ€.
1. Serializable
class A implements Serializable {
int i;
String s;
// A class constructor
public A(int i,String s)
{
this.i = i;
this.s = s;
}
}
public class Test {
public static void main(String[] args) throws IOException, ClassNotFoundException {
A a = new A(20,"Amenable");
// Serializing 'a'
FileOutputStream fos = new FileOutputStream("Amenable.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(a);
// De-serializing 'a'
FileInputStream fis = new FileInputStream("Amenable.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
A b = (A)ois.readObject();//down-casting object
System.out.println(b.i+" "+b.s);
// closing streams
oos.close();
ois.close();
}
}
Serializableμ μμ μ ꡬνν ν΄λμ€μ μΈμ€ν΄μ€λ ObjectOutputStreamμ ν΅ν΄ write ν μ μλ€κ³ μλ €μ€λ€. μ¦, μ§λ ¬νν μ μλ€κ³ μλ €μ£Όλ κ²μ΄λ€.
2. Cloneable
class A implements Cloneable
{
int i;
String s;
public A(int i,String s) {
this.i = i;
this.s = s;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
public class Test
{
public static void main(String[] args) throws CloneNotSupportedException {
A a = new A(20, "Amenable");
A b = (A)a.clone();
}
}
Cloneableλ μμ μ ꡬνν ν΄λμ€μ μΈν°νμ΄μ€λ§ clone()μ ν΅ν 볡μ κ° κ°λ₯νλλ‘ νλ€. μ¦, CloneableμΈν°νμ΄μ€κ° ꡬνλμ΄ μλ€λ κ²μ ν΄λμ€ μμ±μκ° λ³΅μ λ₯Ό νμ©νλ€λ μλ―Έμ΄λ€.
μ΄νν°λΈ μλ°μμ 'clone μ¬μ μ'κ΄λ ¨ λΆλΆμ 곡λΆνλ€κ° λ§μ»€ μΈν°νμ΄μ€μ κ°λ κΉμ§ μ€κ² λμλ€. ν΄λΉ κ°λ μ ν λλ‘ clone μ¬μ©λ²κ³Ό cloneμ μ¬μ μν λ μ£Όμμ¬νλ€λ κ³μν΄μ κ°μ΄ 곡λΆν΄ 보λλ‘ νμ.
ν΄λΉ κΈμ
λ¨κΆ μ±λμ JAVAμ μ μ,
μ‘°μμ λΈλ‘ν¬λμ μ΄νν°λΈ μλ°,
geeksforgeeksμ Marker interface in Java,
Inpaλμ μΈν°νμ΄μ€(Interface)μ μ μ - νννκ² κ°λ μ 리
λ₯Ό μ°Έκ³ νμμ΅λλ€.
'π JAVA > μ£Όμ κ°λ ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ³μ (0) | 2023.03.21 |
---|---|
κ³΅λ³ λ°ννμ (Convariant Return Type) (0) | 2023.03.09 |
Parsing(νμ±) - CSV, XML, JSON (0) | 2023.01.30 |
μ μΆλ ₯(I/O)(2) - μ§λ ¬ν(Serialization) (2) | 2023.01.29 |
μ μΆλ ₯(I/O)(1) - λ Έλ μ€νΈλ¦Ό, 보쑰 μ€νΈλ¦Ό (0) | 2023.01.29 |