inner class
클래스 안에 정의 할 수 있는 것은 생성자, 필드, 메소드, 클래스가 있다.
inner class 는 안드로이드 프로그래밍에서 많이 쓰이며 웹 프로그래밍에서는 자주 쓰이지 않는다.
inner class와 local inner class의 차이
inner class
class안에 정의된 class
local inner class
method 안에 정의된 class
anonymous class (익명 클래스)
-익명 클래스는 Inner class로, 이름이 없는 클래스를 말한다. 클래스 정의와 동시에 객체를 생성할 수 있다.
-Interface, Class 모두 익명 클래스로 객체를 만들 수 있다.
-익명 클래스를 사용하는 이유는 프로그램 내에서 한번만 객체로 만드는데 사용되는 클래스를 굳이 정의할 필요가 없기 때문다.
MainClass03, Zoo (inner class)
클래스 안에 생성자, 필드, 메소드 외에 클래스도 정의할 수 있다. 이것을 inner class(내부 클래스)라고 한다.
예시의 zoo class를 보면 zoo class 안에 Mokey class, Tiger class를 inner class로 정의하고 say 메소드를 작성했다. 또 그 객체(대상 inner class)를 return 해주는 getMonkey, getTiger 메소드를 작성했다.
MainClass03에서 zoo class 의 inner class인 Mokey class, Tiger class에 담긴 메소드를 실행하고자 한다. 이때 zoo 객체를 생성해주고 변수에 담은 뒤 미리 만들어둔 getMonkey, getTiger 메소드를 활용해서 원하는 객체를 리턴받을 수 있다. 끝으로 리턴받은 객체를 변수에 담아 say 메소드를 실행했다.
test.mypac.Zoo.Tiger 이렇게 경로를 맞춰 import 없이 작성할 수도 있다.
local inner class
inner class
class안에 정의된 class
local inner class
method 안에 정의된 class
inner class는 method 안에 작성되기도 한다. 예시의 class Gura는 main method 안에 작성되었다.
MainClass04 (local inner class)
static class Burn extends Weapon{}
static 예약어를 사용한 이유는 추후에 연결할 main() method가 static 메모리 영역에 있기 때문에 해당 이너 클래스도 static 메모리 영역에 올리기 위함이다.
Weapon w1=new Burn();
useWeapon(w1);
main method에서 inner class로 작성된 Burn 을 w1에 담아서 사용한 코드이다. Burn이 Weapon 을 상속(extends)받았기 때문에 w1이 Weapon type임에도 잘 작동한다.
class Missile extends Weapon{
@Override
public void attack() {
System.out.println("미사일로 공격해요!");
}
}
Missile이라는 local inner class를 작성했다. method 안에 작성했다는 뜻이다.
- Weapon w2=new Missile();
useWeapon(w2);
- useWeapon(new Missile());
이어 나오는 두 코드는 결과 값은 같다. 생성한 객체를 변수로 담아 재활용할 수 있는지 일회성으로 사용할지의 차이다.
MainClass05 (익명클래스)
-익명 클래스는 Inner class로, 이름이 없는 클래스를 말한다. 클래스 정의와 동시에 객체를 생성할 수 있다.
-Interface, Class 모두 익명 클래스로 객체를 만들 수 있다.
-익명 클래스를 사용하는 이유는 프로그램 내에서 한번만 객체로 만드는데 사용되는 클래스를 굳이 정의할 필요가 없기 때문다.
익명클래스는 간편하기 때문에 클래스의 이름, type으로 지정될 필요가 없을때 쓰인다.
Weapon w1=new Weapon() {}
해당 코드를 예시로 들자면 앞으로 익명클래스를 만들때는 new Weapon() 은 constructor call(생성자 호출), {}는 anonymous class (이름 없는 클래스)라고 생각하자.
익명클래스를 인자로 전달할때 굳이 변수를 만들지 않고 객체 생성 후 바로 참조값을 전달하는 형식도 있다.
익명클래스 형식은 직접 타이핑 할 필요 없이 해당 클래스를 ctrl+space를 누르면 anonymous class (익명 클래스) 형식이 자동 입력된다.
'java' 카테고리의 다른 글
Step10_Interface (메소드 표현식) (0) | 2022.07.29 |
---|---|
Step10_Interface(interface, final, 익명클래스) (0) | 2022.07.29 |
Step09_AbstractClass(abstract 사용 예시) (0) | 2022.07.29 |
Step09_AbstractClass(추상클래스, 추상메소드) (0) | 2022.07.29 |
eclipse로 git 사용하기2(gitignore) (0) | 2022.07.29 |