μ΄κ±΄ μΌκΈ 컬λ μ μ μ μ©νμλ©΄
μ’μ κ² κ°μμ.
μ°ν μ½ ν리μ½μ€λ₯Ό νλ©΄μ, λ¨κ±°μ΄ κ°μπ₯μλ μΌκΈμ»¬λ μ λλ체 μ΄κ² λκΈΈλ... κ°μ²΄μ§ν₯ μν체쑰 μμΉμμ μλμμ΄ κ°μ‘°νκ³ μλ μ΄ λ΄μ©μ λ€λ€λ³΄κ³ μ νλ€.
μΌκΈ 컬λ μ (First Class Collection)
μνΈμμ€ μ€μλ‘μ§μ κ°μ²΄μ§ν₯ μν체쑰 ννΈμ κ·μΉ 8μμ μΈκΈλ λ΄μ©μΌλ‘ λ€μκ³Ό κ°μ κ·μΉμ μ μ©νλ κ²μ λͺ©νλ‘ νκ³ μλ€.
- μ½λ μ μ ν¬ν¨ν ν΄λμ€λ λ°λμ λ€λ₯Έ λ©€λ² λ³μκ° μμ΄μΌ νλ€.
- κ° μ½λ μ μ κ·Έ μμ²΄λ‘ ν¬μ₯λΌ μμΌλ―λ‘ μ΄μ μ½λ μ κ³Ό κ΄λ ¨λ λμμ κ·Όκ±°μ§κ° λ§λ ¨λμ μ΄λ€.
- νν°κ° μ΄ μ ν΄λμ€μ μΌλΆκ° λ¨μ μ μ μλ€.
- νν°λ λν μ€μ€λ‘ ν¨μ κ°μ²΄κ° λ μ μλ€.
- λν μ ν΄λμ€λ λ κ·Έλ£Ήμ κ°μ΄ λ¬Άλλ€λ κ° κ·Έλ£Ήμ κ° μμμ κ·μΉμ μ μ©νλ λ±μ λμμ μ²λ¦¬ν μ μλ€.
- μ΄λ μΈμ€ν΄μ€ λ³μμ λν κ·μΉμ νμ€ν νμ₯μ΄μ§λ§ κ·Έ μ체λ₯Ό μν΄μλ μ€μνλ€.
- μ½λ μ μ μ€λ‘ λ§€μ° μ μ©ν μμ νμ μ΄λ€.
- λ§μ λμμ΄ μμ§λ§ νμ νλ‘κ·Έλλ¨Έλ μ μ§λ³΄μ λ΄λΉμμ μλ―Έμ μλλ λ¨μ΄λ κ±°μ μλ€.
μ¦, Collectionμ Wrapping νλ©΄μ κ·Έ μΈμ λ€λ₯Έ λ©€λ² λ³μκ° μλ μνλ₯Ό μΌκΈ 컬λ μ μ΄λΌκ³ λΆλ₯Έλ€.
μλ μμλ₯Ό 보면 μ΄λ»κ² μκ²Όλμ§ λ°λ‘ μ΄ν΄ν μ μλ€.
public class Cars {
// λ©€λ² λ³μκ° νλλ°μ μμ
private List<Car> carList;
public Cars(List<Car> carList) {
this.carList = carList;
}
}
μ μ¬μ©ν κΉ?
1) λΉμ§λμ€μ μ’ μμ μΈ μλ£κ΅¬μ‘°
2) Collectionμ λΆλ³μ±μ 보μ₯
3) μνμ νμλ₯Ό ν κ³³μμ κ΄λ¦¬
4) μ΄λ¦μ΄ μλ 컬λ μ
λΉμ¦λμ€μ μ’ μμ μΈ μλ£κ΅¬μ‘°
μλΉμ€ λ©μλλ₯Ό ꡬνν λ ν΄λΉ λ©μλ λ΄μμ νΉμ validation 쑰건λ€μ ν¨κ» ꡬννλ€λ©΄ λͺ¨λ μ₯μμμ validation κ²μ¦μ½λκ° λ€μ΄μΌνλ λ¬Έμ μ μ΄ λ°μνλ€. μ΄λ¬ν λ¬Έμ λ μΌκΈ 컬λ μ μ λ§λ€μ΄ νΉμ 쑰건μΌλ‘ λ§λ€ μ μλ μλ‘μ΄ μλ£κ΅¬μ‘°λ₯Ό μμ±νλ©΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
public class Cars {
private List<Car> carList;
public Cars(List<Car> carList) {
validateCarName(carList);
validateDuplicateName(carList);
this.carList = carList;
}
...
}
μ΄λ°μμΌλ‘ κ°μ²΄ μΈμ€ν΄μ€λ₯Ό μμ±νκΈ° μ , validation μ νμΈν΄μ£Όκ³ ν΅κ³Ό μμλ§ μΈμ€ν΄μ€λ₯Ό μμ±νλλ‘ μ’ λ λͺ ννκ² κ°μ²΄λ₯Ό λ§λ€ μ μλ€. μ΄λ κ² νλ©΄ μλ£κ΅¬μ‘°λ₯Ό λΉμ¦λμ€μ μ’ μμ μΌλ‘ ꡬνν μ μλ€.
Collectionμ λΆλ³μ±μ 보μ₯
λ§μ μ¬λλ€μ΄ ν·κ°λ¦¬λ κ² μ€ νλκ° Javaμμ final μ μΈμ΄ λΆλ³μ λ§λ€μ΄μ€λ€κ³ μ€ν΄νλ κ²μ΄λ€.
final List<Car> carList;
μμ κ°μ μ½λμμ CarListλ add, remove μ²λΌ λ°μ΄ν°λ₯Ό λ³κ²½ ν μ μμκΉ? βNo. λ³κ²½μ΄ κ°λ₯νλ€.
μ νν λ§νμλ©΄ finalμ μ¬ν λΉμ λΆκ°λ₯νλλ‘ νλ κ²μ΄μ§ λΆλ³κ°μ²΄λ‘ λ§λ€μ΄μ£Όλ κ²μ μλλ€. λ°λΌμ add, remove μ κ°μ λ©μλλ‘ λ΄μ©μ λ³κ²½ν μ μλ κ²μ΄λ€.
κ·Έλ λ€λ©΄, Javaμμ λΆλ³κ°μ²΄λ₯Ό λ§λ€μ΄μΌ νλ€λ©΄ μ΄λ€μμΌλ‘ μ¬μ©ν΄μΌν κΉ? λ°λ‘, μΌκΈ 컬λ μ + wrapper classλ₯Ό ν¨κ» μ¬μ©νμ¬ ν΄κ²°ν μ μλ€. μ΄λ μ μν μ λκ°μ§λ λ€μκ³Ό κ°λ€. (*μ°ν μ½ 2κΈ° ν°κ±°λμ μΌκΈμ»¬λ μ λ΄μ©μ μ°Έκ³ νμ¬ μ΄ν΄νμ΅λλ€.)
- getter, setterλ₯Ό λ§λ€μ§ μμ λ΄λΆ κ°μ λ³κ²½μ΄ λΆκ°λ₯νλλ‘ ν΄μΌνλ€.
- μμ±μλ₯Ό λ§λ€ λ unmodifiableListλ₯Ό μ¬μ©νμ¬ λΆλ³μ 보μ₯ν΄μΌνλ€.
return Collections.unmodifiableList(carList);
μ¦, μΌκΈ 컬λ μ μ λ§λ€ λλ collection κ°μ κ·Έλλ‘ λ°ννλ κΈ°λ₯μ λμ§ μλ κ²μ΄ μ€μνλ€. λ°ν μ, κ°κ³΅λ κ°μ λ°ννκ±°λ unmodifiableList λ₯Ό μ¬μ©νμ¬ λΆλ³μ±μ κΌ λ³΄μ₯ν΄μ£Όλλ‘ νμ.α.α
μνμ νμλ₯Ό ν κ³³μμ κ΄λ¦¬
μΌκΈ 컬λ μ μ κ°κ³Ό λ‘μ§μ΄ ν¨κ» μ‘΄μ¬νμ¬ μΈλΆμμ μ€λ³΅λ λ©μλμ μμ±μ νλ κ²μ λ°©μ§ν΄μ€λ€. μλ₯Όλ€μ΄ λ€μκ³Ό κ°μ μꡬμ¬νμ΄ μλ€κ³ κ°μ ν΄λ³΄μ.
λ¬Έμ ) λνκ΅ νμλ€μ νλ λ³ μ 보λ₯Ό Listλ‘ κ΄λ¦¬νκ³ μ ν λ κ° νλ μ νκ· νμ μ ꡬνμμ€.
List<Student> 1νλ
= new ArrayList<>();
List<Student> 2νλ
= new ArrayList<>();
List<Student> 3νλ
= new ArrayList<>();
List<Student> 4νλ
= new ArrayList<>();
λ§μ½, νλ λ³λ‘ Listλ₯Ό κ΄λ¦¬νλ€λ©΄ νΉμ νλ μ νκ· νμ μ ꡬνλ λμΌν λ‘μ§μ κ°κ°μ νλ λ³ μ¬λ¬ λ©μλλ₯Ό ꡬνν΄μΌνκΈ° λλ¬Έμ λΉν¨μ¨μ μ΄λΌλ κ²μ μ μ μλ€. μ΄λ¬ν λ¬Έμ λ μΌκΈ 컬λ μ μ μμ±νκ³ ν΄λΉ λ©μλλ€μ μΌκΈ 컬λ μ λ΄μ λ§λ€μ΄λμ΄ μΈλΆμμλ νΈμΆνλλ‘ νλ€λ©΄ μνμ νμλ₯Ό κ΄λ¦¬νλ©° λμΌν μ½λλ₯Ό μ€λ³΅νμ§ μμλ λλ€.
public class Student{
private List<Student> studentList;
public Student(List<Student> studentList){
this.studentList = studentList;
}
public float getGradeAvg(){
//νλ
λ³ νμ νκ· μ ꡬνλ λ‘μ§ κ΅¬ν
...
}
}
μ΄λ¦μ΄ μλ 컬λ μ
νλ λ³ List μ 보λ₯Ό κ΄λ¦¬νλ€λ©΄ λ€μκ³Ό κ°μ΄ νμ λ λ³ λ€λ₯Έ λ¬Έμ λ₯Ό λͺ»μ°Ύμ μ μλ€. κ·Έλ¬λ, νλ‘μ νΈκ° 컀μ§κ³ λ€λ₯Έ λλ£λ€κ³Ό νμ νκ² λλ€λ©΄ collectionμ λͺ νν λ€μ΄λ°μ νμλ‘ νλ€.
List<Student> 1νλ
= new ArrayList<>();
List<Student> 2νλ
= new ArrayList<>();
List<Student> 3νλ
= new ArrayList<>();
List<Student> 4νλ
= new ArrayList<>();
- ν΄λΉ κ°μ²΄λ€μ κ²μν λ λ³μλͺ λ§μΌλ‘ κ²μμ ν μ μλ€. λ³μλͺ μ λͺ¨λ₯Ό μ κ²μμ νκΈ° μ΄λ ΅λ€.
- λ¨μν λ³μλͺ μ μλ―Έλ₯Ό κΉκ² λΆμ¬νκΈ° μ΄λ ΅λ€.
λ°λΌμ νλ μ΄λ¦μ μΌκΈ 컬λ μ μμ²΄λ‘ λ§λ€μ΄λλ©΄ λ³μλͺ μ λμ΄μ κ·Έ μλ―Έλ₯Ό λͺ ννκ² λΆμ¬ν μ μλ€.
Freshman freshman = new Freshman(~~);
Sophomore sophomore = new Sophomore(~~);
Junior junior = new Junior(~~);
Senior senior = new Senior(~~);
μ΄μ²λΌ μΌκΈ 컬λ μ μ κ°μ²΄μ§ν₯ μμΉμ μ λ°λ₯΄κ³ μμΌλ©°, νμν λΆλΆμ μ μ¬μ μνκ² μ¬μ©νμ λ λμ± μ§κ°λ₯Ό λ°ννλ€.
λμΌλ‘
μ°ν μ½ ν리μ½μ€λ₯Ό μ§ννλ©°, μ’μ μμ΄λμ΄λ₯Ό λ§μ΄ μ»μ κ²λ μ¬μ€μ΄μ§λ§ μ λλ‘ μμ§ λͺ»νκ³ μλͺ»λ μ 보λ₯Ό μ νλ κ²λ λ§μκΈ°μ μ΄λ€ κ²μ μ¬μ©νκ³ μ μ©νκ³ μ νλ€λ©΄ λμ νλ‘μ νΈμ μμ€λ₯Ό κΈ°λ°μΌλ‘ μ΄ν΄νλ μ΅κ΄μ κ°μ ΈμΌκ² λ€λ μκ°μ΄ λ€μλ€ :)
μ°Έκ³ μλ£
https://jojoldu.tistory.com/412
https://tecoble.techcourse.co.kr/post/2020-05-08-First-Class-Collection/
https://brainbackdoor.tistory.com/140