λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Study/Java

[TIL] 좔상화

by hong- 2022. 5. 15.

πŸ”Ž OOP의 4λŒ€ νŠΉμ§•

πŸ‘πŸ» 좔상화 Abstraction

 - 객체의 곡톡적인 속성과 κΈ°λŠ₯을 μΆ”μΆœν•˜μ—¬ κ³΅ν†΅μ˜ 쑰상을 λ§Œλ“œλŠ” 것

 - κΈ°μ‘΄ ν΄λž˜μŠ€λ“€μ˜ 곡톡적인 μš”μ†Œλ“€μ„ μΆ”μΆœν•˜μ—¬ μƒμœ„ 클래슀λ₯Ό λ§Œλ“€μ–΄ 냄

    → 곡톡 속성과 κΈ°λŠ₯을 μ •μ˜ν•˜κ³  ν•˜μœ„ν΄λž˜μŠ€ 생성 κ°€λŠ₯

    → ν•˜μœ„ ν΄λž˜μŠ€λ“€μ˜ 곡톡성을 λͺ¨μ•„ μƒμœ„ 클래슀 μ •μ˜ κ°€λŠ₯

 

πŸ“ abstract μ œμ–΄μž

 - abstract : λ―Έμ™„μ„±, 좔상적인

abstract class Example{       //좔상 클래슀
	abstract void start();    //좔상 λ©”μ†Œλ“œ
}

πŸ“ 좔상 λ©”μ„œλ“œ

abstract void stop();

  - λ©”μ„œλ“œ μ‹œκ·Έλ‹ˆμ²˜λ§Œ 있고 λ°”λ””λŠ” μ—†λŠ” λ©”μ„œλ“œ


πŸ“ 좔상 클래슀

  - λ―Έμ™„μ„±  λ©”μ„œλ“œ(좔상 λ©”μ„œλ“œ)λ₯Ό ν¬ν•¨ν•˜λŠ” 클래슀이자 λ―Έμ™„μ„± 섀계도

  - λ―Έμ™„μ„± ꡬ쑰λ₯Ό κ°€μ§€κ³  있기 λ•Œλ¬Έμ— 이λ₯Ό 기반으둜 객체 생성 λΆˆκ°€

  - 상속 관계에 μžˆμ–΄ μƒˆλ‘œμš΄ 클래슀 μž‘μ„±μ— 맀우 유용 

   → μƒμœ„ ν΄λž˜μŠ€μ—μ„œ μ„ μ–ΈλΆ€λ§Œ μž‘μ„±ν•˜κ³  ν•˜μœ„ ν΄λž˜μ„œ ꡬ체적인 λ‚΄μš© κ΅¬ν˜„ν•œλ‹€λ©΄ λ³€κ²½ 사항에 μœ μ—°ν•˜κ²Œ λŒ€μ‘ κ°€λŠ₯

     = μ˜€λ²„λΌμ΄λ”© μ‚¬μš© ( 상속을 λ°›λŠ” ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„ 라이딩을 톡해 각각 상황에 λ§žλŠ” λ©”μ„œλ“œ κ΅¬ν˜„ κ°€λŠ₯)

 

  πŸ‘‰πŸ» μ—¬λŸ¬ μ‚¬λžŒμ΄ κ°œλ°œν•  λ•Œ κ³΅ν†΅λœ 속성과 κΈ°λŠ₯을 λ‹€λ₯΄κ²Œ μ •μ˜ν•˜λŠ” 였λ₯˜λ₯Ό 미연에 λ°©μ§€

       μΆ”μƒν™”λŠ” μƒμœ„μ—μ„œ ν•˜μœ„λ‘œ λ‚΄λ €κ°ˆ 수둝 점점 ꡬ체화 λœλ‹€κ³  λ³Ό 수 있음

μƒμœ„ ν΄λž˜μŠ€μ—μ„œ κ³΅ν†΅λœ κΈ°λŠ₯κ³Ό 속성을 μ •μ˜ν•˜κ³ 
  ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ 상속 λ°›μ•„ 섀계 λ³€κ²½
  
 상속관계에 μžˆμ–΄ μƒˆλ‘œμš΄ 클래슀 μž‘μ„± 유용

 


πŸ“ final ν‚€μ›Œλ“œ

  - final : μ΅œμ’…μ˜, λ§ˆμ§€λ§‰μ˜   →  더 이상 변경이 λΆˆκ°€λŠ₯ν•˜κ±°λ‚˜ ν™•μž₯λ˜μ§€ μ•ŠμŒ

  (1) final + 클래슀 : λ³€κ²½ λ˜λŠ” ν™•μž₯, 상속 λΆˆκ°€

  (2) final + λ©”μ†Œλ“œ : μ˜€λ²„λΌμ΄λ”© λΆˆκ°€

  (3) final + λ³€μˆ˜ : κ°’ 변경이 λΆˆκ°€λŠ₯ν•œ μƒμˆ˜

final class Test {                     //final 클래슀
	final String test = "λ³€κ²½ λΆˆκ°€";     //final λ³€μˆ˜
    
    final void testing() {             //final λ©”μ„œλ“œ
    	final int x = test;
        return test;
    }
}

πŸ“ μΈν„°νŽ˜μ΄μŠ€

inter ( ~사이 ) + face ( μ–Όκ΅΄ / λ©΄ )

 - interface : λ°‘κ·Έλ¦Ό / κ°€λ©΄

 - 두 객체(λŒ€μƒ) κ°„ μ—°κ²°κ³Ό μ†Œν†΅μ„ λ•λŠ” 가ꡐ

 - 좔상 λ©”μ„œλ“œμ˜ μ§‘ν•© ( Only μΆ”μƒλ©”μ„œλ“œμ™€ μƒμˆ˜λ§Œμ„ λ©€λ²„λ‘œ 가짐 )

 - 좔상 ν΄λž˜μŠ€λ³΄λ‹€ 높은 좔상성

 

  (1) interface ν‚€μ›Œλ“œ μ‚¬μš©

  (2) λ‚΄λΆ€μ˜ λͺ¨λ“  ν•„λ“œκ°€ public static final둜 μ •μ˜

  (3) staticκ³Ό default λ©”μ„œλ“œ 이외 λͺ¨λ“  λ©”μ„œλ“œκ°€ public abstract둜 μ •μ˜

 

public interface Test {
    public static final int ugly = 1;       // final int, static int라고 써도 무방
    public static final int pretty = 2;     // finalκ³Ό static만 μ‚¬μš©ν•΄λ„
    public static final int cute = 3;       // public static final의 의미λ₯Ό κ°€μ§€κ³  있음 

    public abstract String testFighting();
    public abstract void call();            // void call()만 써도 ok
}

  πŸ‘‰πŸ» 즉, μƒμˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 경우 : public static final둜 μ •μ˜

            λ©”μ„œλ“œλ₯Ό μ •μ˜ν•˜λŠ” 경우 : public abstract둜 μ •μ˜   ( μƒλž΅ν•˜λŠ” 경우 μ»΄νŒŒμΌλŸ¬κ°€ μžλ™ 생성 )


πŸ“ μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„

 - μ–΄λ–€ ν΄λž˜μŠ€κ°€ μ–΄λ–€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œλ‹€ = 클래슀 내에 μΈν„°νŽ˜μ΄μŠ€κ°€ κ°€μ§„ λͺ¨λ“  좔상 λ©”μ„œλ“œ μ˜€λ²„λΌμ΄λ”©

class 클래슀λͺ… implements μΈν„°νŽ˜μ΄μŠ€λͺ…1, μΈν„°νŽ˜μ΄μŠ€λͺ…2. .. { ... }

 - 클래슀 κ°„ 상속은 단 ν•˜λ‚˜λ§Œ κ°€λŠ₯ → ν•˜μœ„ ν΄λž˜μŠ€λŠ” 단 ν•˜λ‚˜μ˜ μƒμœ„ 클래슀만 상속받을 수 있음

   but, μΈν„°νŽ˜μ΄μŠ€λŠ” 닀쀑 상속 κ°€λŠ₯ ! → ν•˜λ‚˜μ˜ ν΄λž˜μŠ€κ°€ μ—¬λŸ¬ 개의 μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ κ°€λŠ₯

 

 πŸ’‘ ν΄λž˜μŠ€μ—μ„œ 닀쀑 상속이 λΆˆκ°€λŠ₯ν•œ 이유?

   -  λΆ€λͺ¨ ν΄λž˜μŠ€μ— λ™μΌν•œ μ΄λ¦„μ˜ ν•„λ“œ λ˜λŠ” λ©”μ„œλ“œκ°€ μ‘΄μž¬ν•˜λŠ” 경우 좩돌 λ°œμƒ

     → μΈν„°νŽ˜μ΄μŠ€λŠ” λ―Έμ™„μ„± 멀버이기 λ•Œλ¬Έμ— 좩돌 λ°œμƒ x 

 

  πŸ’‘ 클래슀 상속과 λ™μ‹œμ— μΈν„°νŽ˜μ΄μŠ€ κ΅¬ν˜„ κ°€λŠ₯

abstract class Pet { public abstract void eat();}
interface Animal { public abstract void sleep();}

class Pig extends Pet implements Animal {
	public void eat(){
       System.out.println("λƒ λƒ ");
    }
    
    public void sleep(){
       System.out.println("μΏ¨μΏ¨");
    }

'Study > Java' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[TIL] μΆ”μƒν΄λž˜μŠ€ vs μΈν„°νŽ˜μ΄μŠ€  (0) 2022.05.15
[TIL] λ‹€ν˜•μ„±  (0) 2022.05.15
[TIL] μ»¬λ ‰μ…˜ Collection  (0) 2022.05.15
[TIL] μ°Έμ‘°λ³€μˆ˜μ™€ μ°Έμ‘°νƒ€μž…  (0) 2022.05.14
[TIL] 상속  (0) 2022.05.12