자바 - 익명 클래스

안녕하세요, 미래의 자바 마법사 여러분! 오늘 우리는 자바의 익명 클래스 세계로 흥미로운 여정을 떠납니다. 프로그래밍 초보자라도 걱정하지 마세요; 이 개념을 단계별로 안내해드리고, 많은 예제와 설명을 제공하겠습니다. 그麼, 시작해보겠습니다!

Java - Anonymous Class

익명 클래스는 무엇인가요?

masquerade ball(마스querade ball)에서 모두가 마스크를 쓰고 있어서 누가 누구인지 알 수 없는 것을 상상해보세요. 자바의 익명 클래스는 그런 것과 비슷합니다 - 이름이 없는 클래스로, 코드의 마스크 뒤에 숨겨져 있습니다!

익명 클래스는 이름이 없는 특별한 종류의 내부 클래스로, new 키워드를 사용하여 선언하고 인스턴스화됩니다.

익명 클래스를 사용하는 이유는 무엇인가요?

  1. 일회성 사용에 적합합니다.
  2. 코드를 간결하게 유지하는 데 도움이 됩니다.
  3. 간단한 인터페이스를 구현하거나 클래스를 즉시 확장하는 데 완벽합니다.

익명 클래스 정의 방법

간단한 예제로 시작해보겠습니다:

interface Greeting {
void greet();
}

public class AnonymousClassDemo {
public static void main(String[] args) {
Greeting englishGreeting = new Greeting() {
@Override
public void greet() {
System.out.println("Hello, World!");
}
};

englishGreeting.greet();
}
}

이 예제에서 우리는 Greeting 인터페이스를 구현하는 익명 클래스를 만들었습니다. 이를 단계별로 설명해보겠습니다:

  1. 간단한 Greeting 인터페이스를 정의하고, greet() 메서드를 포함합니다.
  2. main 메서드에서 Greeting 인스턴스를 익명 클래스를 사용하여 생성합니다.
  3. 익명 클래스는 greet() 메서드의 구현을 제공합니다.
  4. englishGreeting 객체의 greet() 메서드를 호출합니다.

이 코드를 실행하면 콘솔에 "Hello, World!"가 출력됩니다.

자바에서의 익명 내부 클래스 유형

자바에서는 세 가지 주요 유형의 익명 내부 클래스가 있습니다:

  1. 클래스를 확장하는 익명 클래스
  2. 인터페이스를 구현하는 익명 클래스
  3. 메서드/생성자 인자 내부에서 정의되는 익명 클래스

각각의 예제를 살펴보겠습니다:

1. 클래스를 확장하는 익명 클래스

abstract class Animal {
abstract void makeSound();
}

public class AnonymousClassExtend {
public static void main(String[] args) {
Animal dog = new Animal() {
@Override
void makeSound() {
System.out.println("Woof! Woof!");
}
};

dog.makeSound();
}
}

이 예제에서 우리는 추상 Animal 클래스를 확장하는 익명 클래스를 만들고, makeSound() 메서드의 구현을 제공합니다.

2. 인터페이스를 구현하는 익명 클래스

우리는 이미 첫 번째 예제에서 이를 본 적이 있지만, 다른 예제를 더 보겠습니다:

interface Calculatable {
int calculate(int a, int b);
}

public class AnonymousClassImplement {
public static void main(String[] args) {
Calculatable adder = new Calculatable() {
@Override
public int calculate(int a, int b) {
return a + b;
}
};

System.out.println("5 + 3 = " + adder.calculate(5, 3));
}
}

이 익명 클래스는 Calculatable 인터페이스를 구현하고, 두 수를 더하는 calculate() 메서드의 구현을 제공합니다.

3. 메서드/생성자 인자 내부에서 정의되는 익명 클래스

public class AnonymousClassArgument {
public static void main(String[] args) {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Anonymous thread is running!");
}
});

t.start();
}
}

여기서 우리는 Runnable 인터페이스를 직접 Thread 생성자의 인자로 구현하는 익명 클래스를 만듭니다.

익명 클래스 사용 시기

익명 클래스는 다음과 같은 경우에 특히 유용합니다:

  1. 인터페이스를 구현하거나 클래스를 확장해야 하는 일회성 사용이 필요할 때.
  2. 구현이 매우 짧고 간단할 때.
  3. 간단한 연산을 수행하기 위해 별도의 이름이 있는 클래스를 생성하고 싶지 않을 때.

그러나 익명 클래스를 여러 번 재사용하게 되면, 이름이 있는 클래스를 생성하는 것이 더 나을 수 있습니다.

익명 클래스의 제한 사항

익명 클래스는 강력하지만, 몇 가지 제한 사항이 있습니다:

  1. 동시에 하나의 인터페이스를 구현하거나 하나의 클래스를 확장할 수만 있습니다.
  2. 정적 초기화자나 멤버 인터페이스를 가질 수 없습니다.
  3. 생성자가 없기 때문에 생성자를 가질 수 없습니다.

결론

자바의 익명 클래스는 코드 속의 비밀 요원과 같습니다 - 그들은 들어와서 임무를 수행하고, 이름을 남기지 않고 사라집니다. 그들은 빠르고 일회성 사용을 위한 클래스를 만드는 강력한 도구로, 코드를 더 간결하고 가독성 있게 만들 수 있습니다.

기억하세요, 어떤 프로그래밍 개념이든, 연습이 완벽을 이루는 열쇠입니다. 자신만의 익명 클래스를 만들어 다양한 사용 사례를 실험해보세요. 얼마 지나지 않아, 진정한 자바 ninja처럼 익명 클래스를 사용할 수 있을 것입니다!

행복하게 코딩하세요, 그리고 익명 클래스들이 항상 "Hello, World!"로 여러분을 환영하기를 바랍니다!

Credits: Image by storyset