-
[JAVA] 추상클래스, 익명자식객체생성, 클로져개발 강의 정리/JAVA 2021. 6. 23. 14:11
1. instance of 연산자
-상속관계를 전제로 하는 연산자
-이항 연산자
-참조타입에 대해서만 가능
boolean result =좌항(객체) instanceof 우항(타입)
부모타입에 자식객체가 들어있는지 확인하는 것! 그래야 강제 형변환 가능!
즉, Parent parent = new Child(); 인지 확인하는 것이다.
만약 Parent parent = new Parent(); 이면 부모타입에 부모객체가 들어가있는 것이므로 자식 타입으로 강제 형변환이 불가하다!2.추상 클래스
-추상클래스에는 인터페이스에서 제공하는 메소드(ex. abstract)를 하나라도 가지고 있다면 무조건 추상! 클래스가 된다.
-추상메서드가 없어도 클래스 선언부에 abstract 키워드를 붙이면 추상 클래스가 된다!
-new 연산자로 객체를 생성할 수 없다.
abstract를 왜 만드느냐?
무조건 구현하게 하기 위해!
부모클래스가 추상 메서드를 선언한다면 자식 클래스는 구현하지 않고는 자동으로 추상클래스가 된다.
추상클래스를 extends 받는 클래스를 Concrete 클래스(실체클래스)라고 한다!
추상메서드의 선언부에 접근제한자를 생략해도 public 이 된다!
3. 익명자식객체 코딩 기법
여기서 "익명"이란?
'이름이 없다'라는 뜻이 아니고 '이름을 알 수 없다'라는 의미다.
이름이 분명히 있기는 한데 그 이름을 알 수가 없다는 뜻이다.
이 코딩 기법은 자바소스파일로 자식타입의 클래스를 만들지 않고 , 바로 자식객체를 만들어내는 것으로
주로 안드로이드 앱을 만들때 상당히 많이 쓰며 웹에서 또한 자주 사용한다.(ex. 스프링 등)
UI의 각종 버튼을 클릭시 무언가 기능을 수행하는 코드를 만들어 낼 때 사용한다.
왜 사용하는가?
만약 메소드 하나를 구현하는 자식클래스가 있다고 하자. 단지 메소드 하나를 위해 자식 클래스를 만드는 것은 소스파일 낭비이다. 어떻게 하면 소스 파일을 만들지 않고도 자식객체를 만들 수 있을까? 해서 나온 것이 익명자식객체 생성이다.
<문법>
익명 자식 객체 코딩기법의 전제는 "상속"이다.
Lvalue :부모타입의 참조변수
Rvalue : new 부모타입명(생성자 매개변수에 전달할 인자들)
{};
클래스타입 참조변수명 = new 클래스타입( 생성자 매개변수 ) {
필드도 선언 할 수 있다.
생성자는 클래스 이름을 알 수 없기 때문에 생성 불가
만약 오버라이딩 해야할 메서드가 있다면 여기서 오버라이딩
새로운 메서드를 선언해도 된다.
(단, 익명자식객체에서 선언한 메소드와 필드는 지역적으로만 사용된다.)
이 블럭 안에서만 호출 가능하다.
}; //이 블럭은 클래스파일에서 클래스 블록과 같다.이렇게 사용하면 자바 컴파일러가 대신 .class 파일을 생성한다.
*대전제* (클래스 없이는 객체 생성 불가)를 지키며 new연산자를 사용하는 것이다.
언제 사용하는가?
자식클래스의 코드가 간단할때 적합
4. Closure
: 익명 자식객체 생성시 발생하는 현상으로 변수의 유효범위가 지나 이미 파괴된 (지역)변수를 변수의 유효범위가 다른 참조타입에서 계속 갖고 있는 현상을 클로져 현상이라고 한다.
이 현상을 해결하기 위해 자바 컴파일러가 자동으로 지역변수 앞에 final 키워드를 붙인다. final 키워드를 붙이면 지역변수가 스택이 아닌 메소드 영역에 저장된다. 즉, clazz 객체 안으로 집어 넣는 것이다.
'개발 강의 정리 > JAVA' 카테고리의 다른 글
[JAVA] 예외처리 (0) 2021.06.28 [JAVA] 인터페이스 (0) 2021.06.24 [JAVA] enum, extends, overriding (0) 2021.06.22 [JAVA] 자바 총정리 (0) 2021.06.21 [JAVA 백준 알고리즘] 4673번 셀프 넘버(Self Number) (0) 2021.05.27