Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

마컀 μΈν„°νŽ˜μ΄μŠ€ (Marker Interface)
πŸ“‚ JAVA/μ£Όμš” κ°œλ…

마컀 μΈν„°νŽ˜μ΄μŠ€ (Marker Interface)

2023. 3. 9. 21:59

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
    'πŸ“‚ JAVA/μ£Όμš” κ°œλ…' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • λ³€μˆ˜
    • 곡변 λ°˜ν™˜νƒ€μž… (Convariant Return Type)
    • Parsing(νŒŒμ‹±) - CSV, XML, JSON
    • μž…μΆœλ ₯(I/O)(2) - 직렬화(Serialization)
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”