Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
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 31
Archives
Today
Total
관리 메뉴

Everything has an expiration date

★ 125 - Java 중첩 클래스 : 익명 클래스(Annonymous class) 본문

[Java]/Program source (java)

★ 125 - Java 중첩 클래스 : 익명 클래스(Annonymous class)

Jelly-fish 2023. 9. 15. 16:54
/*==============================
  ■■■ 클래스 고급 ■■■
  - 중첩 클래스
================================*/

/*
★ (사용빈도가 높다...)
// 클래스명 : 나중에 쓰기 위해서
// 무명 클래스 : 한번 쓰고 버리는...
// 프로그램에서 일어나는 모든 상황들을 이벤트라고 표현.
// 화면 터치, 드래그 앤 드롭 ... 
// 무수히 많은 이벤트들에(터치, 화면 켜기...) 이름을 붙일 필요 x!


○ Annonymous 클래스(익명의 클래스 : 무명 클래스)

  - AWT 나 안드로이드 ★ 이벤트 처리 ★ 에서 일반적으로 사용
  - 상위 클래스 메소드를 하나 정도 재정의할 필요성이 있을 때 사용
     ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  - 클래스의 객체가 필요하면 또 다시 클래스를 생성해야 하는
    번거로움으로 인해 빈번하게 객체 생성이 필요할 경우
	익명의 클래스를 생성하여 처리할 수 있다.


○ 형식 및 구조


   new 상위 클래스의 생성자()
   {
		접근제어지시자 자료형 메소드()
		{
			...;
		}
   };				← check~!!! 세미콜론


*/


// (?) 다중상속이 안 되는데 어떻게 클래스는 Object 외의 다른 클래스를 상속받을 수 있는것인가...
//  → 상위 부모 클래스가 Object를 상속받기 때문에 가능한 일이다!
//	→ ★ Object 클래스는 조상 급의 클래스이다! 맨 최상위상위상위상위의 클래스!!
//
//     ex) class SuperTest extends Object
//         {
//				class SubClass extends SuperTest			
//				{
//					// 부모가 Object를 상속받았기 때문에 가능한 것!!
//				}
//			}
//
//

// Object가 존재하는 곳은 어디인가?

//		↓ (java.lang! = language(언어))
//
//〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
// import java.lang.Object;
//━━━━━━━━━━━━━━━━━━━━━
// import 구문을 명시하지 않더라도 
// import java.lang.*(all); 이 붙어있다!!
//─────────────────────

// 빨강색으로 표시되는 항목들은 (String, System) 모두 lang 패키지에 들어있는
// 클래스들이기 때문이다!!!
// import 하지 않은 이유는...
// ① java.lang 패키지에 들어있기 때문이고
// ② java.lang 패키지에 들어있는 클래스들은 자동으로 자바 소스에 삽입되기 때문에
// → 별도의 임포트 없이 사용할 수 있다.

// 결과적으로 Object 란 클래스는... 모든 클래스들의 조상이고,
// 모든 클래스들은 Object 클래스의 자손들이다.
// 모두 다 lang 패키지들은 별도의 임포트 구문 없이 사용할 수 있다.

// import.java.lang.*


class TestObj // extends Object (Java의 모든 클래스들은 Object를 상속받는다.)
{
	/*
	Object 의 멤버들~!!!
	...;

	public String toString()
	{
		...;		
	}

	...;
	*/

	/*
	@Override
	publiv String toString()
	{
		...;
	}
		*/
	
	// return 자료형이 Object(오브젝트 객체 타입)
	public Object getString()
	{
		/*
		Object ob = new Object();
		ob.xx();
		ob.yyy();
		ob.zzzz();

		return ob;
		 → 생성한 Object 인스턴스를 반환.
		*/	

		//return new Object();
		//           ---------- Object 형


		// {} → 특정한 기능을 수행하는 것으로 반환하겠다.
		// [뒤에 세미콜론]
		// return ob; 와 비슷한 형태
		// return new Object(){};

		// 객체 반환, 다시 정의하여 반환하게끔...
		// 설계도 안의 하나의 기능을 이름없이 재정의하여 반환한다.
		// → 익명의 클래스

	 //▶▶▶▶▶▶▶▶▶▶▶[아랫부분 전체가 다 ob]▶▶▶▶
		// ① Object의 인스턴스를 반환한다. 특정 기능을 포함한 채로!!!!
		return new Object()	
		{
			// ② 특정 메소드 재구성 → 재정의
			// Object 클래스(최상위 클래스) 내부의 원본 toString() 메소드를
			// 원하는 기능으로 재정의하고자 한다!
			
			// ↓ 메소드 재정의(Overriding)를 한 결과물
			@Override
			// 접근제어지시자 자료형 메소드()
			public String toString()
			{
				return "익명의 클래스...";	
			}
			
			// 『익명 중첩 클래스의 최종 의미』**************************
			// 이렇게 구성하면... Object 설계도를 통해 생성한 인스턴스의
			// toString() 메소드가 Oberriding 된 채로 return(반환)된다!
			// 즉, Object 객체 내부의 메소드를 이름 없이(익명: Annonymous)
			// 원하는 기능으로 재정의하여 반환하는 것이다!
			//***********************************************************
		};
	
	//▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶▶
	
	}


	



}

// import java.lang.*;

public class Test125	// extends Object
{
	/*
	Object 의 멤버들 상속~!!!
	*/

	public static void main(String[] args)
	{
		TestObj ob = new TestObj();

		

		// [내 생각...]=================================================
		// 이것은... Object 클래스 내의 실제 toString()이 반환하는
		// 오브젝트 문자열 값일 것 같다...
		// Returns a string representation of the object.
		// 객체의 문자열 표현을 반환합니다.

		System.out.println(ob.toString());
		//--==>> TestObj@15db9742

	
		// [내 생각...]=================================================
		// 이것은... 리턴 값 (Object 생성자) 를 통해서
		// getString() 에 접근하여 메소드의 기능을 재정의(Overriding)한
		// 결과물일 것이다. (익명의 중첩 클래스)

		System.out.println(ob.getString());
		//--==>> 익명의 클래스...

	}
}