Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- Mongoose
- 객체
- MongoDB
- 참조에 의한 객체 복사
- JSON.parse
- 구조 분해 할당
- JSON.stringify
- JavaScript
- 카카오 소셜로그인
- 캐러셀
- 카카오로그인
- 로그스태시
- javacript
- 화살표 함수
- context switch
- TypeScript
- nodemailer
- Map
- 이메일 전송
- 위크셋
- logstash
- 위크맵
- react-slick
- nest
- nextjs
- 중첩 구조 분해
- DB
- nestjs
- 자바스크립트
- AGGREGATE
Archives
- Today
- Total
뚜sh뚜sh
내부 클래스와 익명 클래스 본문
내부 클래스
- 개념 : 클래스 안에 클래스를 정의한 것
- 내부 클래스는 외부 클래스의 모든 자원 사용 가능
형식
- 기본 형식
class 클래스명 {
class 내부클래스명 {
// 멤버 변수, 메소드, 생성
}
}
특징
1. new로 생성
2. 내부 클래스는 외부 클래스의 모든 자원 사용
3. 외부 클래스를 통해 내부 클래스 사용
4. 선언에 따라 인스턴스 내부 클래스, 정적 내부 클래스, 지역 내부 클래스로 나눌 수 있다
사용 방법
1. 외부 클래스에서 new를 통해 내부 클래스를 생성하고 메소드를 호출하는 예
package test1;
public class test1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
OutClass OutTest1 = new OutClass();
OutTest1.Inner.Print();
}
}
class OutClass {
int nVar1 = 3;
class InnerClass {
void Print() {
System.out.println("OutClass nVar1 : " + nVar1);
}
}
InnerClass Inner = new InnerClass();
}
2. 외부에서 내부 클래스를 생성하여 호출하는 예 => 드물게 사용
package test1;
public class test1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
OutClass OutTest1 = new OutClass();
OutClass.InnerClass InnerTest1 = OutTest1.new InnerClass();
InnerTest1.Print();
}
}
class OutClass {
int nVar1 = 3;
class InnerClass {
void Print() {
System.out.println("OutClass nVar1 : " + nVar1);
}
}
}
3. 정적 내부 클래스의 사용 예
package test1;
public class test1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
OutClass.InnerClass.Print();
}
}
class OutClass {
static int nVar1 = 3;
static class InnerClass {
static void Print() {
System.out.println("static inner class");
System.out.println("out class static nVar1 : " + nVar1);
}
}
}
4. 외부 클래스 메소드에서 내부 클래스를 사용하는 예(지역 클래스)
package test1;
public class test1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
OutClass OutTest1 = new OutClass();
OutTest1.Print();
}
}
class OutClass {
int nVar1 = 3;
class InnerClass {
void Print() {
System.out.println("out class nVar1 : " + nVar1);
}
}
void Print() {
InnerClass Inner = new InnerClass();
Inner.Print();
}
}
익명 클래스
- 개념
1. 클래스명이 없는 클래스를 말함
- 일반 내부 클래스 : 외부클래스명$내부클래스명.class로 저장
- 익명 클래스 : 외부클래스명$1.class로 파일로 존재
2. 선언과 생성이 동시에 이뤄진다
3. 일회성
4. 안드로이드 프로그래밍에서 익명 클래스 형식을 많이 사용한다
- 형식
클래스명 클래스변수 = new 클래스명() {
멤버 변수와 메소드들 선언
};
인터페이스명 인터페이스변수 = new 인터페이스명() {
변수와 메소드들 선언
};
- 사용 예
1. 인터페이스를 상속한 클래스 사용의 일반적인 형식
package test1;
public class test1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
InterfaceClass Test1 = new InterfaceClass();
Test1.Print(); // 일반적인 클래스 호출
A Test2 = new A();
Test2.Print(); // 일반적인 클래스 호출
}
}
interface Testable {
public void Print();
}
class InterfaceClass implements Testable {
public void Print() {
System.out.println("HI!");
}
}
class A {
public void Print() {
System.out.println("GOOD!");
}
}
2. 인터페이스를 상속한 익명 클래스 이용 형식
package test1;
public class test1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
InterfaceClass Test1 = new InterfaceClass();
Test1.Print(); // 일반적인 클래스 호출
A Test2 = new A();
Test2.Print(); // 일반적인 클래스 호출
InterfaceClass Test3 = new InterfaceClass() {
public void Print() {
System.out.println("Anonymous interface test3");
}
};
Test3.Print();
A Test4 = new A() { // 익명 클래스
public void Print() {
System.out.println("Anonymous interface test4");
}
};
Test4.Print();
Testable Test6 = new Testable() {
public void Print() {
System.out.println("Anonymous interface test6");
}
};
Test6.Print();
}
}
interface Testable {
public void Print();
}
class InterfaceClass implements Testable {
public void Print() {
System.out.println("HI!");
}
}
class A {
public void Print() {
System.out.println("GOOD!");
}
}
3. 익명 클래스를 메소드의 매개변수로 사용하는 예
package test1;
public class test1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
ClassB Test1 = new ClassB();
Test1.SetClass(new ClassA());
Test1.SetClass(new ClassA() {
public void Print() {
System.out.print("Good!!");
}
});
}
}
interface Testable {
public void Print();
}
class ClassA implements Testable {
public void Print() {
System.out.println("HI!");
}
}
class ClassB {
void SetClass(ClassA ObjectA) {
ObjectA.Print();
}
}
'Language > Java' 카테고리의 다른 글
컬렉션 클래스 (0) | 2023.07.06 |
---|---|
유용한 클래스들 (0) | 2023.07.05 |
예외 처리 (0) | 2023.07.03 |
인터페이스(interface) (0) | 2023.07.03 |
추상 클래스(abstract class) (0) | 2023.07.03 |
Comments