μΆμ ν΄λμ€
νλ μ΄μμ μΆμ λ©μλ(abstract method)λ₯Ό ν¬ν¨νλ©°, κ°μ²΄λ₯Ό μ§μ μΈμ€ν΄μ€νν μ μλ ν΄λμ€μ λλ€. μ΄ ν΄λμ€λ₯Ό μμλ°λ μλΈν΄λμ€μμ μΆμ λ©μλλ₯Ό λ°λμ ꡬνν΄μΌ νλ€.
// μΆμ ν΄λμ€ μ μ
abstract class Shape {
// μΆμ λ©μλ
abstract void draw();
// μΌλ° λ©μλ
void display() {
System.out.println("Displaying shape");
}
}
// μΆμ ν΄λμ€λ₯Ό μμλ°λ ν΄λμ€
class Circle extends Shape {
// μΆμ λ©μλμ ꡬν
void draw() {
System.out.println("Drawing circle");
}
}
//main
Circle circle = new Circle();
// draw λ©μλ νΈμΆ
circle.draw();
// display λ©μλ νΈμΆ
circle.display();
μΈν°νμ΄μ€
μΆμ ν΄λμ€ VS μΈν°νμ΄μ€
μΈν°νμ΄μ€λ μΆμν΄λμ€λ λμ΄ λκ°μ΄ μΆμ λ©μλλ₯Ό ν΅ν΄ μμ/ꡬνμ ν΅ν λ©μλ κ°μ ꡬν κ·μΉμ κ°μ§λ μΆμν ν΄λμ€μ΄λ€.
μΈν°νμ΄μ€ ππ» implements λΌλ ν€μλμ²λΌ μΈν°νμ΄μ€μ μ μλ λ©μλλ₯Ό κ° ν΄λμ€μ λͺ©μ μ λ§κ² κΈ°λ₯μ ꡬννλ λλ
- μ΄ν리μΌμ΄μ μ κΈ°λ₯μ μ μν΄μΌ νμ§λ§ κ·Έ ꡬν λ°©μμ΄λ λμμ λν΄ μΆμν ν λ
- μλ‘ κ΄λ ¨μ±μ΄ μλ ν΄λμ€λ€μ λ¬Άμ΄ μ£Όκ³ μΆμλ (νμ κ΄κ³)
- λ€μ€ μμ(ꡬν)μ ν΅ν μΆμν μ€κ³λ₯Ό ν΄μΌν λ
- νΉμ λ°μ΄ν° νμ μ νλμ λͺ μνκ³ μΆμλ°, μ΄λμ κ·Έ νλμ΄ κ΅¬νλλμ§λ μ κ²½μ°μ§ μλ κ²½μ°
- ν΄λμ€μ λ³λλ‘ κ΅¬ν κ°μ²΄κ° κ°μ λμμ νλ€λ κ²μ 보μ₯νκΈ° μν΄ μ¬μ©
μΆμ ν΄λμ€ ππ» extends ν€μλλ₯Ό μ¬μ©ν΄μ μμ μ κΈ°λ₯λ€μ νμ ν΄λμ€λ‘ νμ₯ μν€λ λλ
- μμ λ°μ ν΄λμ€λ€μ΄ 곡ν΅μΌλ‘ κ°μ§λ λ©μλμ νλκ° λ§μ μ€λ³΅ λ©€λ² ν΅ν©μ ν λ
- λ©€λ²μ public μ΄μΈμ μ κ·Όμ(protected, private) μ μΈμ΄ νμν κ²½μ°
- νμ ν΄λμ€κ° μ€λ²λΌμ΄λνμ¬ μ¬μ μνλ κΈ°λ₯λ€μ 곡μ νκΈ° μν μμ κ°λ μ μ¬μ©ν λ
βοΈμ°¨μ΄μ
- μΆμ ν΄λμ€λ λ¨μΌ μμλ§ νμ©: νλμ ν΄λμ€λ μ¬λ¬ μΆμ ν΄λμ€λ₯Ό μμν μ μμ΅λλ€. κ·Έλ¬λ μΈν°νμ΄μ€λ λ€μ€ μμμ νμ©ν©λλ€.
- μΆμ ν΄λμ€λ μΌλ° λ©μλλ₯Ό κ°μ§ μ μλ€: μΆμ ν΄λμ€λ μΆμ λ©μλλΏλ§ μλλΌ κ΅¬νλ μΌλ° λ©μλλ κ°μ§ μ μμ΅λλ€. λ°λ©΄ μΈν°νμ΄μ€λ Java 8λΆν° λν΄νΈ λ©μλλ₯Ό ν΅ν΄ ꡬνλ λ©μλλ₯Ό κ°μ§ μ μμ΅λλ€.
- μΆμ ν΄λμ€λ μΈμ€ν΄μ€νλ μ μλ€: μΆμ ν΄λμ€μ κ°μ²΄λ₯Ό μ§μ μμ±ν μ μκ³ , μΆμ ν΄λμ€λ₯Ό μμλ°μ μλΈν΄λμ€μμ ꡬνν΄μΌ ν©λλ€. λ°λ©΄ μΈν°νμ΄μ€λ μΈμ€ν΄μ€νλ μ μμ΅λλ€.
- μΈν°νμ΄μ€λ λ€μν ν΄λμ€μ μ μ© κ°λ₯ν νμ€μ μ 곡νλ λ° μ£Όλ‘ μ¬μ©:μ¬λ¬ ν΄λμ€μμ 곡ν΅μΌλ‘ μ¬μ©λλ λ©μλ μΈνΈλ₯Ό μ μνκ³ μ ν λ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν©λλ€. μΆμ ν΄λμ€λ μ£Όλ‘ μμ κ³μΈ΅ ꡬ쑰μμ κ³΅ν΅ κΈ°λ₯μ μ 곡νλ λ° μ¬μ©λ©λλ€.
ππ» μΆμ ν΄λμ€μ μΈν°νμ΄μ€λ μν©μ λ§κ² μ¬μ©
List
Listλ₯Ό ꡬνν ν΄λμ€λ€μ λ°μ΄ν°λ₯Ό μΈλ±μ€λ₯Ό μ¬μ©νμ¬ μ μ₯νκ³ μ κ·Όν μ μμΌλ©°, ν¬κΈ°λ₯Ό λμ μΌλ‘ μ‘°μ ν μ μμΌλ©°, μ λ€λ¦μ μ§μνλ€.
Listλ μ€λ³΅λ μμλ₯Ό νμ©νλ©°, μμκ° μ μ§λκΈ° λλ¬Έμ μμκ° μΆκ°λ μμλλ‘ μ κ·Όν μ μμ΅λλ€.
β¨ List ꡬν ν΄λμ€: ArrayList, LinkedList, Vector, Stack
List<String> stringList = new ArrayList<>();
// μμ μΆκ°
stringList.add("Java");
// μμ μ κ·Ό
System.out.println(stringList.get(0));
// μμ μμ
stringList.set(1, "JavaScript");
// μμ μ κ±°
stringList.remove("Java");
List.of()
List.of λ©μλλ μΈμλ‘ μ λ¬λ μμλ€λ‘ ꡬμ±λ λΆλ³(immutable)ν 리μ€νΈλ₯Ό μμ±ν©λλ€.
βοΈ ofλ‘ μμ±λ 리μ€νΈλ μμλ₯Ό μΆκ°νκ±°λ μ κ±°ν μ μμ΅λλ€.
List<String> fruits = List.of("Apple", "Banana", "Orange");
// μμ μΆκ° λλ μ κ±° μλ - UnsupportedOperationException λ°μ
// fruits.add("Grapes"); // λΆκ°λ₯
// fruits.remove(0); // λΆκ°λ₯
// μμ μΆλ ₯
for (String fruit : fruits) {
System.out.println(fruit);
}
}
Iterator
Iteratorλ 컬λ μ (List, Set, Map λ±)μ μννλ©΄μ μμμ μ κ·Όνκ³ μμ νλ λ° μ¬μ©λλ μΈν°νμ΄μ€
Iteratorλ 컬λ μ μ λ΄λΆ ꡬνκ³Ό λ 립μ μΌλ‘ λμνλ©°, μμ°¨μ μΌλ‘ μμμ μ κ·Όν μ μλ€.
- boolean hasNext():
- λ€μμ μμκ° μλμ§ μ¬λΆλ₯Ό νμΈν©λλ€.
- hasNext()κ° trueλ₯Ό λ°ννλ κ²½μ°, λ€μμ next() λ©μλλ‘ νμ¬ μμμ μ κ·Όν μ μμ΅λλ€.
- E next():
- λ€μμ μλ μμλ₯Ό λ°νν©λλ€.
- hasNext()λ‘ νμΈ νμ νΈμΆν΄μΌ νλ©°, νΈμΆ νμλ λ€μ μμλ‘ μ΄λν©λλ€.
- void remove():
- νμ¬ μν μ€μΈ μμλ₯Ό 컬λ μ μμ μ κ±°ν©λλ€.
- next() νΈμΆ μ΄νμλ§ μ¬μ© κ°λ₯νλ©°, ν λ²λ§ νΈμΆν μ μμ΅λλ€.
- μΌλΆ 컬λ μ μμλ remove()λ₯Ό μ§μνμ§ μμ μ μμ΅λλ€.
List<String> words=List.of("apple","bat","cat");
List<String> wordsAl= new ArrayList<>(words);
Iterator<String> iterator=wordsAl.iterator();
while(iterator.hasNext()){
if(iterator.next().endWith("at"){
iterator.remove();
}
}
//β
for (String currentWord : words) {
if (currentWord.endsWith("at")) {
words.remove(currentWord); // ConcurrentModificationException λ°μ κ°λ₯
}
}
βοΈIteratorλ₯Ό μ¬μ©ν΄, μμλ₯Ό μ κ±°ν΄μΌνλ€.
ArrayList VS LinkedList
ArrayListλ indexκ° μκ³ , LinkedListλ κ° μμλ§λ€ μ,λ€ μμμ μμΉκ°μ κ°μ§κ³ μλ€.
ArrayList ππ» κΈ°λ³Έμ μΌλ‘ λ°°μ΄μ μ¬μ©νλ€. νμ§λ§ μΌλ° λ°°μ΄κ³Ό μ°¨μ΄μ μ΄ μ‘΄μ¬νλ€. μΌλ° λ°°μ΄μ μ²μμ λ©λͺ¨λ¦¬λ₯Ό ν λΉν λ ν¬κΈ°λ₯Ό μ§μ ν΄μ£Όμ΄μΌ νμ§λ§, ArrayListλ ν¬κΈ°λ₯Ό μ§μ νμ§ μκ³ λμ μΌλ‘ κ°μ μ½μ νκ³ μμ ν μ μλ€.
β μ‘°ν
: indexλ₯Ό κ°μ§κ³ μκ³ λ¬΄μμ μ κ·Όμ΄ κ°λ₯νκΈ° λλ¬Έμ, ν΄λΉ indexμ λ°μ΄ν°λ₯Ό νλ²μ κ°μ Έμ¬ μ μλ€.
β λ°μ΄ν° μ½μ & μμ
:λ°μ΄ν°μ μ½μ
κ³Ό μμ μ ArrayListλ λ³λν, μμΉλ₯Ό λ§μΆ°μ£Όμ΄μΌ νλ€.
ex) 5κ°μ λ°μ΄ν°κ° μμ λ 맨 μμ 2λ₯Ό μμ νλ€λ©΄ λλ¨Έμ§ λ€μ 4κ°λ₯Ό μμΌλ‘ νμΉΈμ© μ΄λν΄μΌ νλ€.
→ μ½μ κ³Ό μμ κ° λ§λ€λ©΄ ArrayListλ λΉν¨μ¨μ μ΄λ€.
LinkedList ππ» LinkedListλ λ΄λΆμ μΌλ‘ μλ°©ν₯μ μ°κ²° 리μ€νΈλ‘ ꡬμ±λμ΄ μμ΄ μ°Έμ‘°νλ €λ μμμ λ°λΌ μ²μλΆν° μ λ°©ν₯ λλ μμμΌλ‘ μν κ°λ₯ (λ°°μ΄μ λ¨μ μ 보μνκΈ° μν΄ LinkedListκ° κ³ μλμλ€.)
β μ‘°ν
: LinkedListλ μμ°¨μ μ κ·Όμ΄κΈ° λλ¬Έμ κ²μμ μλκ° λ리λ€.
β λ°μ΄ν° μ½μ & μμ
: λ°μ΄ν°λ₯Ό μΆκ°·μμ μ κ°λ¦¬ν€κ³ μλ μ£Όμκ°λ§ λ³κ²½ν΄μ£Όλ©΄ λκΈ° λλ¬Έμ ArrayListμ λΉν΄ μλΉν ν¨μ¨μ μ΄λ€.
ex) 2λ²μ§Έ κ°μ μμ νλ©΄ 1λ²μ§Έ λ Έλκ° 3λ²μ§Έ λ Έλλ₯Ό κ°λ¦¬ν€κ² νκΈ°λ§ νλ©΄ λλ€.
μκ°λ³΅μ‘λ μ°¨μ΄
ππ» λ°μ΄ν°μ κ°μκ° λ³νμ§ μλ κ²½μ°λΌλ©΄, ArrayListκ° μ΅μμ μ νμ΄κ² μ§λ§, λ°μ΄ν° κ°μμ λ³κ²½μ΄ μ¦λ€λ©΄ LinkedListλ₯Ό μ¬μ©νλ κ²μ΄ ν¨μ¨μ μ΄λ€.
instanceof
κ°μ²΄μ νμ μ νμΈνκΈ° μν μ°μ°μ, νΉμ κ°μ²΄κ° νΉμ ν΄λμ€μ μΈμ€ν΄μ€μΈμ§, λλ νΉμ μΈν°νμ΄μ€λ₯Ό ꡬνν κ°μ²΄μΈμ§λ₯Ό νμΈν μ μμ΅λλ€.
boolean result = object instanceof Type;
//class
class Animal {}
class Dog extends Animal {}
class Cat extends Animal {}
//main
System.out.println(cat instanceof Dog); // false
System.out.println(cat instanceof Cat);
sort
μλ°μμ λ°°μ΄μ΄λ 컬λ μ μ μ λ ¬ν λ ,
λ°°μ΄ ππ» Arrays ν΄λμ€
리μ€νΈ ππ» Collections ν΄λμ€
sort() λ©μλλ₯Ό μ¬μ©νλ€.
Array μ λ ¬
int[] numbers = {5, 2, 8, 1, 7};
// λ°°μ΄ μ λ ¬
Arrays.sort(numbers);
List μ λ ¬
List<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(2);
numbers.add(8);
numbers.add(1);
numbers.add(7);
// 리μ€νΈ μ λ ¬
Collections.sort(numbers);