Interface

Marker Interface

마컀 μΈν„°νŽ˜μ΄μŠ€μ˜ νŠΉμ§•μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • λ©”μ„œλ“œ 선언이 μ—†λŠ” μΈν„°νŽ˜μ΄μŠ€μ΄λ‹€.
  • λŒ€ν‘œμ μœΌλ‘œλŠ” Serializable κ³Ό Cloneable 이 μžˆλ‹€.

μ–΄λ…Έν…Œμ΄μ…˜μœΌλ‘œλ„ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.

Cloneable

ν΄λž˜μŠ€κ°€ Cloneable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•¨μœΌλ‘œμ¨ Object.clone() λ©”μ„œλ“œκ°€ ν•΄λ‹Ή 클래슀의 μΈμŠ€ν„΄μŠ€μ— λŒ€ν•œ ν•„λ“œ 볡사본을 λ§Œλ“€μˆ˜ μžˆμŒμ„ λ‚˜νƒ€λ‚Έλ‹€.

Cloneable μΈν„°νŽ˜μ΄μŠ€μ—λŠ” clone λ©”μ†Œλ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•ŠμœΌλ©° clone μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€λŠ” μ‚¬μ‹€λ§ŒμœΌλ‘œλ„ 객체의 볡사λ₯Ό 보μž₯ν•  수 μ—†λ‹€.

μ΄λŠ” Object ν΄λž˜μŠ€μ— μ •μ˜λ˜μ–΄ μžˆλŠ” μ•„λž˜ λ©”μ„œλ“œλ₯Ό public 으둜 μž¬μ •μ˜ ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

protected native Object clone() throws CloneNotSupportedException;

원본 Object 클래슀의 clone() λ©”μ„œλ“œλŠ” protected λ©”μ„œλ“œμ΄κΈ° λ•Œλ¬Έμ— μ™ΈλΆ€ νŒ¨ν‚€μ§€ ν΄λž˜μŠ€μ—μ„œ ν˜ΈμΆœν•  수 μ—†λ‹€.

λ°°μ—΄μ˜ `clone` λ©”μ„œλ“œ

이와 μ˜ˆμ™Έμ μœΌλ‘œ λ°°μ—΄μ˜ clone 은 λŸ°νƒ€μž„ νƒ€μž…κ³Ό μ»΄νŒŒμΌμ‹œ νƒ€μž… λͺ¨λ‘κ°€ 원본 λ°°μ—΄κ³Ό λ™μΌν•œ 배열을 λ°˜ν™˜ν•œλ‹€.
사싀상 clone λ©”μ„œλ“œλ₯Ό μ™„λ²½ν•˜κ²Œ μ‚¬μš©ν•˜λŠ” μœ μΌν•œ 예 이닀.

Map

Spac

Interface Map <K, V>

Type Parameters

  • K
    • ν‚€μ˜ μœ ν˜•
  • V
    • κ°’μ˜ μœ ν˜•

Implementing Classes

HashMap HashTable EnumMap ConcurrentHashMap TreeMap WeakHashMap

Since

1.2


ν‚€λ₯Ό 값에 λ§€ν•‘ν•˜λŠ” 객체 μž…λ‹ˆλ‹€.

μ€‘λ³΅λœ ν‚€λ₯Ό 값에 맀핑할 수 μ—†μœΌλ©° 각 ν‚€λŠ” μ΅œλŒ€ ν•œκ°œμ˜ κ°’μ—λ§Œ 맀핑이 κ°€λŠ₯ ν•©λ‹ˆλ‹€.

Map μΈν„°νŽ˜μ΄μŠ€λŠ” μ„Έκ°€μ§€μ˜ μ»¬λ ‰μ…˜ λ·°λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. (ν‚€ 집합, κ°’μ˜ 집합, ν‚€ & κ°’μ˜ 집합)

TreeMap ν΄λž˜μŠ€μ™€ 같은 일뢀 Map μΈν„°νŽ˜μ΄μŠ€μ˜ κ΅¬ν˜„μ²΄λ“€μ€ μˆœμ„œλ₯Ό 보μž₯ν•œλ‹€.

AutoCloseable

Since

1.7


ν–₯μƒΉλœ μ˜ˆμ™Έμ²˜λ¦¬λ¬ΈμœΌλ‘œ μž…μΆœλ ₯ μ²˜λ¦¬μ‹œ μ˜ˆμ™Έκ°€ λ°œμƒν•˜λ©΄ JVM 이 μžλ™μœΌλ‘œ close λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜μ—¬ μžμ›μ„ λ°˜λ‚©μ‹œμΌœ μ€λ‹ˆλ‹€.

파일 λ˜λŠ” μ†ŒμΌ“ ν•Έλ“€ λ“±μ˜ μžμ›λ“€μ„ μ’…λ£Œν•  λ•ŒκΉŒμ§€ λ³΄κ΄€ν•˜λŠ” 객체이닀.
AutoCloseable 객체의 close λ©”μ†Œλ“œλŠ” try-with-resources λΈ”λŸ­μ„ μ’…λ£Œν•  λ•Œ μžλ™μœΌλ‘œ 호좜 λœλ‹€.

이 κ΅¬μ‘°λŠ” λ¦¬μ†ŒμŠ€μ˜ 고갈 및 λ‹€λ₯Έ μ˜ˆμ™Έλ“€κΉŒμ§€ λ°œμƒν•  수 μžˆλŠ” μ—λŸ¬λ“€μ˜ ν•΄μ†Œλ₯Ό μ¦‰κ°μ μœΌλ‘œ 보μž₯ν•œλ‹€.

μ΄λ•Œ try() κ΅¬λ¬Έμ•ˆμ—λŠ” AutoCloseable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 객체여야 ν•œλ‹€.

try-finally λ³΄λ‹€λŠ” try-with-resources λ₯Ό μ‚¬μš©

public class MyResource implements AutoCloseable {
  public void close() throws Exception {
    System.out.println("Closeing!");
  }
}
try (MyResource res = new MyResource()){
  // use the code
}

Comparable

μ •λ ¬ μˆ˜ν–‰μ‹œ 기본적으둜 적용이 λ˜λŠ” μ •λ ¬κΈ°μ€€ λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜λŠ” μΈν„°νŽ˜μ΄μŠ€

Comparable μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„μ‹œμ— compareTo() λ₯Ό μ˜€λ²„λΌμ΄λ“œ ν•˜μ—¬ κ΅¬ν˜„ν•œλ‹€.

compareTo() λ©”μ„œλ“œμ˜ μž‘μ„± κ·œμΉ™μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  • < : 음수 λ°˜ν™˜
  • > : μ–‘μˆ˜ λ°˜ν™˜
  • == : 0 λ°˜ν™˜

이후 Arrays.sort() ν˜Ήμ€ Collections.sort() λ₯Ό ν†΅ν•˜μ—¬ μ •λ ¬

// xμ’Œν‘œκ°€ μ¦κ°€ν•˜λŠ” 순, xμ’Œν‘œκ°€ κ°™μœΌλ©΄ yμ’Œν‘œκ°€ κ°μ†Œν•˜λŠ” 순으둜 μ •λ ¬ν•˜λΌ.
class Point implements Comparable<Point> {
    int x, y;

    @Override
    public int compareTo(Point p) {
        if(this.x > p.x) {
            return 1; // x에 λŒ€ν•΄μ„œλŠ” μ˜€λ¦„μ°¨μˆœ
        }
        else if(this.x == p.x) {
            if(this.y < p.y) { // y에 λŒ€ν•΄μ„œλŠ” λ‚΄λ¦Όμ°¨μˆœ
                return 1;
            }
        }
        return -1;
    }
}
List<Point> pointList = new ArrayList<>();
pointList.add(new Point(x, y));
Collections.sort(pointList);

Default Method 지원Java SE 8+

Interface μ—μ„œλ„ λ©”μ„œλ“œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜κ²Œ λ˜μ—ˆλ‹€.

μ°Έμ‘° λ³€μˆ˜λ‘œ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  수 μžˆλ‹€.

implements ν•œ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜κ°€ κ°€λŠ₯ν•˜λ‹€.

interface MyInterface {
  default void defaultMethod() {
    System.out.println("Default Method");
  };
}

Static Method 지원Java SE 8+

Interface μ—μ„œλ„ λ©”μ„œλ“œ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€.

λ°˜λ“œμ‹œ 클래슀 λͺ…μœΌλ‘œ λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•΄μ•Ό ν•œλ‹€. (static 성격을 가지기 λ•Œλ¬Έ)

재 μ •μ˜κ°€ λΆˆκ°€λŠ₯ ν•˜λ‹€.

interface MyInterface {
  static void staticMethod() {
    System.out.println("Static Method");
  };
}