JAVA

[Java] ์ถ”์ƒํ™”์™€ ์ถ”์ƒ ํด๋ž˜์Šค

jjingle 2024. 1. 8. 13:56

์ถ”์ƒํ™”(abstraction) ?

์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ˆจ๊ธฐ๊ณ  ์ค‘์š”ํ•œ ์ •๋ณด๋งŒ์„ ๋‚˜ํƒ€๋ƒ„์œผ๋กœ์จ ํ•ต์‹ฌ์— ์ง‘์ค‘ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฐœ๋…

 

 

์ถ”์ƒํ™”์˜ ํ•„์š”์„ฑ

  • ๋ณต์žก์„ฑ ๊ฐœ์„  : ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ˆจ๊ธฐ๊ณ  ์ค‘์š”ํ•œ ์ •๋ณด๋งŒ์„ ํ‘œํ˜„ํ•จ์œผ๋กœ์จ ๊ฐ์ฒด ๊ฐ„์˜ ๋ณต์žก์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  • ์ค‘๋ณต ๋ฐฉ์ง€ : ๊ณตํ†ต์ ์ธ ์ฝ”๋“œ๋ฅผ ๋ณ„๋กœ๋„ ๊ตฌํ˜„ํ•จ์œผ๋กœ์จ ์ฝ”๋“œ์˜ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ์žฌ์‚ฌ์šฉ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ
  • ๋ณด์•ˆํ–ฅ์ƒ : ํ”„๋กœ๊ทธ๋žจ์˜ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ์ˆจ๊น€์œผ๋กœ์จ ์ฝ”๋“œ ๋ณด์•ˆ์— ๋„์›€์ด ๋จ

 

์ถ”์ƒํ™”์˜ ์œ ํ˜•

  • ๊ณผ์ • ์ถ”์ƒํ™” : ์ƒ์„ธ ์ˆ˜ํ–‰ ๋‹จ๊ณ„ ๊ณ ๋ ค ์ „์— ์ƒ์œ„ ์ˆ˜์ค€์—์„œ ์ˆ˜ํ–‰ ํ๋ฆ„๋งŒ ๋จผ์ € ์„ค๊ณ„ํ•˜๋Š” ์›๋ฆฌ
  • ๋ฐ์ดํ„ฐ ์ถ”์ƒํ™” : ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋Œ€ํ‘œํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ์„ค๊ณ„ ์›๋ฆฌ
  • ์ œ์–ด ์ถ”์ƒํ™” : ์ œ์–ด ํ๋ฆ„์„ ๋Œ€ํ‘œํ•  ์ˆ˜ ์žˆ๋Š” ํ‘œํ˜„์œผ๋กœ ๋Œ€์ฒดํ•˜๋Š” ์„ค๊ณ„ ์›๋ฆฌ

 

์ถ”์ƒํ™” ๊ตฌํ˜„ ๋ฐฉ๋ฒ•

  • ์ถ”์ƒ ํด๋ž˜์Šค
    • ํ•˜๋‚˜ ์ด์ƒ์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค
    • ์ถ”์ƒ ๋ฉ”์„œ๋“œ ์™ธ์— ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ
  • ์ธํ„ฐํŽ˜์ด์Šค
    • ์ถ”์ƒ ๋ฉ”์„œ๋“œ(์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ)๋งŒ ์„ ์–ธํ•จ
    • ์ธํ„ฐํŽ˜์ด์Šค ๋ฉ”์„œ๋“œ ์™ธ์— ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋Š” ํฌํ•จํ•  ์ˆ˜ ์—†์Œ

 

์ถ”์ƒ ํด๋ž˜์Šค ์ •์˜

  • ํ•˜๋‚˜ ์ด์ƒ์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ abstract ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๊ณ  ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Œ
  • ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”์„œ๋“œ์˜ ์„ ์–ธ๋งŒ ์žˆ๊ณ  abstract ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ ์–ธํ•˜๋ฉฐ ์‹ค์ œ ๊ตฌํ˜„์€ ์ƒ์† ๋ฐ›์€ ์ž์‹ ํด๋ž˜์Šค์—์„œ ์ด๋ฃจ์–ด์ง
abstract class Car {
    protected String brand;
    protected String model;
    
    public abstract void drive();
}

public class ElectricCar extends Car {
	public void drive() {
        	System.out.println("์ „๊ธฐ์ฐจ ์ฃผํ–‰");
    }
}

 

 

์ถ”์ƒ ํด๋ž˜์Šค ํ•„์š”์„ฑ

  • ์ถ”์ƒ ํด๋ž˜์Šค์—์„œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ž์‹ ํด๋ž˜์Šค์—์„œ ์šฉ๋„์— ๋งž๊ฒŒ ์žฌ์ •์˜ํ•จ์œผ๋กœ์จ, ๋‹คํ˜•์„ฑ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋ฉฐ ์ฝ”๋“œ ์žฌ์‚ฌ์šฉ์— ๋„์›€์„ ์คŒ
  • ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ณ  ์ถ”์ƒํ™”๋ฅผ ์‹คํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์˜ ๋ณต์žก๋„๋ฅผ ๋‚ฎ์ถ”๊ณ  ๊ตฌ์กฐ๋ฅผ ๋”์šฑ ์กฐ์งํ™”ํ•  ์ˆ˜ ์žˆ์Œ
  • ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์œ ์ง€๋ณด์ˆ˜์— ๋„์›€์„ ์คŒ

 

์ถ”์ƒ ํด๋ž˜์Šค ์ฃผ์˜์‚ฌํ•ญ

  • ์ผ๋ฐ˜ ๋ฉ”์„œ๋“œ ์™ธ์— ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์œผ๋ฉด ๋ฐ˜๋“œ์‹œ ์ถ”์ƒ ํด๋ž˜์Šค๋กœ ์„ ์–ธํ•ด์•ผ ํ•จ
  • ์ถ”์ƒ ํด๋ž˜์Šค์—์„œ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ž์‹ ํด๋ž˜์Šค์—์„œ ํ•ด๋‹น ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•จ
  • ์ถ”์ƒ ํด๋ž˜์Šค๋Š” ์ž์‹ ์˜ ์ธ์Šคํ„ด์Šค๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ
  • ์ž์‹ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ, ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค์˜ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•จ