ID_DI
DI's study notes
ID_DI
전체 방문자
오늘
어제
  • 분류 전체보기 (85)
    • Deep-Learning (3)
      • CNN (2)
      • NLP (1)
    • Data_Python (6)
      • Numpy (0)
      • Matplotlib (4)
    • Python (8)
      • Python Algorithm (6)
    • Java (36)
      • Java(base) (33)
      • Java practice(base) (2)
    • Git (12)
    • Algorithm (7)
    • etc (7)
    • linux (1)
    • DeskSetup (0)
    • TIL_모각코 (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 정렬
  • git add.
  • java 기초
  • README.md
  • Python
  • matplotlib
  • git
  • 커밋
  • staged
  • java base
  • binarySearch
  • java.lang
  • 파이썬
  • 자바
  • java
  • java.net
  • Github
  • 알고리즘
  • 합병정렬
  • string to int

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
ID_DI

DI's study notes

[Java] 내부 클래스 Inner class , 익명 클래스 Anonymous Inner class
Java/Java(base)

[Java] 내부 클래스 Inner class , 익명 클래스 Anonymous Inner class

2021. 12. 1. 21:30

내부 클래스(Inner class)

  • 클래스 내부에 클래스를 선언하여 외부 클래스의 필드에 쉽게 접근하기 위해서 사용한다.

  • 다른 곳에서 볼 때에는 그 내부에 있는 클래스는 숨겨진 것처럼 보이게 된다.

  • 내부 클래스의 필드를 사용(객체화)하기 위해서는 외부클래스의 객체에서 내부클래스를 객체화해야한다.

    • 외부클래스의 필드에서는 자신이랑 같이 올라와 있는 내부클래스를 바로 객체화 할 수 있다.
외부클래스명 객체명 = new 외부클래스 생성자();
외부클래스명.내부클래스명 객체명 = 외부클래스객체.new 내부클래스 생성자();

굉장히 복잡하므로, 객체를 직접 만들지 말라는 뜻이다.(드물게 사용)

Ex) 내부클래스 사용 예

일반클래스 상속

public class InnerTest {
    public static void main(String[] args) {
        B obj = new B();
        obj.f();
    }
}

class A{
    int data;
}

class B extends A{
    void f() {
        System.out.println(this.data);
    }
}

내부클래스 사용

public class InnerTest {
    public static void main(String[] args) {
        Out out = new Out();
        Out.In in = out.new In();
        in.f();

    }
}
class Out{
    int data;

    class In{
        void f() {
            System.out.println(data);
        }
    }
}
내부 클래스 사용 이유
  • 상속처럼 사용
    • 외부클래스의 필드를 마치 내것처럼 접근하여 사용하기 위함
  • 캡슐화
    • 외부 클래스가 없다면 내부 클래스도 존재할 수 없기 때문에 다른 클래스에서 접근하지 못하도록 내부 클래스를 숨기기위해 사용
사용하는 상황의 Ex:

A 클래스에서 b()라는 작업(메소드)이 자주 쓰이고 이 작업이 B 클래스를 만들어야 쉽게 관리할 수 있다.

다른 클래스에서는 b() 가 필요없거나 A 클래스를 외부에 노출시키고 싶지 않을 때 내부 클래스를 사용한다.

  • 내부 클래스는 GUI(Graphic User Interface) 개발 시 많이 사용
    • a 버튼 눌러야 b버튼이 생성되게 만들고 싶다면 클래스를 별도로만들지 않고 내부클래스를 만들어 구현하는 것이 적합

익명클래스(Anonymous inner class)

  • 이름이 없는 클래스
  • 단 하나의 객체를 위한 클래스 (일회용)
클래스명 객체명 = new 생성자(){
    //익명의 클래스
    @Override
    void 메소드(){}
};
  • 익명클래스는 앞에 있는 생성자의 클래스를 상속받고 있는 이름 없는 자식 클래스이다.
  • 익명 자식 클래스는 부모클래스의 메소드를 오버라이딩할 수 있고, 업캐스팅 되기 때문에 자식 클래스의 새로운 메소드는 사용할 수 없다.
    • 다운캐스팅은 불가능(이름이 없음)

'Java > Java(base)' 카테고리의 다른 글

[Java] Java API(Application Programming Interface)  (0) 2021.12.01
[Java] 예외처리 try-catch-finally / throw throws 차이점 및 예제  (0) 2021.12.01
[Java] 인터페이스 interface, 다중 상속, 마크 인터페이스  (0) 2021.12.01
[Java] 추상클래스 abstract class, final  (0) 2021.12.01
[Java]접근 권한 제어자 public, private, protected, default / getter, setter  (0) 2021.11.30
    'Java/Java(base)' 카테고리의 다른 글
    • [Java] Java API(Application Programming Interface)
    • [Java] 예외처리 try-catch-finally / throw throws 차이점 및 예제
    • [Java] 인터페이스 interface, 다중 상속, 마크 인터페이스
    • [Java] 추상클래스 abstract class, final
    ID_DI
    ID_DI
    Computer Vision

    티스토리툴바