SlideShare a Scribd company logo
JAVA Inner Class
작성자 : 홍효상
이메일 : hyomee@naver.com
소스 : https://github.com/hyomee/JAVA_EDU
프로그램은 사람이 이해하는 코드를 작성.
느려도 꾸준하면 경기에서 이긴다.
Content
소스 : https://github.com/hyomee/JAVABASIC
9. Inner Class
1. Inner Class
2. 익명(Anonymous) Inner Class
3. Inner Interface
1. Inner Class
9. Inner Class
• Instance Member Inner Class, Static Member Inner Class, Local Inner Class가있다.
• Class Member 처럼 사용 하는 Instance Member Inner Class, Static Member Inner Class
• Method내부에서 한정적으로 사용 하는 Local Inner Class
“ Class 내부에 Class가 있는 Class”
9-1. Inner Class
종류
Instance Member Inner Class
Static Member Inner Class
Local Inner Class
Inner Interface : class 를 interface로 만든 것
익명(Anonymous) Class
2. Instance Member Inner Class
9. Inner Class
• 객체 내부에 있는 클래스로 Instance Member의 특성을 가지고 있다.
• 모든 접근 지정자를 사용 할 수 있으며 실제로는 Outer Class 이다. ( 클래스$이너클래스 )
9-1. Inner Class
01. 인스턴스화
Instance Member Inner Class
Instance Member Inner Class
① 클래스 생성
② 클래스.이너클래스 참조변수
= 클래스.new 이너클래스()
으로 생성
02. 이너 클래스 에서 외부 클래스 사용
① 외부클래스.this. 으로 외부 클래스의 멤버, 메서드 사용
- 하나의 파일 ( ,java )내부 이너클래서에서 외부 클래스를 호출 하는 경우
new 로 생성 할 필요 가 없다.
외부클래스명.this.멤버
외부클래스명.this.메서드
03. 이너 클래스 에서 이너 클래스 사용
① 동일 파일이 아니거나 동일 파일 내의 다른 이너 클래스를 사용 할 경우는 일반적인 클래스 생성
과 동일 하게 선언을 하여 사용 해야 한다.
2. Static Member Inner Class
9. Inner Class
• 객체 내부에 있는 클래스로 Static Member의 특성을 가지고 있다.
• 객체를 생성 하지 않고 바로 사용 한다.
• 정적 이너 클래스는 아우터 클래스의 정적 멤버, 메서드만 사용 가능 하다.
9-1. Inner Class
Static Member Inner Class
02. 인스턴스화
01. static 메서드, 멤버 사용
① 클래스 생성 없이 직접 사용
: 클래스.메서드
① 클래스 생성
② 클래스.이너클래스 참조변수
= new 클래스.이너클래스()
으로 생성
03. 이너 클래스 에서 이너클래스 및 외부 클래스 사용
① static inner class는 static 클래스 멤버, 메서드만 호출 할 수 있다.
static Member Inner Class
X
외부클래스명.static멤버
외부클래스명.static 메서드
3. Local Member Inner Class
9. Inner Class
• 메서드 내부에 선언 하는 클래스
• 메서드가 호출 될 때만 메모리에 생성되므로 static class로 사용 할 수 없다.
9-1. Inner Class
Local Member Inner Class
01. Local Inner Class 생성
① Method 내부에 생성 Local Inner Class
02. Local Inner Class 인스턴스화
① 외부 클래스 사용시 new 연산자로 생성 하여 사용
② Method 내부에 객체 생성 하여 사용
1. 익명(Anonymous) Class
9. Inner Class
• 프로그램에서일시적으로한번만사용되고버려지는객체를매번객체를만들어야하나?
• 확장성을고려해서객체를생성해야하는데…수정이편할까?
• 사용처:인스턴스변수,인스턴스메서드,인스턴스메소드의매개변수
“ 이름을 알 수 없는 객체로 한번만 사용하고 버려지는 객체 ”
9-2. 익명(Anonymous) Inner Class
사용하는 이유
• 클래스생성
• 인터페이스의구현
구현 하는 방법
01. 클래스생성
➢ 1.추상클래스생성 예제 : AnonymousAbstract.java
➢ 2. 추상클래스 구현 Class 생성
예제 : AnonymousAbstarctClass.java - 인스턴스 변수
익명(Anonymous) Class
• 클래스를정의하지않고필요할때이름없이즉시선언하고인스턴스화해서사용
• 객체안에만드는로컬클래스와동일하다
• new수식이올수있는곳어디든지사용가능하나생성자는정의할수없음
• 익명클래스내부에서외부의메소드내변수를참조할때는메소드의지역변수중
final로선언된변수만참조가능
-변수는Stack에있고객체는Heap에있음,즉Method실행이끝나고Stack는사라지지만
Heap에있는Method는사라지지않기때문
1. 익명(Anonymous) Class
9. Inner Class
9-2. 익명(Anonymous) Inner Class
➢ 2.추상클래스 구현 Class 생성
예제 : AnonymousAbstarctClass.java - 인스턴스 Method
예제 : AnonymousAbstarctClass.java - 인스턴스 메서드의 파라메터
➢ 3. 실행
➢ 2. 추상클래스 구현 Class 생성
예제 : AnonymousMain.java
파라메터로 객체 생성 하여 파라메터로 전달
예제 : AnonymousChild .java 참조
1. 익명(Anonymous) Class
9. Inner Class
9-2. 익명(Anonymous) Inner Class
02. 인터페이스의구현
➢ 1. 인터페이스구현
예제 : AnonymousInterface.java
➢ 2. 인터페이스구현체
예제 : AnonymousInterfaceClass.java
➢ 3. 실행
익명 객체 생성
람다 생성
1. Inner Interface
9. Inner Class
• 정적이너클래스만존재
• static 생략시자동으로추가됨
“ 정적(static) Inner Interface만 존재 ”
9-3. Inner Interface
Inner Interface
01. Interface Inner Class 생성
① Method 내부에 생성
- static 생략 하면 자동으로 추가 됨
02. 인스턴스화
① 클래스 생성
② 클래스.이너클래스 참조변수
= 클래스.new 이너클래스()
으로 생성
Interface Inner Class
03. 이너 클래스 에서 외부 클래스 사용
① 외부클래스.this. 으로 외부 클래스의 멤버, 메서드 사용
- 하나의 파일 ( ,java )내부 이너클래서에서 외부 클래스를 호출 하는 경우
new 로 생성 할 필요 가 없다.

More Related Content

What's hot

Python class
Python classPython class
Python class
Herren
 
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
정연 최
 
10 data nested_classes
10 data nested_classes10 data nested_classes
10 data nested_classes
정연 최
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
Yong Joon Moon
 
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
 [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
정연 최
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표재정 이
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdf
Ji Hoon Lee
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
Yong Joon Moon
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
handfoot
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
beom kyun choi
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입
Park Jonggun
 
Java(2/4)
Java(2/4)Java(2/4)
Java(2/4)
handfoot
 
주니어 개발자도 이해 할 수 있는 Go - Scope 편
주니어 개발자도 이해 할 수 있는 Go - Scope 편주니어 개발자도 이해 할 수 있는 Go - Scope 편
주니어 개발자도 이해 할 수 있는 Go - Scope 편
Darion Kim
 
주니어 개발자도 이해 할 수 있는 Go - Namespace 편
주니어 개발자도 이해 할 수 있는 Go - Namespace 편주니어 개발자도 이해 할 수 있는 Go - Namespace 편
주니어 개발자도 이해 할 수 있는 Go - Namespace 편
Darion Kim
 
9 object class
9 object class9 object class
9 object class웅식 전
 
Java script
Java scriptJava script
Java script
영남 허
 
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
Younghan Kim
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
Younghan Kim
 

What's hot (18)

Python class
Python classPython class
Python class
 
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
[새차원, 코틀린(Kotlin) 강좌] 7 classes and_inheritance
 
10 data nested_classes
10 data nested_classes10 data nested_classes
10 data nested_classes
 
파이썬 객체 클래스 이해하기
파이썬  객체 클래스 이해하기파이썬  객체 클래스 이해하기
파이썬 객체 클래스 이해하기
 
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
 [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields [새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
[새차원, 코틀린(Kotlin) 강좌] 9. Properties and Fields
 
The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표The c++ programming language 10장 클래스 발표
The c++ programming language 10장 클래스 발표
 
Java programming pdf
Java programming pdfJava programming pdf
Java programming pdf
 
파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403파이썬 Descriptor이해하기 20160403
파이썬 Descriptor이해하기 20160403
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입Start IoT with JavaScript - 7.프로토타입
Start IoT with JavaScript - 7.프로토타입
 
Java(2/4)
Java(2/4)Java(2/4)
Java(2/4)
 
주니어 개발자도 이해 할 수 있는 Go - Scope 편
주니어 개발자도 이해 할 수 있는 Go - Scope 편주니어 개발자도 이해 할 수 있는 Go - Scope 편
주니어 개발자도 이해 할 수 있는 Go - Scope 편
 
주니어 개발자도 이해 할 수 있는 Go - Namespace 편
주니어 개발자도 이해 할 수 있는 Go - Namespace 편주니어 개발자도 이해 할 수 있는 Go - Namespace 편
주니어 개발자도 이해 할 수 있는 Go - Namespace 편
 
9 object class
9 object class9 object class
9 object class
 
Java script
Java scriptJava script
Java script
 
Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개Ksug2015 - JPA1, JPA 소개
Ksug2015 - JPA1, JPA 소개
 
Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑Ksug2015 - JPA2, JPA 기초와매핑
Ksug2015 - JPA2, JPA 기초와매핑
 

More from Hong Hyo Sang

Javascript
JavascriptJavascript
Javascript
Hong Hyo Sang
 
Java_10 람다
Java_10 람다Java_10 람다
Java_10 람다
Hong Hyo Sang
 
Java_08 collection
Java_08 collectionJava_08 collection
Java_08 collection
Hong Hyo Sang
 
Java_07 제너릭 메서드
Java_07 제너릭 메서드Java_07 제너릭 메서드
Java_07 제너릭 메서드
Hong Hyo Sang
 
Java_03 연산자
Java_03 연산자Java_03 연산자
Java_03 연산자
Hong Hyo Sang
 
Java_06 상속
Java_06 상속Java_06 상속
Java_06 상속
Hong Hyo Sang
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
Hong Hyo Sang
 
Java_04 제어
Java_04 제어Java_04 제어
Java_04 제어
Hong Hyo Sang
 
Java_02 변수자료형
Java_02 변수자료형Java_02 변수자료형
Java_02 변수자료형
Hong Hyo Sang
 
Java_01 기초
Java_01 기초Java_01 기초
Java_01 기초
Hong Hyo Sang
 
Java 이해하기 쉬운 코드
Java 이해하기 쉬운 코드 Java 이해하기 쉬운 코드
Java 이해하기 쉬운 코드
Hong Hyo Sang
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
Hong Hyo Sang
 

More from Hong Hyo Sang (12)

Javascript
JavascriptJavascript
Javascript
 
Java_10 람다
Java_10 람다Java_10 람다
Java_10 람다
 
Java_08 collection
Java_08 collectionJava_08 collection
Java_08 collection
 
Java_07 제너릭 메서드
Java_07 제너릭 메서드Java_07 제너릭 메서드
Java_07 제너릭 메서드
 
Java_03 연산자
Java_03 연산자Java_03 연산자
Java_03 연산자
 
Java_06 상속
Java_06 상속Java_06 상속
Java_06 상속
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
 
Java_04 제어
Java_04 제어Java_04 제어
Java_04 제어
 
Java_02 변수자료형
Java_02 변수자료형Java_02 변수자료형
Java_02 변수자료형
 
Java_01 기초
Java_01 기초Java_01 기초
Java_01 기초
 
Java 이해하기 쉬운 코드
Java 이해하기 쉬운 코드 Java 이해하기 쉬운 코드
Java 이해하기 쉬운 코드
 
소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙소프트웨어 개선 그룹(Sig) 개발 원칙
소프트웨어 개선 그룹(Sig) 개발 원칙
 

Java_09 이너클래스

  • 1. JAVA Inner Class 작성자 : 홍효상 이메일 : hyomee@naver.com 소스 : https://github.com/hyomee/JAVA_EDU 프로그램은 사람이 이해하는 코드를 작성. 느려도 꾸준하면 경기에서 이긴다.
  • 2. Content 소스 : https://github.com/hyomee/JAVABASIC 9. Inner Class 1. Inner Class 2. 익명(Anonymous) Inner Class 3. Inner Interface
  • 3. 1. Inner Class 9. Inner Class • Instance Member Inner Class, Static Member Inner Class, Local Inner Class가있다. • Class Member 처럼 사용 하는 Instance Member Inner Class, Static Member Inner Class • Method내부에서 한정적으로 사용 하는 Local Inner Class “ Class 내부에 Class가 있는 Class” 9-1. Inner Class 종류 Instance Member Inner Class Static Member Inner Class Local Inner Class Inner Interface : class 를 interface로 만든 것 익명(Anonymous) Class
  • 4. 2. Instance Member Inner Class 9. Inner Class • 객체 내부에 있는 클래스로 Instance Member의 특성을 가지고 있다. • 모든 접근 지정자를 사용 할 수 있으며 실제로는 Outer Class 이다. ( 클래스$이너클래스 ) 9-1. Inner Class 01. 인스턴스화 Instance Member Inner Class Instance Member Inner Class ① 클래스 생성 ② 클래스.이너클래스 참조변수 = 클래스.new 이너클래스() 으로 생성 02. 이너 클래스 에서 외부 클래스 사용 ① 외부클래스.this. 으로 외부 클래스의 멤버, 메서드 사용 - 하나의 파일 ( ,java )내부 이너클래서에서 외부 클래스를 호출 하는 경우 new 로 생성 할 필요 가 없다. 외부클래스명.this.멤버 외부클래스명.this.메서드 03. 이너 클래스 에서 이너 클래스 사용 ① 동일 파일이 아니거나 동일 파일 내의 다른 이너 클래스를 사용 할 경우는 일반적인 클래스 생성 과 동일 하게 선언을 하여 사용 해야 한다.
  • 5. 2. Static Member Inner Class 9. Inner Class • 객체 내부에 있는 클래스로 Static Member의 특성을 가지고 있다. • 객체를 생성 하지 않고 바로 사용 한다. • 정적 이너 클래스는 아우터 클래스의 정적 멤버, 메서드만 사용 가능 하다. 9-1. Inner Class Static Member Inner Class 02. 인스턴스화 01. static 메서드, 멤버 사용 ① 클래스 생성 없이 직접 사용 : 클래스.메서드 ① 클래스 생성 ② 클래스.이너클래스 참조변수 = new 클래스.이너클래스() 으로 생성 03. 이너 클래스 에서 이너클래스 및 외부 클래스 사용 ① static inner class는 static 클래스 멤버, 메서드만 호출 할 수 있다. static Member Inner Class X 외부클래스명.static멤버 외부클래스명.static 메서드
  • 6. 3. Local Member Inner Class 9. Inner Class • 메서드 내부에 선언 하는 클래스 • 메서드가 호출 될 때만 메모리에 생성되므로 static class로 사용 할 수 없다. 9-1. Inner Class Local Member Inner Class 01. Local Inner Class 생성 ① Method 내부에 생성 Local Inner Class 02. Local Inner Class 인스턴스화 ① 외부 클래스 사용시 new 연산자로 생성 하여 사용 ② Method 내부에 객체 생성 하여 사용
  • 7. 1. 익명(Anonymous) Class 9. Inner Class • 프로그램에서일시적으로한번만사용되고버려지는객체를매번객체를만들어야하나? • 확장성을고려해서객체를생성해야하는데…수정이편할까? • 사용처:인스턴스변수,인스턴스메서드,인스턴스메소드의매개변수 “ 이름을 알 수 없는 객체로 한번만 사용하고 버려지는 객체 ” 9-2. 익명(Anonymous) Inner Class 사용하는 이유 • 클래스생성 • 인터페이스의구현 구현 하는 방법 01. 클래스생성 ➢ 1.추상클래스생성 예제 : AnonymousAbstract.java ➢ 2. 추상클래스 구현 Class 생성 예제 : AnonymousAbstarctClass.java - 인스턴스 변수 익명(Anonymous) Class • 클래스를정의하지않고필요할때이름없이즉시선언하고인스턴스화해서사용 • 객체안에만드는로컬클래스와동일하다 • new수식이올수있는곳어디든지사용가능하나생성자는정의할수없음 • 익명클래스내부에서외부의메소드내변수를참조할때는메소드의지역변수중 final로선언된변수만참조가능 -변수는Stack에있고객체는Heap에있음,즉Method실행이끝나고Stack는사라지지만 Heap에있는Method는사라지지않기때문
  • 8. 1. 익명(Anonymous) Class 9. Inner Class 9-2. 익명(Anonymous) Inner Class ➢ 2.추상클래스 구현 Class 생성 예제 : AnonymousAbstarctClass.java - 인스턴스 Method 예제 : AnonymousAbstarctClass.java - 인스턴스 메서드의 파라메터 ➢ 3. 실행 ➢ 2. 추상클래스 구현 Class 생성 예제 : AnonymousMain.java 파라메터로 객체 생성 하여 파라메터로 전달 예제 : AnonymousChild .java 참조
  • 9. 1. 익명(Anonymous) Class 9. Inner Class 9-2. 익명(Anonymous) Inner Class 02. 인터페이스의구현 ➢ 1. 인터페이스구현 예제 : AnonymousInterface.java ➢ 2. 인터페이스구현체 예제 : AnonymousInterfaceClass.java ➢ 3. 실행 익명 객체 생성 람다 생성
  • 10. 1. Inner Interface 9. Inner Class • 정적이너클래스만존재 • static 생략시자동으로추가됨 “ 정적(static) Inner Interface만 존재 ” 9-3. Inner Interface Inner Interface 01. Interface Inner Class 생성 ① Method 내부에 생성 - static 생략 하면 자동으로 추가 됨 02. 인스턴스화 ① 클래스 생성 ② 클래스.이너클래스 참조변수 = 클래스.new 이너클래스() 으로 생성 Interface Inner Class 03. 이너 클래스 에서 외부 클래스 사용 ① 외부클래스.this. 으로 외부 클래스의 멤버, 메서드 사용 - 하나의 파일 ( ,java )내부 이너클래서에서 외부 클래스를 호출 하는 경우 new 로 생성 할 필요 가 없다.