쓰레드를 공부하다가 문득 의문점이 들었다. 쓰레드를 생성하는 방법에는 두가지가 있다고 한다.
1. Thread 클래스를 상속받는다.
2. Runnable 인터페이스를 구현하고, Thread 객체를 생성할때 매개값으로 넣어준다.
단순히 Thread를 상속하거나, Runnable을 구현하는 클래스를 만들어도 되겠지만, 아주 작은기능을 하는 클래스라면 클래스를 생성하는것이 프로젝트 전체 구조를 파악하는데에 걸림돌이 될 수 있다. 그래서 익명클래스 익명 객체를 많이 사용한다고 한다. 그렇다면 익명클래스는 무엇인가?
익명클래스란 이름이 없는 클래스라는 뜻으로, 우리가 클래스를 생성하지 않고, 어떤 코드 흐름속에서 가벼운 객체를 만들어서 사용하는 것이라고 할 수 있다. 예시를 보자.
Test 클래스가 있다고 생각하고, 그 클래스에 num 과 getNum 메소드가 있었다고 가정하자.
위의 코드에서, 평소에 우리가 객체를 선언하던 방식과는 다르게 new Test() 뒤에 블록이 있고 거기에 코드가 구현되어 있다.
언뜻보면 Test라는 클래스의 이름을 가지고 있는 클래스 또는 객체처럼 보이겠지만, 사실은 Test를 상속받은, 이름없는 클래스를 구현하고 있는것이며, 그 클래스를 객체화해서 t1에 넣는 것 이다.
상속의 개념으로 살펴보면, 익명클래스에서 어떠한 다른 변수나, 메소드를 선언 하더라도 t1에서는 원래 Test에 있던 변수나 메소드밖에 사용할 수 없다.
인터페이스의 입장에서도 마찬가지이다. Runnable 인터페이스로 예를 들어보자.
우리는 인터페이스는 객체생성이 안된다고 알고있다. 그러나 위의 코드에서는 마치 Runnable 인터페이스로 객체를 생성 한 것 처럼 보인다.
그러나 진짜 의미는 Runnable을 구현하고있는 익명 클래스가 만들어 진 것이고, 그 익명클래스로 객체를 생성 한 것 이다.
익명클래스에 대해 간단하게 알아보았다. 어렵지는 않으나 잘 안와닿던 개념이었는데 글로 정리하고 나니 확실히 개념이 잡혔다.
'Advanced java' 카테고리의 다른 글
Java Thread API (0) | 2017.02.10 |
---|