관리 메뉴

Tech Log πŸ› οΈ

μΌ„νŠΈλ°±μ˜ κ΅¬ν˜„ νŒ¨ν„΄ 5μž₯ - 클래슀(2) λ³Έλ¬Έ

개발 μ„œμ /μΌ„νŠΈλ°± κ΅¬ν˜„ νŒ¨ν„΄

μΌ„νŠΈλ°±μ˜ κ΅¬ν˜„ νŒ¨ν„΄ 5μž₯ - 클래슀(2)

sehaan 2023. 9. 8. 16:38

클래슀

 

λ‚΄λΆ€ 클래슀

 

μž‘μ€ μ „μš© 클래슀λ₯Ό μ‚¬μš©ν•˜λ©΄ 클래슀 μ‚¬μš©μ— λŒ€ν•œ λΉ„μš©μ„ μ§€λΆˆν•˜μ§€ μ•Šκ³  클래슀의 μž₯점을 μ·¨ν•  수 μžˆλ‹€.

 

λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” λ‚΄λΆ€ 클래슀λ₯Ό 감싼 ν΄λž˜μŠ€μ— λŒ€ν•œ 정보λ₯Ό μ•”λ¬΅μ μœΌλ‘œ μ „λ‹¬λ°›λŠ”λ‹€.

λͺ…μ‹œμ μœΌλ‘œ 클래슀 κ°„μ˜ 관계λ₯Ό μ •ν•˜μ§€ μ•ŠμœΌλ©΄μ„œλ„ 감싼 클래슀의 데이터λ₯Ό μ ‘κ·Όν•  수 μžˆλ‹€.

public class Enclose {
	private String field;
    
    public class Inner {
    	public String example() {
        	return field;
        }
     }

}

λ§Œμ•½ μ™ΈλΆ€ ν΄λž˜μŠ€μ™€ μ™„μ „νžˆ λΆ„λ¦¬λœ λ‚΄λΆ€ 클래슀λ₯Ό μ‚¬μš©ν•˜λ €λ©΄, λ‚΄λΆ€ 클래슀λ₯Ό μ •μ μœΌλ‘œ μ„ μ–Έν•˜λ©΄ λœλ‹€.

 

μΈμŠ€ν„΄μŠ€λ³„ ν–‰μœ„

 

객체의 둜직이 ν΄λž˜μŠ€μ— μ˜ν•΄ μ™„μ „νžˆ μ •μ˜λ  λ•Œ, μ½”λ“œ λ…μžλŠ” μ–΄λ–€ 일이 λ²Œμ–΄μ§€λŠ”μ§€ μ΄ν•΄ν•œλ‹€.

ν•˜μ§€λ§Œ μΈμŠ€ν„΄μŠ€ λ³„λ‘œ 둜직이 λ‹€λ₯΄λ‹€λ©΄ μ½”λ“œλ₯Ό μ‰½κ²Œ 이해할 수 μ—†λ‹€.

 

효과적인 ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•΄ μΈμŠ€ν„΄μŠ€ 생성 ν›„μ—λŠ” μΈμŠ€ν„΄μŠ€ 별 행동을 λ³€ν™”μ‹œν‚€μ§€ μ•ŠλŠ” 것이 μ’‹λ‹€.

 

쑰건문

 

쑰건물을 μ‚¬μš©ν•˜λ©΄ μΈμŠ€ν„΄μŠ€ 별 행동을 μ§€μ›ν•˜λ©΄μ„œλ„ λͺ¨λ“  λ‘œμ§μ„ ν•˜λ‚˜μ˜ 클래슀 μ•ˆμ— 넣을 수 μžˆλ‹€.

히자민 ν”„λ‘œκ·Έλž¨ μˆ˜ν–‰ κ²½λ‘œκ°€ 많으면 λ§Žμ„ 수둝 였λ₯˜κ°€ 생길 ν™•λ₯ μ΄ 높아진닀.

 

μ•„λž˜μ™€ 같은 μŠ€μœ„μΉ˜ 문을 μƒκ°ν•΄λ³΄μž

public boolean contains(Point p) {
	switch (getType()) {
    	case A :
        // ...
        case B :
        // ...
    }
}

μ—¬κΈ°μ„œ case C λ₯Ό μΆ”κ°€ν•˜κ³  μ‹Άλ‹€λ©΄ , μŠ€μœ„μΉ˜λ¬Έμ— μƒˆλ‘œμš΄ μ ˆμ„ μ‚½μž…ν•˜κ³  클래슀 λ˜ν•œ μˆ˜μ •ν•΄μ•Ό ν• μˆ˜λ„ μžˆλ‹€.

 

λ”°λΌμ„œ ν•˜μœ„ ν΄λž˜μŠ€λ‚˜ μœ„μž„ 쀑 ν•˜λ‚˜λ₯Ό μ„ νƒν•΄μ„œ 쑰건문을 λ©”μ„Έμ§€λ‘œ λ°”κΎΈλŠ” κ²ƒμœΌλ‘œ ν•΄κ²°ν•  수 μžˆλ‹€.

 

μœ„μž„

μœ„μž„μ„ ν†΅ν•΄μ„œ 각 μΈμŠ€ν„΄μŠ€μ•³μ„œ λ‹€λ₯Έ λ‘œμ§μ„ μˆ˜ν–‰ν•˜κ²Œ ν•  수 μžˆλ‹€.

κ³΅ν†΅μœΌλ‘œ μ‚¬μš©λ˜λŠ” λ‘œμ§μ€ μœ„μž„ 클래슀λ₯Ό μ°Έμ‘°ν•˜λŠ” ν΄λž˜μŠ€μ— λ“€μ–΄μžˆμ§€λ§Œ , λ³€ν˜•μ€ μ—¬λŸ¬ 객체에 각각 κ΅¬ν˜„λœλ‹€.

 

public void mouseDown() {
	getTool().mouseDown();
}

 

ν”ŒλŸ¬κ·ΈμΈ μ„ νƒμž

 

ν•œλ‘κ°œμ˜ λ©”μ†Œλ“œμ—μ„œλ§Œ μΈμŠ€ν„΄μŠ€λ³„ 행동이 ν•„μš”ν•œ 경우 λ¦¬ν”Œλ ‰μ…˜μ„ 톡해 λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•˜λŠ” 것도 μ’‹λ‹€

String name;
public void runTest() throws Exception {
	Class[] noArgument = new class[0];
    Method method = getClass().getMethod(name,noArguments);
    method.invoke(this,new Object[0]);
}

 

읡λͺ… λ‚΄λΆ€ 클래슀

 

읡λͺ… λ‚΄λΆ€ ν΄λž˜μŠ€λŠ” ν•œκ³³μ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” 클래슀λ₯Ό μƒμ„±ν•΄μ„œ μ˜€λ²„λΌμ΄λ“œ ν•œ 후에 μ§€μ—­μ μœΌλ‘œλ§Œ μ‚¬μš©ν•˜λŠ” 것이닀.

μ΄λ•Œ 클래슀 이름은 μ§€μ •ν•˜μ§€ μ•ŠλŠ”λ‹€.

 

효율적인 μ‚¬μš©μ„ μœ„ν•΄ APIκ°€ 맀우 κ°„λ‹¨ν•˜κ±°λ‚˜ μƒμœ„ ν΄λž˜μŠ€κ°€ λŒ€λΆ€λΆ„μ˜ κ΅¬ν˜„μ„ λ‹΄λ‹Ήν•΄μ„œ λ‚΄λΆ€ 클래슀λ₯Ό μ‰½κ²Œ κ΅¬ν˜„ν•  수 μžˆμ–΄μ•Όν•œλ‹€.

 

읡λͺ… λ‚΄λΆ€ 클래슀λ₯Ό μ‚¬μš©ν•˜λ €λ©΄ 클래슀λ₯Ό 생성할 λ•Œ μΈμŠ€ν„΄μŠ€μ—μ„œ μ‚¬μš©ν•  μ½”λ“œλ₯Ό μ•Œμ•„μ•Όν•œλ‹€.

λ˜ν•œ ν…ŒμŠ€νŠΈν•˜κΈ° μ–΄λ €μ›Œμ„œ λ³΅μž‘ν•œ λ‘œμ§μ— μ μ ˆμΉ˜μ•Šλ‹€.