마케팅스프린트
[ GitHub ]

[ jungyijun@naver.com ]


  • Category
    • 마케팅 자동화
    • old posting
      • ChatGPT
      • Java
      • MySQL
      • JSP
      • Spring Framework
      • Node.js
Total
Today
Yesterday
hELLO · Designed By 정상우.
old posting/Java

[Java] 시간복잡도와 공간복잡도 그리고 내부클래스, 중첩클래스, 익명클래스

2021. 3. 2. 19:28

알고리즘의 성능, 프로그램의 성능을 가늠하는 대표적인 두가지 척도

1. 시간복잡도(Time Complexity) : 얼마나 시간이 많이 걸리는지

2. 공간복잡도(Space Complexity) : 얼마나 많은 메모리를 소모하는지

 

#-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

내부 클래스(Inner Class)

1. 멤버 내부 클래스(Member inner class) : 다른 클래스 내부에서 선언된 클래스

* 멤버 내부 클래스의 인스턴스 생성

ex) [외부클래스이름].[멤버내부클래스이름] 참조변수 = [외부클래스인스턴스].new 내부클래스생성자();

 

2. static 내부 클래스(Static inner class) : 다른 클래스의 내부에서 static으로 선언된 클래스

3. 지역 클래스(Local class)

 1) 지역 내부 클래스(Local inner class) : 메소드 내부에서 선언된 클래스

 2) 익명 내부 클래스(Anonymous inner class) : 이름이 없는 local class

 

* 내부 클래스로 설계하는 상황

: 상속 관계로 묶을 수는 없지만, A라는 객체가 생성된 이후에 존재할 수 있는 B라는 객체가 있다고 한다면 B를 A의 멤버 내부 클래스로 선언한다.

 

중첩 클래스(Nested Class)

: 다른 클래스의 내부에서 멤버로 정의된 클래스인데 static 키워드가 사용된 내부 클래스(static inner class)

* nested(static) class는 외부 클래스의 인스턴스를 생성하지 않았기 때문에 (외부 클래스에서)static으로 선언된 변수와 메소드만 사용 가능하다.

* nested class는 외부 인스턴스에서 생성할 수 없다.

* 중첩 클래스의 인스턴스 생성

ex) [외부클래스이름].[내부클래스이름] 참조변수 = new [외부클래스이름].내부클래스생성자();

 

* static

: 클래스의 인스턴스가 생성되지 않아도 사용될 수 있는 멤버(변수, 메소드)에 사용 따라서,

  nested class는 외부 클래스의 인스턴스를 생성하지 않고, 내부 클래스의 인스턴스를 생성할 수 있다.

 

Local Inner Class : 블록({...}) 내부에서 정의된 클래스

1. 정의가 된 블록(메소드) 내부에서만 사용 가능 → 참조변수 선언, 인스턴스 생성

2. 접근 수식어(public, protected, private)는 쓸 수 없다.

3. 외부 클래스의 멤버 변수(private 포함)는 모두 사용 가능

4. effectively final인 지역변수나 매개변수만 사용 가능

* effectively final 변수

: final로 선언된 변수, 또는 한번 초기화가 된 이후로 값이 변경되지 않은 변수(Java 8에서 도입)

 

* 지역 클래스는 메소드 실행이 끝나면 정의가 자체가 사라지는 클래스이다. 메소드 내부에서  정의된 지역 클래스 타입을 리턴하는 메소드는 만들 수 없다.

   경우에 따라서, 지역 클래스의 정의된 메소드를 외부에서 직접 사용하고자 하는 경우에는 인터페이스 + 다형성을 이용한 방법을 사용해야한다.

1. 외부에서 사용하고 싶은 메소드를 선언한 인터페이스를 작성한다.

2. 메소드의 리턴 타입은 정의한 인터페이스 타입으로 정의한다.

3. 로컬 클래스는 인터페이스를 구현(implement)하도록 정의한다.

4. 로컬 클래스의 인스턴스를 생성하고 리턴해준다.

* InnerClass06, Person 참고

 

익명 내부 클래스(Anonymous inner class)

: 이름이 없는 local inner class, 이름이 없기 때문에 생성자를 만들 수가 없다. 클래스의 정의와 동시에 인스턴스를 생성한다.

 

람다 표현식(Lambda-expression)

: Java8부터 도입 된 더 간략화한 표현식이며, 추상메소드가 하나인 인터페이스 구현에 쓰인다. 즉 익명 클래스 사용

ex) (매개변수 리스트) -> 리턴값

       (매개변수 리스트) -> {...} 수행코드

 

* 세가지 방법으로 자유자재로 구현할 수 있어야한다.

1. 클래스 implements 인터페이스 + 오버라이딩

2. 익명클래스

3. 람다 표현식(Lambda expression)

저작자표시
'old posting/Java' 카테고리의 다른 글
  • [Java] 쓰레드(Thread)와 Thread Method 그리고 java.io
  • [Java] Set과 Map 그리고 iterator(반복자)
  • [Java] Generic 클래스와 Collection 그리고 List
  • [Java] Wrapper 클래스와 Auto-boxing 그리고 unboxing
마케팅스프린트
마케팅스프린트
쿠팡, 스마트스토어 자동화 솔루션

티스토리툴바