일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 금융권 it
- prefixsum #C언어
- 금융권 부트캠프
- kb it's your life 6기
- autohotkey
- 오토핫키
- 금융권it
- KB국민은행
- kb 기자단
- 취업교육
- 반별이벤트
- 첫알고리즘평가
- SQLD
- kb it's your life 기자단
- SQL데이터타입
- sql내장함수
- kbit교육
- 이차원배열
- 전문가특강
- kb it's your life
- 알고리즘
- 부트캠프
- sql
- kb네트워킹캠프
- kb취업교육
- 멀티캠퍼스
- kb 취업교육
- Today
- Total
지식보부상님의 공부 일지
Java [09] 중첩 선언과 익명 객체 본문
[1] 중첩 클래스
◈ 중첩 클래스 (Nested Class)
- 클래스 내부에 선언한 클래스
- 클래스 멤버 쉽게 설명 가능, 외부엔 중첩 관계임을 감춰서 코드 복잡성 ↓
- 멤버 클래스: 클래스 멤버로서 선언되는 중첩 클래스
- 로컬 클래스: 메소드 내부에서 선언되는 중첩 클래스
[2] 인스턴스 멤버 클래스
◈ 인스턴스 멤버 클래스
[public] class A {
[public | private] class B { ... }
}
- 주로 클래스 A 내에서 사용되므로 private 접근자를 가짐
- 클래스 A가 생성 되어야, 클래스 B 접근 가능
- 클래스 B는 클래스 A 내의 static 클래스/메서드에서는 생성 불가
[3] 정적 멤버 클래스
◈ 정적 멤버 클래스
[public] class A {
[public | private] static class B { ... } // 주로 public
}
- A객체 생성 없이 A 클래스로 접근해서 B 객체 생성 가능
A.B b = new A.B();
[4] 로컬 클래스
◈ 로컬 클래스 (Local Class)
- 생성자 또는 메소드 내부에서 선언된 클래스
- 로컬 변수(생성자 또는 메소드의 매개변수 또는 내부에서 선언된 변수)를 로컬 클래스에서 사용할 경우 값을 읽을 수만 있고 수정 불가 (final 특성 가짐)
[5] 바깥 멤버 접근
◈ 바깥 클래스의 멤버 접근 제한
- 인스턴스 멤버 클래스: 바깥 클래스의 모든 필드, 메소드 사용 가능
- 정적 멤버 클래스: 바깥 클래스의 정적 필드, 정적 메소드 사용 가능
◈ 바깥 클래스의 객체 접근
- 중첩 클래스 내부에서 바깥 클래스 객체 얻으려면 바깥클래스이름.this 로 접근
- 바깥클래스이름.this.메소드명, 바깥클래스이름.this.필드명
[6] 중첩 인터페이스
◈ 중첩 인터페이스
- 클래스의 멤버로 선언된 인터페이스 (해당 클래스와 긴밀한 관계 맺기 위함)
class A {
[public | private] [static] interface B { ... }
}
- 주로 안드로이드 같은 UI 프로그램에서 이벤트 처리할 목적으로 사용
Button.java
package ch09.sec06.exam03;
public class Button {
// 정적 멤버 인터페이스
public static interface ClickListener {
// 추상 메소드
void onClick();
}
// 필드
private ClickListener clickListener;
// 메소드
public void setClickListener(ClickListener clickListener) {
this.clickListener = clickListener;
}
// 버튼 클릭됐을 때 실행 메소드
public void click() {
this.clickListener.onClick();
}
}
ButtonMain.java
public class ButtonMain {
public static void main(String[] args) {
// Ok 버튼 객체 생성
Button btnOk = new Button();
//Ok 버튼 클릭 이벤트 처리할 ClickListener 구현 클래스
class OkListener implements Button.ClickListener {
@Override
public void onClick() {
System.out.println("Ok 버튼 클릭");
}
}
//Ok 버튼 객체에 ClickListener 구현 객체 주입
btnOk.setClickListener(new OkListener());
//Ok 버튼 클릭하기
btnOk.click();
//Cancel 버튼 객체 생성
Button btnCancel = new Button();
//Cancel 버튼 처리할 메소드
class CancelListener implements Button.ClickListener {
@Override
public void onClick() {
System.out.println("Cancel 버튼 클릭");
}
}
//Cancel 버튼에 ClickListener 구현 객체 주입
btnCancel.setClickListener(new CancelListener());
// Cancel 버튼 클릭
btnCancel.click();
}
}
[7] 익명 객체
◈ 익명 객체 (anonymous)
- 이름 없는 객체, 명시적으로 클래스 선언 x => 쉬운 객체 생성 가능
- 주로 필드값, 로컬 변수값, 매개변수값으로 사용
- 클래스 상속하거나 인터페이스 구현해야만 생성 가능
- 익명 자식 객체: 클래스 상속해서 만든 익명 객체
- 익명 구현 객체: 인터페이스 구현해서 만든 익명 객체
◈ 익명 자식 객체
- 부모 클래스 상속받아 생성되는 객체
new 부모생성자(매개값, ...) { ... }
Tire.java
public class Tire {
public void roll() {
System.out.println("타이어가 굴러갑니다.");
}
}
Car.java
public class Car {
private Tire tire1 = new Tire();
// 필드에 익명 자식 객체
private Tire tire2 = new Tire() {
@Override
public void roll() {
System.out.println("필드의 익명 자식 객체에서 구릅니다.");
}
};
public void run1() {
tire1.roll();
tire2.roll();
}
// 익명 자식이 로컬 변수로
public void run2() {
// 메소드 내 익명 자식 객체
Tire tire = new Tire() {
@Override
public void roll() {
System.out.println("메소드의 익명 자식 객체에서 구릅니다.");
}
};
tire.roll();
}
public void run3(Tire tire) {
tire.roll();
}
}
CarMain.java
public class CarMain {
public static void main(String[] args) {
Car car = new Car();
// 익명 자식 객체가 대입된 필드 사용
car.run1();
// 익명 자식 객체가 대입된 로컬변수 사용
car.run2();
car.run3(new Tire(){
@Override
public void roll() {
System.out.println("매개변수로 이용된 익명 자식이 구릅니다.");
}
});
}
}
실행 결과

'KB IT's Your Life > Java' 카테고리의 다른 글
Java 정리본 링크 정리 (2) | 2025.04.24 |
---|---|
Java [10] 라이브러리와 모듈 (0) | 2025.04.24 |
Java [08] 인터페이스 (0) | 2025.04.23 |
Java [07] 상속 (1) | 2025.04.22 |
Java [06] 클래스 (1) | 2025.04.22 |