-
익명클래스는 이름 그대로 이름이 없는 클래스입니다.
사용하는 이유에 대해서 알려드리자면 부모 클래스를 사용하는 자식이 1회성에 그치거나 혹은 너무 무분별한 자식이 생길 경우
이를 익명 클래스를 이용해서 Override하여 사용할 수 있습니다.
예를 들어보겠습니다.
이런 부모 클래스가 있습니다.
이 메서드를 재활용하기 위해서는 일반적으로는 Person을 상속받는 자식 클래스를 만들고 거기에 구현부를 Override해서 작성해야합니다.
public class Person { public void whoAmI() { System.out.println("나는 사람이다."); } }
public class Child extends Person { @Override public void whoAmI() { System.out.println("나는 자식이다"); } }
그러나 자식이 한명도 아니고 여러명이고 1회성에 그칠경우 이를 익명 클래스를 통해서 구현할 수 있습니다.
@Test void anonymousExample() { Person p = new Person() { String name="잘생긴"; @Override public void whoAmI() { System.out.println("나는 "+name+" 자식입니다."); } }; p.whoAmI(); }
그리고 이는 파라미터로도 전달할 수 있습니다.
@Test void anonymousExample() { walk(new Person() { String name="잘생긴"; @Override public void whoAmI() { System.out.println("나는 "+name+" 자식입니다."); } }); } void walk(Person person) { person.whoAmI(); System.out.println("길을 걷고 있습니다"); }
또한 이는 인터페이스를 통해서도 가능합니다.
public interface Order { public void Buy(); public void Cancel(); }
@Test void anomousInterface() { Order a = new Order() { String name = "카페"; @Override public void Buy() { System.out.println(name+"에서 구매하였습니다."); } @Override public void Cancel() { System.out.println(name+"에서 취소하였습니다."); } }; a.Buy(); }
그러나 익명클래스 내부에 생성죈 메서드나 필드는 익명 클래스 밖에서 접근할 수 없습니다.
이유는 당연히 부모클래스의 인스턴스이므로 부모클래스에 있는 내용이 아니기 때문에 접근을 할 수 없습니다.
@Test void anonymousError() { Person a = new Person() { String name="잘생긴"; public void error() { System.out.println("에러입니다."); } }; a.error(); // 컴파일 에러 }
'개발 > java' 카테고리의 다른 글
map vs flatmap (0) 2022.01.04 익명클래스 실용편 (0) 2022.01.01 stream vs parallelStream (0) 2021.12.30 초기화블록 (0) 2021.12.25 Builder 패턴 활용기 (0) 2021.12.25