めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
μ½”λ”© 짐 πŸ’ͺ
めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
  • μΉ΄ν…Œκ³ λ¦¬ (135)
    • 개발 ν™˜κ²½ ꡬ좕 (12)
      • 개발 ν™˜κ²½ (5)
      • DB (0)
      • Node.js (4)
      • ν˜•μƒ 관리 (2)
      • Spring (1)
    • μ›Ή (11)
      • React (5)
      • 슀파λ₯΄νƒ€μ½”λ”©ν΄λŸ½__μ›Ή (6)
    • λͺ¨λ°”일 (2)
      • μ•ˆλ“œλ‘œμ΄λ“œ (2)
    • ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄ (55)
      • C (13)
      • Python (15)
      • SQL (5)
      • Java (22)
    • 사물인터넷 (11)
      • 아두이노 (11)
    • 일상 (31)
      • λ§›μ§‘ (13)
      • λž­ν‚Ήλ‹­μ»΄ (4)
      • ν›„κΈ° (11)
      • μš”λ¦¬ (3)
      • μž‘λ‹΄ (0)
    • ꡐ양 (4)
      • 심리학 (3)
      • ν…Œλ‹ˆμŠ€ (1)
    • 자격증 (9)
      • μ •λ³΄μ²˜λ¦¬κΈ°μ‚¬ (9)

λΈ”λ‘œκ·Έ 메뉴

  • πŸ’» github

인기 κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ

μ½”λ”© 짐 πŸ’ͺ

[Java] μžλ°” λ‚΄λΆ€ν΄λž˜μŠ€(쀑첩 클래슀) - μŠ€νƒœν‹±ν΄λž˜μŠ€&μΈμŠ€ν„΄μŠ€ν΄λž˜μŠ€&μ§€μ—­ν΄λž˜μŠ€&읡λͺ…ν΄λž˜μŠ€
ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Java

[Java] μžλ°” λ‚΄λΆ€ν΄λž˜μŠ€(쀑첩 클래슀) - μŠ€νƒœν‹±ν΄λž˜μŠ€&μΈμŠ€ν„΄μŠ€ν΄λž˜μŠ€&μ§€μ—­ν΄λž˜μŠ€&읡λͺ…ν΄λž˜μŠ€

2023. 2. 2. 01:15

[ 쀑첩 클래슀  / λ‚΄λΆ€ 클래슀]

더보기

- 클래슀λ₯Ό μ½”λ“œ 블둝 내뢀에 μ •μ˜ν•˜λŠ” ν˜•νƒœλ‘œμ„œ

   λ‹€λ₯Έ 클래슀의 λ©€λ²„λ‘œ μ •μ˜λ˜λŠ” κΈ°λŠ₯을 μ˜λ―Έν•¨

- S(μ™ΈλΆ€ν΄λž˜μŠ€)$Y(λ‚΄λΆ€ν΄λž˜μŠ€).class와 같은 ν˜•νƒœμ˜ 클래슀 νŒŒμΌμ„ 의미

  (μ™ΈλΆ€ν΄λž˜μŠ€ 클래슀 S 에 μ€‘μ²©λœ λ‚΄λΆ€ν΄λž˜μŠ€ Y 클래슀)

[κ·Έλ¦Ό 1] 쀑첩 클래슀 μ’…λ₯˜ / 쀑첩 μ΅œμƒμœ„ 클래슀(μŠ€νƒœν‹± 클래슀)

 

 

[ μŠ€νƒœν‹± 클래슀 (static class) ]

더보기

- static ν‚€μ›Œλ“œκ°€ 뢙은 λ‚΄λΆ€ 클래슀

- 일반 νŒ¨ν‚€μ§€ 멀버 ν΄λž˜μŠ€μ™€ μœ μ‚¬ν•˜λ‚˜ κ΅¬μ„±μ˜ νŽΈλ¦¬μ„±μ„ μœ„ν•΄

  λ‹€λ₯Έ ν΄λž˜μŠ€λ‚˜ μΈν„°νŽ˜μ΄μŠ€μ— ν¬ν•¨λ˜μ–΄ μžˆλŠ” ν˜•νƒœλ₯Ό 의미

   · λ‹€λ₯Έ 클래슀 내에 μ •μ˜λœ 클래슀 λ˜λŠ” μΈν„°νŽ˜μ΄μŠ€

   · 항상 static으둜 μ„ μ–Έ

   · 가독성 ν–₯상

   · μ„œλ‘œμ˜ private ν•„λ“œμ™€ λ©”μ†Œλ“œμ— μ ‘κ·Ό κ°€λŠ₯

 

β€» 가급적이면 μ™ΈλΆ€ μ°Έμ‘°λ₯Ό ν•˜μ§€ μ•ŠλŠ” λ‚΄λΆ€ 클래슀일 경우 μŠ€νƒœν‹± 클래슀둜 생성 ν•  것!!!

μ°Έμ‘° : inpa.tistory.com/entry/JAVA-β˜•-μžλ°”μ˜-λ‚΄λΆ€-ν΄λž˜μŠ€λŠ”-static-으둜-μ„ μ–Έν•˜μž

 

[ μŠ€νƒœν‹± 클래슀 예제 ]

class Nesting{
	
	private int i = 1;
	private static int si = 2;
	
    // Nesting 클래슀λ₯Ό ν¬ν•¨ν•˜λŠ” μŠ€νƒœν‹± 클래슀 Nested
	static class Nested{
		int j = 3;
		private static int sj = 4;
		void display() {
//			System.out.println(i);  // 였λ₯˜ λ°œμƒ => Nesting 클래슀의 privateν˜• λ©€λ²„λŠ” μ ‘κ·Ό λΆˆκ°€
			System.out.println("Nesting.si : " + si); // privateν˜• λ©€λ²„μ΄λ‚˜ static으둜 μ„ μ–Έλ˜μ–΄ 쀑첩 ν΄λž˜μŠ€μ—μ„œλŠ” μ ‘κ·Ό κ°€λŠ₯
			System.out.println("Nested.j : " + j);
		}
	}
	
	// -- Nesting Construct -- 
	Nesting(){
		// Nested 클래슀의 display()와 λ§ˆμ°¬κ°€μ§€λ‘œ Nested 클래슀의 private static 멀버에 μ ‘κ·Ό κ°€λŠ₯
		System.out.println("Nested.sj : " + Nested.sj); 
	}
}

public class TestCode {
	
	public static void main(String[] args) {
		
		Nesting.Nested nested = new Nesting.Nested();
		Nesting nesting = new Nesting();	// Nesting 클래슀의 μƒμ„±μžλ₯Ό 톡해 Nested.sj 좜λ ₯
		
		nested.display();
	}
}

/* [좜λ ₯ κ²°κ³Ό]
    Nested.sj : 4
    Nesting.si : 2
    Nested.j : 3
*/
· static ν‚€μ›Œλ“œμ΄μ§€λ§Œ new μƒμ„±μž μ΄ˆκΈ°ν™” κ°€λŠ₯
· 일반 static 멀버 λ³€μˆ˜, static λ©”μ†Œλ“œμ™€ static λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” λ©”λͺ¨λ¦¬ ꡬ쑰와 κΈ°λŠ₯이 닀름
· λ‚΄λΆ€ ν΄λž˜μŠ€λ“€κ°„ private static λ©€λ²„ν•„λ“œμ—λŠ” μ„œλ‘œ μ ‘κ·Ό κ°€λŠ₯

 

 

 

[ λ‚΄λΆ€ μΈμŠ€ν„΄μŠ€ 클래슀 (Instance class) ]

더보기

- μΈμŠ€ν„΄μŠ€ 클래슀 λ‚΄λΆ€μ—λŠ” μΈμŠ€ν„΄μŠ€ 멀버 ν•„λ“œλ§Œ μ„ μ–Έ κ°€λŠ₯

  (μ–΄λ– ν•œ static 멀버도 κ°€μ§ˆ 수 μ—†μŒ)

-  μΈμŠ€ν„΄μŠ€ 클래슀 λ©”μ†Œλ“œλŠ” 멀버 클래슀의 ν•„λ“œλΏ μ•„λ‹ˆλΌ

   ν•΄λ‹Ή 클래슀λ₯Ό 포함쀑인 μ™ΈλΆ€ 클래슀의 λͺ¨λ“  ν•„λ“œ μ°Έμ‘° κ°€λŠ₯

- μ™ΈλΆ€ 클래슀의 객체 멀버 ν•„λ“œμ™€ κ΄€λ ¨λœ μž‘μ—…μ— μ‚¬μš©

 

[ λ‚΄λΆ€ μΈμŠ€ν„΄μŠ€ 클래슀 예제 ]

class OuterClass{
	// μΈμŠ€ν„΄μŠ€ 멀버 λ³€μˆ˜
	String first_name = "홍";
	int age = 25;
	
	class InnerClass{
		String last_name ="길동";
		int kor_age = 24;
		
//		static String region = "μ•„μ‹œμ•„";	// μ—λŸ¬ λ°œμƒ => λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” static ν‚€μ›Œλ“œ μ‚¬μš© λΆˆκ°€
		// μ›μΉ™μ μœΌλ‘œ λ‚΄λΆ€ ν΄λž˜μŠ€μ—μ„œ static ν‚€μ›Œλ“œ 선언은 λΆˆκ°€ ν•˜λ‚˜
		// static final의 경우 μƒμˆ˜μ΄λ―€λ‘œ ν—ˆμš© 
		static final String COUNTRY = "ν•œκ΅­";
		
		void getProfile() {
			// 별닀λ₯Έ Getter&Setter λ©”μ†Œλ“œμ—†μ΄ μ™ΈλΆ€ λ©”μ†Œλ“œμ™€ λ‚΄λΆ€ λ©”μ†Œλ“œ μ„œλ‘œ μ ‘κ·Ό κ°€λŠ₯
			System.out.println("이름 : " + first_name + last_name);
			System.out.println("λ‚˜μ΄ : " + age + " ν•œκ΅­μ‹ λ‚˜μ΄ : " + kor_age);
			System.out.println("κ΅­κ°€ : " + COUNTRY);
		}
	}
	
}


public class TestCode {
	
	public static void main(String[] args) {
		
		// -- λ‚΄λΆ€ 클래슀 μ„ μ–Έ 방식 --
		OuterClass oc = new OuterClass();				 // 1. μ™ΈλΆ€ 클래슀 객체 μ„ μ–Έ
		OuterClass.InnerClass ic = oc.new InnerClass();	 // 2. μ™ΈλΆ€ 클래슀.λ‚΄λΆ€ν΄λž˜μŠ€ ν˜•μ‹μœΌλ‘œ λ‚΄λΆ€ 클래슀 μ΄ˆκΈ°ν™”. μ„ μ–Έ
		
		ic.getProfile(); System.out.println("");
		
		// ν•œμ€„λ‘œ μΆ•μ•½ κ°€λŠ₯
		OuterClass.InnerClass ic2 = new OuterClass().new InnerClass();
		ic2.getProfile();
	}
}

/* [좜λ ₯ κ²°κ³Ό]
    이름 : 홍길동
    λ‚˜μ΄ : 25 ν•œκ΅­μ‹ λ‚˜μ΄ : 24
    κ΅­κ°€ : ν•œκ΅­

    이름 : 홍길동
    λ‚˜μ΄ : 25 ν•œκ΅­μ‹ λ‚˜μ΄ : 24
    κ΅­κ°€ : ν•œκ΅­
*/
· μ™ΈλΆ€ 클래슀 객체 μ„ μ–Έ μ‹œ μ™ΈλΆ€ 클래슀의 μ½”λ“œκ°€ λ©”λͺ¨λ¦¬μ— ν˜•μ„±
· 이 λ•Œ μžμ—°μŠ€λŸ½κ²Œ μ™ΈλΆ€ 클래슀 내뢀에 μžˆλŠ” λ‚΄λΆ€ 클래슀의 μ½”λ“œλ„ λ©”λͺ¨λ¦¬μ— 올라옴
· 그렇기에 μ™ΈλΆ€ 클래슀 객체λ₯Ό μš°μ„  μ„ μ–Έ ν›„ λ‚΄λΆ€ 클래슀λ₯Ό μ„ μ–Έ(생성) κ°€λŠ₯

 

 

 

[ μ§€μ—­ 클래슀 (local class) ]

더보기

- μ™ΈλΆ€ 클래슀의 λ©”μ†Œλ“œλ‚˜ μ΄ˆκΈ°ν™” λΈ”λŸ­ 내뢀에 μ„ μ–Έ

- λ©”μ†Œλ“œ 내뢀에 μ§€μ—­μ μœΌλ‘œ μ„ μ–Έλœ 클래슀

   · 블둝 μ™ΈλΆ€μ—μ„œ μ°Έμ‘° λΆˆκ°€

   · μ–΄λ– ν•œ static 멀버도 κ°€μ§ˆ 수 μ—†μŒ

   · 멀버 ν΄λž˜μŠ€μ™€ 달리 μ ‘κ·Ό μ§€μ •μž λΆ€μ—¬ λΆˆκ°€

 

[ μ§€μ—­ 클래슀 예제 ]

class OuterClass{
	String first_name = "홍";
	String last_name = "길동";
	
	// -- Constructor --
	public OuterClass() {
		System.out.println("μ„± : " + this.first_name );
		System.out.println("이름 : " + this.last_name);
	}
	
	// -- display Method --
	public void display() {
		int age = 25;
		
		// -- Local class -- λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ 클래슀 μ„ μ–Έ
		class LocalClass{
			int kor_age = 24;
			
			public void getLocalClass() {
				System.out.println("λ‚˜μ΄ : " + age);			// OuterClass.display() λ©”μ†Œλ“œ μ§€μ—­ μƒμˆ˜ 좜λ ₯
				System.out.println("λ‚˜μ΄(만) : " + kor_age);	// LocalClass μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ 좜λ ₯
			}
		}
		
		new LocalClass().getLocalClass();
		System.out.println("OuterClass.display().LocalClass.getLocalClass() 호좜 μ™„λ£Œ");
	}
	
}


public class TestCode {
	
	public static void main(String[] args) {
		
		OuterClass oc = new OuterClass();
		oc.display();
	}
}

/* [좜λ ₯ κ²°κ³Ό]
    μ„± : 홍
    이름 : 길동
    λ‚˜μ΄ : 25
    λ‚˜μ΄(만) : 24
    OuterClass.display().LocalClass.getLocalClass() 호좜 μ™„λ£Œ
*/
· λ©”μ†Œλ“œ λ‚΄μ—μ„œ μž„μ‹œλ‘œ μ‚¬μš©λ˜λŠ” μ§€μ—­ λ³€μˆ˜μ™€ 같이 μž„μ‹œλ‘œ μ‚¬μš©ν•˜λŠ” κ°œλ…
· display() λ©”μ†Œλ“œ λ‚΄μ—μ„œ 객체 생성 ν›„ μ‚¬μš©ν•œ λ’€ λ©”μ†Œλ“œ μ’…λ£Œμ™€ ν•¨κ»˜ νž™ λ©”λͺ¨λ¦¬ μ˜μ—­μ˜ μ‹€μ œ 데이터도
   GC(κ°€λΉ„μ§€ 컬렉터)에 μ˜ν•΄ μ‚­μ œ

LocalClass.getLocalClass() λ©”μ†Œλ“œ λ‚΄λΆ€ μ½”λ“œλ₯Ό 보게 되면
display() λ©”μ†Œλ“œ λ‚΄ μ§€μ—­ λ³€μˆ˜μΈ age에 μ ‘κ·Όν•˜μ—¬ μ‚¬μš© μ€‘μž„.

λ§Œμ•½ λ©”μ†Œλ“œ λ‚΄ μ§€μ—­ ν΄λž˜μŠ€μ—μ„œ μ§€μ—­ λ³€μˆ˜μ— μ ‘κ·Όν•  κ²½μš°μ—λŠ”
λ°˜λ“œμ‹œ final ν‚€μ›Œλ“œλ₯Ό 톡해 μƒμˆ˜ν™” 된 μ§€μ—­ λ³€μˆ˜λ§Œ κ°€λŠ₯함.

μœ„μ˜ μ½”λ“œκ°€ 였λ₯˜κ°€ λ‚˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” μ΄λŸ¬ν•œ 경우
μžλ°”8 이 ν›„ μ»΄νŒŒμΌλŸ¬μ—μ„œ λ¬΅μ‹œμ μœΌλ‘œ final ν‚€μ›Œλ“œλ₯Ό μ§€μ—­ λ³€μˆ˜μ— λΆ™μ—¬μ£ΌκΈ° λ•Œλ¬Έμž„
πŸ‘‡ μ•„λž˜ 예제 μ½”λ“œ 확인 πŸ‘‡

 

[ μ§€μ—­ 클래슀 μƒμˆ˜ μ ‘κ·Ό 예제]

	// -- display Method --
	public void display() {
		int age = 25;	// λ¬΅μ‹œμ μœΌλ‘œ final ν‚€μ›Œλ“œκ°€ λΆ™μ–΄ μžˆλŠ” μƒνƒœμž„
		age = 24;		// age 값을 λ³€κ²½ν•˜κ²Œ 되면 final ν‚€μ›Œλ“œ(μƒμˆ˜)κ°€ μ•„λ‹Œ λ³€μˆ˜λ‘œ 인식
		
		// -- Local class -- λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ 클래슀 μ„ μ–Έ
		class LocalClass{
			int kor_age = 24;
			
			public void getLocalClass() {
//				System.out.println("λ‚˜μ΄ : " + age);			 // μ—λŸ¬ λ°œμƒ
				System.out.println("λ‚˜μ΄(만) : " + kor_age);	// LocalClass μΈμŠ€ν„΄μŠ€ λ³€μˆ˜ 좜λ ₯
			}
		}
		
		new LocalClass().getLocalClass();
		System.out.println("OuterClass.display().LocalClass.getLocalClass() 호좜 μ™„λ£Œ");
	}
μœ„μ˜ μ½”λ“œμ™€ 같이 display() λ©”μ†Œλ“œμ˜ μ§€μ—­λ³€μˆ˜ age의 값을 λ³€κ²½ μ‹œ
λ‚΄λΆ€ μ§€μ—­ 클래슀인 LocalClassμ—μ„œ ν•΄λ‹Ή λ³€μˆ˜μ— μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λŠ” 것을 확인 κ°€λŠ₯

 

 

 

[ 읡λͺ… 클래슀 (anonymous class) ]

더보기

- 클래슀의 μ„ μ–Έ 및 객체 생성을 λ™μ‹œμ— ν•˜λŠ” 읡λͺ… 클래슀

- 클래슀λ₯Ό 일회용으둜 μ‚¬μš©ν•  λ•Œ 자주 이용

- 클래슀λͺ…이 μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ” λ‚΄λΆ€ ν΄λž˜μŠ€μž„ (JS의 읡λͺ… ν•¨μˆ˜μ™€ μœ μ‚¬)

- 단 ν•˜λ‚˜μ˜ κ°μ²΄λ§Œμ„ μƒμ„±ν•˜λŠ” 일회용 클래슀

- μƒμ„±μžκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠμŒ

- μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€λŠ” 항상 Object의 μ„œλΈŒ 클래슀

- κΈ°μ‘΄ 클래슀λ₯Ό λ©”μ†Œλ“œ λ‚΄λΆ€μ—μ„œ 읡λͺ… 클래슀둜 μ„ μ–Έν•˜μ—¬ λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ ν•˜λŠ” 기법

 

[ λ‚΄λΆ€ 읡λͺ… 클래슀 예제 ]

public class TestCode {
	
	public static void main(String[] args) {
		
		Object obj = new Object() {
			@Override
			public String toString() {
				return "toString() μ˜€λ²„λΌμ΄λ”© μ™„λ£Œ";
			}
		};
		
		String txt = obj.toString();
		System.out.println(txt);
	}
}

/* [좜λ ₯ κ²°κ³Ό]
	toString() μ˜€λ²„λΌμ΄λ”© μ™„λ£Œ
*/
· Object 클래슀λ₯Ό μΌνšŒμ„±μœΌλ‘œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ 읡λͺ… 클래슀둜 μ„ μ–Έ
· 읡λͺ… 클래슀 객체 objμ—μ„œ μ˜€λ²„λΌμ΄λ”©ν•œ toString() 호좜

 

 

# μ°Έκ³  λΈ”λ‘œκ·Έ : https://inpa.tistory.com/entry/JAVA-β˜•-λ‚΄λΆ€-클래슀Inner-Class-μž₯점-μ’…λ₯˜
μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€
    'ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄/Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [μžλ°”] μžλ°” Wrapper 클래슀
    • [Java] μžλ°” λžŒλ‹€ (Lambda)
    • [Java] μžλ°” μΊμŠ€νŒ…
    • [Java] μžλ°” 좔상 λ©”μ†Œλ“œ, 좔상 ν΄λž˜μŠ€μ™€ μΈν„°νŽ˜μ΄μŠ€
    めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
    めけゃくけゃ ι–‹η™Ίθ€…πŸ¦Ύ
    πŸ‘Š λΈ”λ‘œκ·Έλ„ 근성이닀? πŸ‘Š

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”