-
JAVA μλ° μ€μ²©ν΄λμ€, comparator μΈν°νμ΄μ€JAVA 2020. 8. 9. 12:54
π― μλ° μ€μ²©ν΄λμ€μ comparator μΈν°νμ΄μ€λ₯Ό νμ©ν λ°°μ΄μ λ ¬μ μμλ³Έλ€.
π λͺ©μ°¨
comparator μ λ ¬ μΈν°νμ΄μ€
μ€μ²©ν΄λμ€
public class Outer{ class Inner{ }//end Inner }//end Outer
ν΄λμ€ μμ λ λ€λ₯Έ ν΄λμ€λ₯Ό κ°μ§ ννλ€. AλΌλ ν΄λμ€κ° B ν΄λμ€μμλ§ μ¬μ©λλ€λ©΄, λ 립μ μΈ ν΄λμ€λ‘ μμ±νκΈ°λ³΄λ€ Bν΄λμ€μ μ€μ²©ννλ‘ μμ±νλ κ² κ΄λ¦¬νκΈ° μ¬μμ§λ€.
μ€μ²©λ μ΄λν΄λμ€λ μμ°ν° ν΄λμ€μ λ©€λ²(λ³μ, λ©μλ)λ₯Ό μμ μ κ²μ²λΌ μ¬μ©ν μ μλ€. Outer λ©€λ²μ μ κ·Όμ§μ μκ° privateμ΄λΌλ μ κ·Όν μ μλ€.
μ΄λν΄λμ€ μμμ static λ³μλ₯Ό μ¬μ©ν μ μλ€. static μ μΈμ λ³μκ° μλ μ΄λ ν΄λμ€μλ§ μ§μ ν μ μλ€. μ΄λν΄λμ€λ μμ°ν° ν΄λμ€λ₯Ό ν΅ν΄μλ§ μ κ·Όν μ μμ§λ§ μ€νν± μ΄λ ν΄λμ€λ μ§μ μ κ·Ό κ°λ₯νλ€.
μ€μ²©ν΄λμ€λ μ μλλ μμΉμ λ°λΌμ 4κ°μ§ ννλ‘ λλλ€.
member Inner ν΄λμ€
Outer ν΄λμ€μ λ©€λ²μ²λΌ μ μλ ν΄λμ€. λ©€λ²μ κ°μ΄ κ°μ²΄μμ± ν μ¬μ©ν μ μλ€. λ°λμ Outer ν΄λμ€μ κ°μ²΄λ₯Ό λ¨Όμ μμ±ν΄μΌ νλ€.
public class Outer { // λ©€λ²λ³μ public int n = 10; protected int n2 = 20; int n3 = 30; private int n4 = 40; static int n5 = 50; // λ©€λ² λ©μλ public void x() {} // λ©€λ² innerν΄λμ€ class Inner { int k = 10; static final int NUM = 20; // μμ κ°λ₯ // static int k2 =20; //staticλ³μ μ¬μ© λΆκ° public void info() { System.out.println(n); System.out.println(n2); System.out.println(n3); System.out.println(n4); System.out.println(n5); System.out.println(k); System.out.println(NUM); } }// end Inner // 1. Outerμμ Innerμμ± public void innerCreate() { Inner i = new Inner(); i.info(); } }
Inner ν΄λμ€κ° ν΅μ§Έλ‘ Outer ν΄λμ€μ λ©€λ² μ리μ μμΉν΄μλ€. Outerμ λ©€λ²λ³μμ λ€μν μ κ·Όμ§μ μκ° λΆμ΄μμ§λ§ Innerν΄λμ€λ μ ν μμ΄ Outerμ λͺ¨λ λ©€λ²λ₯Ό μκΈ°κ²μ²λΌ μ¬μ©ν μ μλ€. Outerμ innerCreate() λ©μλλ₯Ό 보면 Outerν΄λμ€μμ μ΄λν΄λμ€μ μ κ·Όν λ μ§μ μ΄λν΄λμ€μ κ°μ²΄λ₯Ό μμ±νκ³ μ΄λν΄λμ€μ infoν¨μμ μ κ·Όνλ κ²μ λ³Ό μ μλ€.
public class TestOuter { public static void main(String[] args) { Outer outer = new Outer(); outer.innerCreate(); //2. Outerλ°μμ Inner μμ±==>λ°λμ OuterλΆν°μμ±νλ€. Outer outer2 = new Outer(); //λ°κΉ₯μ μλ ν΄λμ€ μμ± outer2.n=1; Outer.Inner inner = outer2.new Inner(); inner.info(); } }
μΈλΆν΄λμ€μ main ν¨μ μμμ μ΄λν΄λμ€λ₯Ό μ¬μ©νκΈ° μν΄μ λ¨Όμ Outer ν΄λμ€μ κ°μ²΄μμ±μ ν΄μΌνλ€. κ·Έ λ€μ Outer.Inner νμ μΌλ‘ μ΄λν΄λμ€μ κ°μ²΄λ₯Ό μμ±νκ³ μ΄λν΄λμ€μ infoν¨μλ₯Ό νΈμΆνλ€.
local Inner ν΄λμ€
Outerν΄λμ€μ νΉμ λ©μλ μμμ λ‘컬λ³μμ²λΌ μ μλ ν΄λμ€λ₯Ό μλ―Ένλ€. λ‘컬λ³μ μ리μ μ΄λν΄λμ€κ° μ μΈλμκΈ° λλ¬Έμ λ©μλκ° μ’ λ£λ λ μ΄λν΄λμ€λ μ¬λΌμ§λ€.
class Outer2 { int a = 10; private int b = 20; static int c = 30; public void info() { int size = 100; class Inner { int d = 40; public void print() { System.out.println(a); System.out.println(b); System.out.println(c); System.out.println(d); System.out.println(size); } } Inner inner = new Inner(); inner.print(); } } public class Ex07_5 { public static void main(String[] args) { Outer2 outer = new Outer2(); outer.info(); } }
Outerν΄λμ€μ info()λ©μλ μμμ μ΄λν΄λμ€μ κ°μ²΄λ₯Ό μμ±νκ³ print() λ©μλλ₯Ό νΈμΆνλ€. μ΄ print λ©μλλ info()λ©μλκ° νΈμΆλμ΄μΌ μ€νλλ€.
static Inner ν΄λμ€
static ν€μλλ₯Ό μ¬μ©ν΄ μ΄λν΄λμ€λ₯Ό μ μν ννλ€. static μ΄λν΄λμ€λ static λ³μλ₯Ό μ¬μ©ν μ μκ³ , Outer ν΄λμ€λ₯Ό μμ±ν νμμμ΄ μ΄λν΄λμ€μ μ§μ μ κ·Όν μ μλ€. νμ§λ§ μ΄ κ²½μ° Outerν΄λμ€μ λ©€λ²μ μ κ·Όν μ μκΈ° λλ¬Έμ static λ³μκ° νμν μν©μμλ§ μ¬μ©νλ€.
public class Outer3 { // λ©€λ²λ³μ public int n = 10; protected int n2 = 20; int n3 = 30; private int n4 = 40; static int n5 = 50; // λ©€λ² λ©μλ public void x() {} static class Inner { int k = 10; static final int NUM = 20; // μμ κ°λ₯ static int k2 = 20; public void info() { // System.out.println(n); // System.out.println(n2); // System.out.println(n3); // System.out.println(n4); System.out.println(n5); System.out.println(k); System.out.println(k2); System.out.println(NUM); } }// end Inner }// end class
staticμΌλ‘ μ μΈλ μ΄λν΄λμ€λ staticλ³μλ₯Ό μ μΈν Outerμ λ©€λ²λ₯Ό μ¬μ©ν μ μλ€.
anonymous Inner ν΄λμ€(μ΅λͺ ν΄λμ€)
μ΄λ¦μλ μ΄λν΄λμ€μ΄λ©°, μΌλ°μ μΌλ‘ μΈν°νμ΄μ€λ μΆμν΄λμ€λ₯Ό ꡬννλ μ©λλ‘ μ¬μ©λλ€. μλ μΈν°νμ΄μ€λ κ°μ²΄μμ±μ ν μ μμΌλ©° implementsλ‘ μ°κ²°ν νμν΄λμ€λ₯Ό ν΅ν΄ μΆμλ©μλλ₯Ό ꡬννλ€. λ°λ©΄μ μ΅λͺ ν΄λμ€λ μΈν°νμ΄μ€λ₯Ό ꡬννλ νμν΄λμ€ κΈ°λ₯μ νλ©°, νμν΄λμ€ μμ΄ λ°λ‘ new ν€μλλ‘ μμ μ μμ±νκ³ λΈλ‘μ μ΄μ΄ μΆμλ©μλλ₯Ό ꡬννλ€. 맨 λ§μ§λ§μ λ°λμ μΈλ―Έμ½λ‘ μ λΆμΈλ€.
μΈν°νμ΄μ€λͺ λ³μλͺ = new μΈν°νμ΄μ€λͺ () {μΆμλ©μλ μ€λ²λΌμ΄λ©};
public interface Flyer { public abstract void takeOff(); }
takeOff() μΆμλ©μλλ₯Ό κ°μ§ Flyer μΈν°νμ΄μ€λ₯Ό λ§λ λ€.
public class Bird implements Flyer { @Override public void takeOff() { System.out.println("Bird.takeOff"); } }
μΈν°νμ΄μ€λ₯Ό ꡬννλ Bird ν΄λμ€λ₯Ό λ§λ€κ³ μΆμλ©μλλ₯Ό μ€λ²λΌμ΄λ©ν΄μ ꡬννλ€.
public class TestOuter4 { public static void main(String[] args) { //1. μΌλ°μ μΈ λ°©λ²==> μ΄λ¦μλ ν΄λμ€λ‘ μ²λ¦¬ Flyer b = new Bird(); b.takeOff(); //2. μ΅λͺ ν΄λμ€ Flyer b2 = new Flyer(){ @Override public void takeOff() { System.out.println("SuperMan.takeOff"); } }; //μΈλ―Έμ½λ‘ b2.takeOff(); Flyer b3 = new Flyer() { @Override public void takeOff() { System.out.println("Airplane.takeOff"); } }; b3.takeOff(); }//end main } --------- Bird.takeOff SuperMan.takeOff Airplane.takeOff
μΈν°νμ΄μ€λ κ°μ²΄μμ±μ΄ λΆκ°λ₯νμ§λ§ Flyer bλ‘ λ€νμ±μ μ΄μ©ν λ°μ΄ν° νμΌλ‘ μ¬μ©ν μ μλ€. μΈν°νμ΄μ€λ₯Ό ꡬνν Birdμ κ°μ²΄λ₯Ό μμ±νκ³ λ©μλλ₯Ό νΈμΆνλ κ²μ΄ μΌλ°μ μΈ λ°©λ²μ΄λ€. μ΅λͺ ν΄λμ€λ ν΄λμ€ μ΄λ¦μ΄ μμΌλ©° μΈν°νμ΄μ€λ₯Ό κ°μ²΄μμ±νλ― μμ±νκ³ λΈλ‘μ μ΄μ΄ μ§μ λ©μλλ₯Ό ꡬννκ³ μΈλ―Έμ½λ‘ μΌλ‘ λ§λ¬΄λ¦¬νλ€.
comparator μΈν°νμ΄μ€λ₯Ό νμ©ν λ°°μ΄ μ λ ¬
λ°°μ΄μ μ μ₯λ ν΄λμ€μ νΉμ λ³μκ°μΌλ‘ λ°°μ΄μ μ λ ¬νκ³ μΆμ λ μλ°μμ μ 곡νλ APIμΈ java.util.Comparator μΈν°νμ΄μ€λ₯Ό μ¬μ©ν μ μλ€.
import java.util.Arrays; import java.util.Comparator; class Person { String name; int age; public Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return name + " " + age; } }//end Person class PersonComp implements Comparator<Person>{ @Override public int compare(Person o1, Person o2) { int result = 1; if(o1.age >= o2.age) result = -1; return result; } } public class Ex07_8 { public static void main(String[] args) { Person p = new Person("νκΈΈλ", 20); Person p2 = new Person("μ΄μμ ", 44); Person p3 = new Person("μ κ΄μ", 18); Person p4 = new Person("κ°κ°μ°¬", 66); Person [] ps = {p, p2, p3, p4}; //ageλ‘ μ λ ¬ Arrays.sort(ps, new PersonComp()); for(Person person : ps) { System.out.println(person); } } }
μ΄λ¦κ³Ό λμ΄ μ 보λ₯Ό μ μ₯ν Person ν΄λμ€λ₯Ό λ°°μ΄μ λ£κ³ λμ΄λ₯Ό κΈ°μ€μΌλ‘ λ°°μ΄μ μ λ ¬νλ€. comparatorμΈν°νμ΄μ€λ₯Ό μ¬μ©νκΈ° μν μΌλ°ν΄λμ€ PersonCompλ₯Ό λ§λ€κ³ compare λ©μλλ₯Ό μ€λ²λΌμ΄λ©νλ€. resultκ° μμκ°μ 리ν΄νλ©΄ λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ©°, μμκ°μ΄λ 0μ 리ν΄νλ©΄ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ€. λ©μΈν¨μ μμμ Arrays.sort()λ©μλλ₯Ό μ€νν΄ λ°°μ΄μ μ λ ¬νκ³ λ°νν μ μλ€.
π NEXT : μλ° ν΅μ¬ν΄λμ€ κ³΅λΆνκΈ°
λ°μν'JAVA' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
JAVA μλ° μ λ€λ¦ (Generic) (0) 2020.08.11 JAVA μλ° μμΈμ²λ¦¬, throws, μ¬μ©μμ μ μμΈν΄λμ€ (2) 2020.08.10 JAVA μλ° μΈν°νμ΄μ€, λ컀νλ§ (0) 2020.08.08 JAVA μλ° μΆμν΄λμ€ abstract (0) 2020.08.07 JAVA μλ° μ€λ²λΌμ΄λ©, λ€νμ± (0) 2020.08.06