์ •์˜

  • Object-Oriented Programming, ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
  • ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ , ๊ทธ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์œ ๊ธฐ์ ์ธ ์ƒํ˜ธ์ž‘์šฉ์„ ํ†ตํ•ด ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ๋ฒ•
  • ํ˜„์‹ค ์„ธ๊ณ„์™€ ๋น„์Šทํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ๋ฅผ ์†์„ฑ๊ณผ ํ–‰์œ„๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•˜๊ณ , ์ด๋ ‡๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ผ๋ฆฌ ์„œ๋กœ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•˜๋ฉฐ ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ๋™์ž‘

ํŠน์ง•

  • ์ถ”์ƒํ™”
    • ๊ฐ์ฒด๋“ค์˜ ๊ณตํ†ต ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜๋กœ ๋ฌถ๋Š” ๊ฒƒ
    • ์ถ”์ƒ ํด๋ž˜์Šค, ์ถ”์ƒ ๋ฉ”์†Œ๋“œ ๊ทธ๋ฆฌ๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ถ”์ƒํ™”๋ฅผ ํ‘œํ˜„
public interface Phone {
   void showInformation();
   void call(String phoneNumber);
   void sendMessage(String message, String phoneNumber);
   void powerOn();
   void powerOff();
}
- ํœด๋Œ€ํฐ์˜ ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์ธ ์ „ํ™” ๊ฑธ๊ธฐ, ๋ฉ”์‹œ์ง€ ๋ณด๋‚ด๊ธฐ, ์ „์› ์ผœ๊ธฐ, ์ „์› ๋„๊ธฐ ๊ทธ๋ฆฌ๊ณ  ํœด๋Œ€ํฐ ์ •๋ณด ๋ณด์—ฌ์ฃผ๊ธฐ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋กœ ์„ ์–ธํ–ˆ๋‹ค.
- Phone ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋“ค์€ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ํ•จ์œผ๋กœ์จ ์ถ”์ƒํ™”๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

public class Samsung implements Phone {
   private String phoneNumber;
   private String phoneName;
   private boolean power;

   public Samsung(String phoneNumber, String phoneName) {
       this.phoneNumber = phoneNumber;
       this.phoneName = phoneName;
   }

   @Override
   public void showInformation() {
       System.out.println("phoneNumber = " + phoneNumber);
       System.out.println("phoneName = " + phoneName);
   }

   @Override
   public void call(String phoneNumber) {
       if (this.power) System.out.println(phoneNumber + "์— ์ „ํ™”๋ฅผ ๊ฒ๋‹ˆ๋‹ค.");
   }

   @Override
   public void sendMessage(String message, String phoneNumber) {
       if (this.power) {
           System.out.println("message = " + message);
           System.out.println(phoneNumber + "์— ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.");
       }
   }

   @Override
   public void powerOn() {
       if (!this.power) {
           this.power = true;
           System.out.println("์ „์›์„ ํ‚ต๋‹ˆ๋‹ค.");
       }
   }

   @Override
   public void powerOff() {
       if (this.power) {
           this.power = false;
           System.out.println("์ „์›์„ ๋•๋‹ˆ๋‹ค.");
       }
   }
}

- Samsung ํด๋ž˜์Šค๊ฐ€ Phone์„ ์ƒ์†๋ฐ›๊ณ , ๋ฉ”์†Œ๋“œ๋ฅผ ์žฌ์ •์˜ ํ•จ์œผ๋กœ์จ ํœด๋Œ€ํฐ์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
public static void main(String[] args) {
   Phone phone = new Samsung("010-1234-5678", "๊ฐค๋Ÿญ์‹œ s24");
   phone.showInformation();
   phone.powerOn();
   phone.call("010-5678-1234");
   phone.powerOff();
}
  • ๋‹คํ˜•์„ฑ
    • ์ƒ์†์„ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ํ™•์žฅ, ๋ณ€๊ฒฝํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋กœ ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋กœ ์žฌ๊ตฌ์„ฑ๋˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ
    • ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋กœ๋”ฉ๊ณผ ๋ฉ”์†Œ๋“œ ์˜ค๋ฒ„๋ผ์ด๋”ฉ์œผ๋กœ ๋‹คํ˜•์„ฑ์„ ํ‘œํ˜„
public class Soldier {
   public void sayInformation() {
       System.out.println("์ €๋Š” ๊ตฐ์ธ์ž…๋‹ˆ๋‹ค.");
   }
}
- Soldier ํด๋ž˜์Šค์˜ sayInformation() ๋ฉ”์†Œ๋“œ๋Š” โ€œ์ €๋Š” ๊ตฐ์ธ์ž…๋‹ˆ๋‹ค.โ€๋ผ๋Š” ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
public class Private extends Soldier {
   @Override
   public void sayInformation() {
       System.out.println("์ €๋Š” ์ด๋“ฑ๋ณ‘์ž…๋‹ˆ๋‹ค.");
   }
}

public class Private1st extends Soldier {
   @Override
   public void sayInformation() {
       System.out.println("์ €๋Š” ์ผ๋ณ‘์ž…๋‹ˆ๋‹ค.");
   }
}

public class Corporal extends Soldier {
   @Override
   public void sayInformation() {
       System.out.println("์ €๋Š” ์ƒ๋ณ‘์ž…๋‹ˆ๋‹ค.");
   }
}

public class Sergeant extends Soldier {
   @Override
   public void sayInformation() {
       System.out.println("์ €๋Š” ๋ณ‘์žฅ์ž…๋‹ˆ๋‹ค.");
   }
}
- Soldier ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋“ค์€ sayInformation() ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•จ์œผ๋กœ์จ ๊ณ„๊ธ‰์— ๋งž๋Š” ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. - ์ƒ์†
- **๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ํ•„๋“œ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ›์•„ ์žฌ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€**ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ
- extends ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์†์„ ํ‘œํ˜„
public class SamsungPlus extends Samsung {
   public SamsungPlus(String phoneNumber, String phoneName) {
       super(phoneNumber, phoneName);
   }

   public void orderBixby(String order) {
       if (this.power) System.out.println("๋น…์Šค๋น„์—๊ฒŒ " + order + " ๋ช…๋ น์„ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค.");
   }
}
- Samsung ํด๋ž˜์Šค๋ฅผ extends ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ์ƒ์†๋ฐ›์€ SamsungPlus ํด๋ž˜์Šค์ด๋‹ค.
- super() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋Š” ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์‚ฌ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.
- ์ƒ์†๋ฐ›์€ SamsungPlus ํด๋ž˜์Šค๋Š” ๊ธฐ์กด Samsung ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
- ๋˜ํ•œ, ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค๋งŒ์˜ ์†์„ฑ๊ณผ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
public static void main(String[] args) {
   SamsungPlus phone = new SamsungPlus("010-1234-5677", "๊ฐค๋Ÿญ์‹œ s24+");
   phone.powerOn();
   phone.call("010-1234-5678");
   phone.orderBixby("์Œ์•… ํ‹€์–ด์ค˜");
}
  • ์บก์Аํ™”
    • ํด๋ž˜์Šค ์•ˆ์— ์„œ๋กœ ์—ฐ๊ด€์žˆ๋Š” ์†์„ฑ๊ณผ ๊ธฐ๋Šฅ๋“ค์„ ํ•˜๋‚˜์˜ ์บก์А๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ
    • ๋ฐ์ดํ„ฐ๋ฅผ ์™ธ๋ถ€์—์„œ ํ•จ๋ถ€๋กœ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ณดํ˜ธ
    • ์ ‘๊ทผ์ œ์–ด์ž์™€ getter/setter๋กœ ์บก์Аํ™”๋ฅผ ํ‘œํ˜„

- ์ ‘๊ทผ ์ œ์–ด์ž์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
    - private๋Š” ๋‹จ์–ด ๋œป์ฒ˜๋Ÿผ ๋™์ผ ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค.
    - default๋Š” ์ ‘๊ทผ ์ œ์–ด์ž๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์‚ฌ์šฉ๋˜๋Š” ๋””ํดํŠธ ๊ฐ’์œผ๋กœ, ๋™์ผ ํŒจํ‚ค์ง€ ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
    - protected๋Š” ๋™์ผ ํŒจํ‚ค์ง€ ๋‚ด๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ•ด๋‹น ์ ‘๊ทผ์ž๋กœ ์„ ์–ธ๋œ ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ํด๋ž˜์Šค์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
    - public๋Š” ๋‹จ์–ด ๋œป์ฒ˜๋Ÿผ ์•„๋ฌด ๊ณณ์—์„œ ๋‹ค ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
public class People {
   private int money;
   private String name;
   public String nickName;
}
- People ํด๋ž˜์Šค์˜ ์†์„ฑ์ด๋‹ค.
- money๊ณผ name์€ ์™ธ๋ถ€์—์„œ ์ˆ˜์ •๋˜๋ฉด ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์— private๋กœ ์„ ์–ธํ–ˆ๋‹ค.
- nickname์˜ ๊ฒฝ์šฐ ์–ธ์ œ๋“ ์ง€ ๋ณ€ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— public๋กœ ์„ ์–ธํ–ˆ๋‹ค.
People people = new People(1000, "๊น€์ฒ ์ˆ˜", "์ˆ˜์ฒ ๊น€");

people.name = "ํ™๊ธธ๋™"; // Error
people.money = 1234; // Error
people.nickName = "๊น€๋ฐ•์ˆ˜"; // OK
- private๋กœ ์„ ์–ธ๋œ name๊ณผ money๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
- public๋กœ ์„ ์–ธ๋œ nickName์˜ ๊ฒฝ์šฐ ์™ธ๋ถ€์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
public int getMoney() {
   return money;
}

public void setMoney(int money) {
   this.money = money;
}

public String getName() {
   return name;
}

public void setName(String name) {
   this.name = name;
}
- get** : **์— ํ•ด๋‹นํ•˜๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ / ์ ‘๊ทผ์ž๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
- set** : **์— ํ•ด๋‹นํ•˜๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์„ค์ •ํ•˜๋Š” ํ•จ์ˆ˜ / ์„ค์ •์ž๋ผ๊ณ  ๋ถˆ๋ฆฐ๋‹ค.
- ํด๋ž˜์Šค ๋‚ด๋ถ€์— ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ private๋กœ ์„ ์–ธ๋œ ํ•„๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.
- ๊ทธ๋Ÿฌ๋‚˜, ๊ผญ ์ˆจ๊ฒจ์•ผํ•˜๋Š” ์ •๋ณด์˜ ๊ฒฝ์šฐ์—๋Š” setter๋ฅผ ์„ ์–ธํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์•„ ๋ณด์ธ๋‹ค.

์žฅ์ 

  • ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์ด ์šฉ์ดํ•˜๋‹ค.
  • ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๋‹ค.

๋‹จ์ 

  • ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ๋А๋ฆฌ๋‹ค.
  • ์„ค๊ณ„ ์‹œ ๋งŽ์€ ์‹œ๊ฐ„๊ณผ ๋…ธ๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค.