내일배움캠프

JAVA 4μ£Όμ°¨: μ œλ„€λ¦­

KIMHYEYUN 2023. 10. 23. 14:34
λ°˜μ‘ν˜•

Generic

public class Generic<T> { ... }
Generic<String> stringGeneric = new Generic<>();
  • Generic < T > 의 클래슀처럼, μ œλ„€λ¦­μ„ μ‚¬μš©ν•œ 클래슀λ₯Ό μ œλ„€λ¦­ 클래슀라고 함
  • μ œλ„€λ¦­μ—μ„œ <> 사이에 λ“€μ–΄κ°€λŠ” λ³€μˆ˜λͺ… TλŠ” νƒ€μž… λ³€μˆ˜λΌκ³  함
  • Generic 클래슀λ₯Ό μ›μ‹œ νƒ€μž…μ΄λΌκ³  함

μ œν•œ

  1. 객체의 static 멀버에 μ‚¬μš©ν•  수 μ—†μŒ
    • νƒ€μž… λ³€μˆ˜λŠ” μΈμŠ€ν„΄μŠ€ λ³€μˆ˜λ‘œ κ°„μ£Όλ˜κ³ , λͺ¨λ“  객체에 λ™μΌν•˜κ²Œ λ™μž‘ν•΄μ•Όν•˜λŠ” static ν•„λ“œ νŠΉμ„±μƒ μ‚¬μš©ν•  수 μ—†μŒ
  2. μ œλ„€λ¦­ 배열을 생성할 수 μ—†μŒ

문법

  1. λ‹€μˆ˜μ˜ νƒ€μž… λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 있음
public class Generics<T, U, E> { 
	public E multiTypeMethod(T t, U u) { ... } 
} 

Generic<Long, Integer, String> instance = new Generic(); istance.multiTypeMethod(longVal, intVal);`
  1. λ‹€ν˜•μ„± 즉 상속과 νƒ€μž…μ˜ κ΄€κ³„λŠ” κ·ΈλŒ€λ‘œ 적용됨
    • λŒ€ν‘œμ μœΌλ‘œ λΆ€λͺ¨ 클래슀둜 μ œλ„€λ¦­ νƒ€μž… λ³€μˆ˜λ₯Ό μ§€μ •ν•˜κ³ , κ·Έ μ•ˆμ— μžμ‹ 클래슀λ₯Ό λ„˜κΈ°λŠ” 것은 잘 λ™μž‘ν•¨
  2. μ™€μΌλ“œ μΉ΄λ“œλ₯Ό 톡해 μ œλ„€λ¦­μ˜ μ œν•œμ„ ꡬ체적으둜 μ •ν•  수 있음
public class ParkingLog { ... }

ParkingLog bmwParkingLog = new ParkingLog();
ParkingLog iphoneParkingLog = new ParkingLog(); // error!

-   <? extends T> : T와 κ·Έ μžμ†λ“€λ§Œ μ‚¬μš© κ°€λŠ₯  
-  <? super T> : T와 κ·Έ μ‘°μƒλ“€λ§Œ κ°€λŠ₯  
-   <?> : μ œν•œ μ—†μŒ

πŸ™‹‍♀️ μ΄λ ‡κ²Œ μ œν•œν•˜λŠ” 이유?
λ‹€ν˜•μ„± λ•Œλ¬Έ!

  1. λ©”μ„œλ“œλ₯Ό μŠ€μ½”ν”„λ‘œ μ œλ„€λ¦­μ„ λ³„λ„λ‘œ μ„ μ–Έ κ°€λŠ₯

// λ˜λŠ”
static <T> void sort(List<T> list, Comparator<? super T> c) { ... }
  • μ΄λ ‡κ²Œ λ°˜ν™˜ νƒ€μž… μ•žμ— <> μ œλ„€λ¦­μ„ μ‚¬μš©ν•œ 경우, ν•΄λ‹Ή λ©”μ„œλ“œμ—λ§Œ μ μš©λ˜λŠ” μ œλ„€λ¦­ νƒ€μž… λ³€μˆ˜λ₯Ό μ„ μ–Έ κ°€λŠ₯
  • νƒ€μž… λ³€μˆ˜λ₯Ό 클래슀 λ‚΄λΆ€μ˜ μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ μ·¨κΈ‰ν•˜κΈ° λ•Œλ¬Έμ— μ œλ„€λ¦­ 클래슀의 νƒ€μž…λ³€μˆ˜λ₯Ό static λ©”μ„œλ“œμ—μ„œλŠ” μ‚¬μš©ν•  수 μ—†μ—ˆμ§€λ§Œ, μ œλ„€λ¦­ λ©”μ„œλ“œμ˜ μ œλ„€λ¦­ νƒ€μž… λ³€μˆ˜λŠ” ν•΄λ‹Ή λ©”μ„œλ“œμ—μ„œλ§Œ 적용되기 λ•Œλ¬Έμ— λ©”μ„œλ“œ ν•˜λ‚˜λ₯Ό κΈ°μ€€μœΌλ‘œ μ„ μ–Έν•˜κ³  μ‚¬μš© κ°€λŠ₯
  • 같은 μ΄λ¦„μ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν–ˆλ‹€κ³  해도 μ œλ„€λ¦­ λ©”μ„œλ“œμ˜ νƒ€μž… λ³€μˆ˜λŠ” μ œλ„€λ¦­ 클래슀의 νƒ€μž… λ³€μˆ˜μ™€ 닀름
public class Generic<T, U, E> {
    // Genenric<T, U, E> 의 T와 μ•„λž˜μ˜ TλŠ” μ΄λ¦„λ§Œ 같을 뿐 λ‹€λ₯Έ λ³€μˆ˜
    static <T> void sort(List<T> list, Comparator<? super T> c) { ... }
}
728x90
λ°˜μ‘ν˜•