πŸ’» μΈν„°νŽ˜μ΄μŠ€μ™€ λ‹€ν˜•μ„±

K CΒ·2021λ…„ 8μ›” 9일
0

java

λͺ©λ‘ 보기
2/4

πŸ“Œ1. μΆ”μƒν΄λž˜μŠ€λž€?

  • μ™„μ „ν•˜κ²Œ κ΅¬ν˜„λ˜μ–΄ μžˆμ§€ μ•Šμ€ λ©”μ†Œλ“œλ₯Ό 가지고 μžˆλŠ” 클래슀λ₯Ό μ˜λ―Έν•œλ‹€.
  • λ©”μ†Œλ“œκ°€ λ―Έμ™„μ„± λ˜μ–΄ μžˆμœΌλ―€λ‘œ 좔상 ν΄λž˜μŠ€λ‘œλŠ” 객체λ₯Ό 생성 λͺ»ν•¨
  • μΆ”μƒν΄λž˜μŠ€λŠ” 주둜 μƒμ†κ³„μΈ΅μ—μ„œ 좔상적인 κ°œλ…μ„ λ‚˜νƒ€λ‚΄κΈ° μœ„ν•œ μš©λ„λ‘œ μ‚¬μš©
  • μΆ”μƒν΄λž˜μŠ€λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ 클래슀 μ„ μ–Έμ‹œ μ•žμ— abstract λ₯Ό 뢙인닀.
import java.awt.*;
abstract class Shape {  //μΆ”μƒν΄λž˜μŠ€ Shapeλ₯Ό μ„ μ–Έ, 좔상 γ…‹λ₯΄λž˜μŠ€λ‘œλŠ” 객체λ₯Ό 생성 λͺ»ν•¨
    int x, y;
    public void move(int x, int y) {	//μΆ”μƒν΄λž˜μŠ€λΌκ³  ν•˜λ”λΌλ„ 좔상 λ©”μ†Œλ“œκ°€ μ•„λ‹Œ λ³΄ν†΅μ˜ λ©”μ†Œλ“œλ„ κ°€μ§ˆμˆ˜ 있음
        this.x = x;
        this.y = y;
    }
    public abstract void draw();    
    //μΆ”μƒλ©”μ†Œλ“œ μ„ μ–Έ, 좔상 λ©”μ†Œλ“œλ₯Ό ν•˜λ‚˜λΌλ„ 가지면 좔상 ν΄λž˜μŠ€κ°€ λœλ‹€. 좔상 λ©”μ†Œλ“œλ₯Ό 가지고 μžˆλŠ”λ°λ„
    //abstract λ₯Ό class μ•žμ— 뢙이지 μ•ŠμœΌλ©΄ 컴파일 였λ₯˜κ°€ λ°œμƒ
};
public class P269 extends Shape {
    int width, height;
    public void draw() {        //좔상 λ©”μ†Œλ“œ κ΅¬ν˜„
        System.out.println("μ‚¬κ°ν˜• 그리기 λ©”μ†Œλ“œ");  
        //μ„œλΈŒ 클래슀 P269μ—μ„œ 수퍼 클래슀 좔상 λ©”μ†Œλ“œ draw()κ°€ μ‹€μ œ λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„
        //μ„œλΈŒν΄λž˜μŠ€μ—μ„œ 좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•ŠμœΌλ©΄ 컴파일 였λ₯˜ λ°œμƒ
    }
};
class circle extends Shape {
    int radius;
    public void draw() {
        System.out.println("원 그리기 λ©”μ†Œλ“œ");    //μΆ”μƒλ©”μ†Œλ“œ draw()κ°€ μ‹€μ œ λ©”μ†Œλ“œλ‘œ κ΅¬ν˜„ν•œλ‹€.
    }
}

πŸ“Œ2. μΈν„°νŽ˜μ΄μŠ€

  • μΆ”μƒλ©”μ†Œλ“œλ“€μ˜ 집합체! μΆ”μƒλ©”μ†Œλ“œλ‘œλ§Œ 이루어짐!

  • μžλ°”μ—μ„œμ˜ μΈν„°νŽ˜μ΄μŠ€λŠ” 객체와 객체 μ‚¬μ΄μ˜ μƒν˜Έ μž‘μš©μ΄ μ΄λ£¨μ–΄μ§€λŠ” μΈν„°νŽ˜μ΄μŠ€λ₯Ό 의미
  • μΈν„°νŽ˜μ΄μŠ€μ˜ 일반적인 ν˜•νƒœλŠ” λ‹€μŒκ³Ό κ°™λ‹€
public interface μΈν„°νŽ˜μ΄μŠ€ _이름{
	λ°˜ν™˜ν˜• μΆ”μƒλ©”μ†Œλ“œ1(...);
   	λ°˜ν™˜ν˜• μΆ”μƒλ©”μ†Œλ“œ2(...);
   	...
}
  • μΆ”μƒν΄λž˜μŠ€μ²˜λŸΌ μΈν„°νŽ˜μ΄μŠ€λ„ μΈμŠ€ν„΄μŠ€λ₯Ό 생성 ν• μˆ˜ μ—†μŒ, λ‹€λ§Œ λ‹€λ₯Έ ν΄λž˜μŠ€μ— μ˜ν•˜μ—¬ κ΅¬ν˜„(implement)됨
public class 클래슀_이름 implement μΈν„°νŽ˜μ΄μŠ€_이름{
	λ°˜ν™˜ν˜• 좔상 λ©”μ†Œλ“œ1(...){
	....
	}
	λ°˜ν™˜ν˜• 좔상 λ©”μ†Œλ“œ2(...){
	....
	}
}
  • μΈν„°νŽ˜μ΄μŠ€ μ•ˆμ—μ„œ μ„ μ–Έλ˜λŠ” λ©”μ†Œλ“œλ“€μ€ λͺ¨λ‘ λ¬΅μ‹œμ μœΌλ‘œ public, abstract이닀.

  • μ£Όμ˜β—

    • μΈν„°νŽ˜μ΄μŠ€λŠ” ν΄λž˜μŠ€κ°€ μ•„λ‹ˆλ―€λ‘œ new μ—°μ‚°μžλ₯Ό μ‚¬μš©ν• μˆ˜ μ—†λ‹€.

//RemoteControl이 interface라고 κ°€μ •ν–ˆμ„ μ‹œ
RemoteControl obj = new RemoteControl(); //μ‚¬μš©ν• μˆ˜ μ—†λ‹€.
  • μΈν„°νŽ˜μ΄μŠ€λŠ” ν•˜λ‚˜μ˜ νƒ€μž…(type)으둜 λ³΄μ•„μ•Όν•œλ‹€. 이 νƒ€μž…μ€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ ν΄λž˜μŠ€λ“€μ„ ν•˜λ‚˜λ‘œ λ¬ΆλŠ” 역할을 ν•œλ‹€.

  • μΈν„°νŽ˜μ΄μŠ€μ˜ 이름은 클래슀의 이름과 λ§ˆμ°¬κ°€μ§€λ‘œ μ°Έμ‘° λ³€μˆ˜λ₯Ό μ •μ˜ν•˜λŠ”λ° μ‚¬μš©λ  수 μžˆλ‹€.

  • λ§Œμ•½ μΈν„°νŽ˜μ΄μŠ€ νƒ€μž…μ˜ μ°Έμ‘° λ³€μˆ˜λ₯Ό μ •μ˜ ν•˜μ˜€λ‹€λ©΄, 이 λ³€μˆ˜μ— λŒ€μž…ν•  수 μžˆλŠ” 값은 λ°˜λ“œμ‹œ κ·Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•œ 클래슀의 객체이어야 ν•œλ‹€.

  • μ—¬λŸ¬κ°œμ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ™μ‹œκ΅¬ν˜„ν•  수 있음
public class Television implements RemoteControl,SerialCommunication //2개의 μΈν„°νŽ˜μ΄μŠ€ λ™μ‹œκ΅¬ν˜„ν•œλ‹€λŠ” 의미
{
 ...
}
  • μΈν„°νŽ˜μ΄μŠ€ μƒμ†ν•˜κΈ°
    • 기쑴에 μ‚¬μš©ν•˜λ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ³€κ²½μ‹œν‚€λ©΄ 이 μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ˜€λ˜ λͺ¨λ“  ν΄λž˜μŠ€κ°€ λ™μž‘ν•˜μ§€ μ•Šκ²Œ 되기 λ•Œλ¬Έμ—, 이런경우λ₯Ό λŒ€λΉ„ν•˜μ—¬ μΈν„°νŽ˜μ΄μŠ€λ„ 상속을 λ°›μ•„μ„œ 상속 μ‹œν‚¬μˆ˜ μžˆλ‹€.
public interface AdvanceRemoteControl extends RemoteControl{	
//μΈν„°νŽ˜μ΄μŠ€λ„ λ‹€λ₯Έ μΈν„°νŽ˜μ΄μŠ€λ₯Ό 상속 받을 수 있음
{
...
}

πŸ“Œ3. μΈν„°νŽ˜μ΄μŠ€μ˜ ν™œμš©

  • μΈν„°νŽ˜μ΄μŠ€μ™€ 닀쀑 상속

    • ν΄λž˜μŠ€μ—κ²Œ λ‹€μ€‘μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ°€μ§€κ²Œ ν•˜λŠ” λŠ₯λ ₯이닀.

  • μΈν„°νŽ˜μ΄μŠ€μ™€ 좔상 클래슀

    • μΆ”μƒν΄λž˜μŠ€λŠ” 좔상 λ©”μ†Œλ“œ λ•Œλ¬Έμ— λΆ€λΆ„μ μœΌλ‘œ λ―Έμ™„μ„±λœ 클래슀
    • μΈν„°νŽ˜μ΄μŠ€λŠ” μ™„μ „νžˆ λ―Έμ™„μ„±λœ μ±„λ‘œ 남겨진 좔상 클래슀

  • μƒμˆ˜μ •μ˜

    • μΈν„°νŽ˜μ΄μŠ€μ˜ 또 λ‹€λ₯Έ μš©λ„λŠ” μ—¬λŸ¬ ν΄λž˜μŠ€μ—μ„œ μ‚¬μš©λ˜λŠ” μƒμˆ˜λ“€μ„ μ •μ˜ν•˜λŠ” 것
  interface Days{
  public static final int SUNDAY =1, MONDAY=2, TUESDAY=3, 
  	    WEDNESDAY=4, THURSDAY=5, FRIDAY=6;SATURDAY=7;	
        	//μƒμˆ˜λŠ” λŒ€κ²Œ 정적 λ³€μˆ˜λ‘œ μ„ μ–Έ
  }

πŸ“Œ4. λ‹€ν˜•μ„±

  • κ°μ²΄λ“€μ˜ νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ λ˜‘κ°™μ€ λ©”μ‹œμ§€κ°€ μ „λ‹¬λ˜λ”λΌλ„ μ„œλ‘œ λ‹€λ₯Έ λ™μž‘μ„ ν•˜λŠ” 것
  • λ˜‘κ°™μ€ λͺ…령을 λ‚΄λ¦¬μ§€λ§Œ 객체의 νƒ€μž…μ΄ λ‹€λ₯΄λ©΄ μ„œλ‘œ λ‹€λ₯Έ κ²°κ³Όλ₯Ό μ–»λŠ” 것이 λ‹€ν˜•μ„±

  • 상ν–₯ν˜•λ³€ν™˜

    • μ„œλΈŒν΄λž˜μŠ€μ˜ κ°μ²΄λŠ” 수퍼 클래슀의 객체처럼 μ·¨κΈ‰ κ°€λŠ₯
    • μžλ°”μ—μ„œλŠ” 수퍼 클래슀 객체가 μžˆλŠ”κ³³μ„ μ„œλΈŒ 클래슀 객체둜 λŒ€μΉ˜ν•˜λŠ” 것이 κ°€λŠ₯
    • 이것을 상ν–₯ ν˜•λ³€ν™˜μ΄λΌκ³  ν•œλ‹€.

  • ν•˜ν–₯ν˜•λ³€ν™˜

    • 상ν–₯ ν˜•λ³€ν™˜μ˜ λ°˜λŒ€
    • λ§Œμ•½ μ„œλΈŒ 클래슀 객체인데 ν˜•λ³€ν™˜μ— μ˜ν•˜μ—¬ μΌμ‹œμ μœΌλ‘œ 수퍼 클래슀 μ°Έμ‘° λ³€μˆ˜μ— μ˜ν•˜μ—¬ 참쑰되고 μžˆλŠ” κ²½μš°μ—λŠ” ν•˜ν–₯ ν˜•λ³€ν™˜μ„ 톡해 μ›λž˜ μƒνƒœλ‘œ 되돌릴 수 μžˆλ‹€. μ΄λ•Œ λ°˜λ“œμ‹œ λͺ…μ‹œμ μœΌλ‘œ ν˜•λ³€ν™˜ μ—°μ‚°μžλ₯Ό 적어주어야 ν•œλ‹€.

  • 객체의 νƒ€μž…μ„ μ•Œμ•„λ‚΄λŠ” 방법

    • μ°Έμ‘°λ³€μˆ˜κ°€ ν˜„μž¬ μ‹€μ œλ‘œ μ–΄λ–€ 객체λ₯Ό μ°Έμ‘°ν•˜κ³  μžˆλŠ”μ§€λ₯Ό μ•Œμ•„μ•Ό ν•˜λŠ” 경우
      itanceof μ—°μ‚°μž μ‚¬μš©
      πŸ‘‰(A instanceof B)λŠ” Aκ°€ νƒ€μž…B 이면 trueλ₯Ό λ°˜ν™˜

  • λ‹€ν˜•μ„±μ˜ 이용

  1. λ©”μ†Œλ“œμ˜ λ§€κ°œλ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ, λ‹€ν˜•μ„±μ„ 많이 이용
    πŸ‘‰ 일반적으둜 λ©”μ†Œλ“œ λ§€κ°œλ³€μˆ˜λŠ” μ„œλΈŒ ν΄λž˜μŠ€λ³΄λ‹€ 수퍼 클래슀 νƒ€μž…μœΌλ‘œ μ„ μ–Έν•˜λŠ” 것이 μ’‹λ‹€.

  2. λ‹€ν˜•μ„±μ„ λ©”μ†Œλ“œ μž¬μ •μ˜μ™€ μ—°κ²°μ‹œμΌœμ„œ 객체듀이 λ™μΌν•œ λ©”μ‹œμ§€λ₯Ό 받더라도 각 객체의 νƒ€μž…μ— λ”°λΌμ„œ μ„œλ‘œ λ‹€λ₯Έ λ™μž‘μ„ ν•˜κ²Œ ν•  수 μžˆλ‹€.
Shape s = new Rectangle();
s.draw();

πŸ‘‰ Shape의 λ©”μ†Œλ“œκ°€ ν˜ΈμΆœλ˜λŠ”κ²ƒμ΄ μ•„λ‹Œ, Rectangle의 draw() λ©”μ†Œλ“œκ°€ ν˜ΈμΆœλœλ‹€.
πŸ‘‰ μžλ°”μ—μ„œλŠ” λ©”μ†Œλ“œ ν˜ΈμΆœμ‹œμ— μ°Έμ‘° λ³€μˆ˜κ°€ μ‹€μ œλ‘œ κ°€λ¦¬ν‚€λŠ” 객체에 따라 λ©”μ†Œλ“œκ°€ μžλ™μ μœΌλ‘œ 선택 λœλ‹€.
πŸ‘‰ 바인딩 : λ©”μ†Œλ“œ ν˜ΈμΆœμ„ μ‹€μ œ λ©”μ†Œλ“œμ˜ λͺΈμ²΄μ™€ μ—°κ²° ν•˜λŠ”κ²ƒ!
πŸ‘‰ 동적바인딩 : μžλ°”μ—μ„œλŠ” μ‹€ν–‰ λ‹¨κ³„μ—μ„œ 객체의 νƒ€μž…μ„ 보고 μ μ ˆν•œ λ©”μ†Œλ“œλ₯Ό ν˜ΈμΆœν•œλ‹€.
πŸ‘‰ λ‹€ν˜•μ„±μ„ μ‚¬μš©ν•˜λ©΄ μ‹œμŠ€ν…œμ— μ΅œμ†Œν•œμ˜ 영ν–₯을 λ―ΈμΉ˜λ©΄μ„œ μƒˆλ‘œμš΄ μœ ν˜•μ˜ 객체λ₯Ό μ‰½κ²Œ μΆ”κ°€ν•˜μ—¬ μ‹œμŠ€ν…œμ„ ν™•μž₯ν•  수 μžˆλ‹€.

πŸ“Œ5. λ‚΄λΆ€ 클래슀

  • ν•˜λ‚˜μ˜ 클래슀 μ•ˆμ— λ‹€λ₯Έ 클래슀λ₯Ό μ •μ˜ν•  수 μžˆλŠ” 것

πŸ“Œ6. 무λͺ… 클래슀

  • 클래슀 λͺΈμ²΄λŠ” μ •μ˜λ˜μ§€λ§Œ 이름이 μ—†λŠ” 클래슀
  • 이름이 μ—†κΈ° λ•Œλ¬Έμ— ν•œλ²ˆλ§Œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€!
  • μ½”λ“œμ˜ 양을 쀄일 수 μžˆλŠ” μž₯점이 μžˆμ§€λ§Œ, ν‘œκΈ°λ²• μƒλ‹Ήνžˆ λ‚œν•΄, ν•˜λ‚˜μ˜ 객체만 μƒμ„±ν•˜λ©΄ λ˜λŠ” κ²½μš°μ— 많이 μ‚¬μš©

0개의 λŒ“κΈ€