ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.