๐Ÿ“ฆ ์‘์ง‘๋„, ๊ฒฐํ•ฉ๋„, ์บก์Аํ™” - ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„์˜ ํ•ต์‹ฌ์„ ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ

์—…๋ฐ์ดํŠธ:
2 ๋ถ„ ์†Œ์š”

โœ… ๊ฐœ๋… ์š”์•ฝ

์šฉ์–ด ์ •์˜
์‘์ง‘๋„(Cohesion) ๋ชจ๋“ˆ ๋‚ด๋ถ€ ๊ตฌ์„ฑ ์š”์†Œ๋ผ๋ฆฌ ์„œ๋กœ ๊ด€๋ จ๋œ ์ •๋„
๊ฒฐํ•ฉ๋„(Coupling) ํ•œ ๋ชจ๋“ˆ์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ์— ์–ผ๋งˆ๋‚˜ ์˜์กดํ•˜๊ณ  ์žˆ๋Š”์ง€
์บก์Аํ™”(Encapsulation) ๊ฐ์ฒด ๋‚ด๋ถ€ ์ƒํƒœ/๋กœ์ง์„ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์ˆจ๊ธฐ๋Š” ๊ฒƒ

๐ŸŽฏ ์ข‹์€ ์„ค๊ณ„๋ž€?

์ผ๋ฐ˜์ ์œผ๋กœ ์ข‹์€ ์„ค๊ณ„๋Š” ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ฐ€์ง„ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

  • ์‘์ง‘๋„ โ†‘: ๋ชจ๋“ˆ ๋‚ด๋ถ€๊ฐ€ ํ•˜๋‚˜์˜ ์ฑ…์ž„์— ์ง‘์ค‘ โ†’ ๋ณ€๊ฒฝ์— ๊ฐ•ํ•œ ์ฝ”๋“œ
  • ๊ฒฐํ•ฉ๋„ โ†“: ๋‹ค๋ฅธ ๋ชจ๋“ˆ๊ณผ ์–ฝํžˆ์ง€ ์•Š์Œ โ†’ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜ โ†‘
  • ์บก์Аํ™” โ†‘: ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ˆจ๊น€ โ†’ ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ์— ๊ธฐ์—ฌ

๐Ÿ’ก ์˜ˆ์ œ 1: ์‘์ง‘๋„๊ฐ€ ๋‚ฎ์€ ํด๋ž˜์Šค

public class EmployeeManager {
    public void calculateSalary() {
        // ๊ธ‰์—ฌ ๊ณ„์‚ฐ ๋กœ์ง
    }

    public void sendEmailToCustomer() {
        // ๊ณ ๊ฐ์—๊ฒŒ ์ด๋ฉ”์ผ ๋ณด๋‚ด๋Š” ๋กœ์ง
    }

    public void printMonthlyReport() {
        // ์›”๊ฐ„ ๋ณด๊ณ ์„œ ์ถœ๋ ฅ
    }
}

โŒ ๋ฌธ์ œ์ 

  • ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์ฑ…์ž„์„ ๊ฐ€์ง
  • ๊ธ‰์—ฌ, ์ด๋ฉ”์ผ, ๋ณด๊ณ ์„œ ์ถœ๋ ฅ์€ ์—ฐ๊ด€์„ฑ ๋‚ฎ์€ ์ž‘์—…
  • ์‘์ง‘๋„๊ฐ€ ๋‚ฎ์Œ โ†’ ๋ณ€๊ฒฝ ์‹œ ์„œ๋กœ ์˜ํ–ฅ์„ ์ค„ ๊ฐ€๋Šฅ์„ฑ

โœ… ๊ฐœ์„ : ์‘์ง‘๋„ ๋†’์€ ๊ตฌ์กฐ

public class PayrollService {
    public void calculateSalary() {
        // ๊ธ‰์—ฌ ๊ด€๋ จ ์ฑ…์ž„๋งŒ ์ˆ˜ํ–‰
    }
}

public class EmailService {
    public void sendEmailToCustomer() {
        // ์ด๋ฉ”์ผ ์ „์†ก๋งŒ ์ˆ˜ํ–‰
    }
}

public class ReportPrinter {
    public void printMonthlyReport() {
        // ๋ณด๊ณ ์„œ ์ถœ๋ ฅ๋งŒ ์ˆ˜ํ–‰
    }
}
  • ๊ฐ๊ฐ์˜ ํด๋ž˜์Šค๋Š” ๋‹จ์ผ ์ฑ…์ž„(SRP) ์— ์ถฉ์‹ค
  • ๋‚ด๋ถ€ ์š”์†Œ๋“ค๋ผ๋ฆฌ ๊ด€๋ จ ์žˆ๊ณ  ์‘์ง‘๋ ฅ์ด ๋†’์Œ

๐Ÿ’ก ์˜ˆ์ œ 2: ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์€ ๊ตฌ์กฐ

public class OrderService {
    private UserService userService = new UserService(); // ์ง์ ‘ ์ƒ์„ฑ

    public void placeOrder() {
        userService.checkUserStatus();
        // ์ฃผ๋ฌธ ์ฒ˜๋ฆฌ ๋กœ์ง
    }
}

โŒ ๋ฌธ์ œ์ 

  • OrderService๋Š” UserService์˜ ๊ตฌ์ฒด์ ์ธ ์ƒ์„ฑ ๋ฐฉ์‹๊นŒ์ง€ ์•Œ๊ณ  ์žˆ์Œ
  • UserService๋ฅผ ๊ต์ฒดํ•˜๋ ค๋ฉด OrderService๋„ ํ•จ๊ป˜ ์ˆ˜์ • ํ•„์š”

โœ… ๊ฐœ์„ : ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„ (์˜์กด์„ฑ ์ฃผ์ž… ํ™œ์šฉ)

public class OrderService {
    private final UserService userService;

    public OrderService(UserService userService) {
        this.userService = userService;
    }

    public void placeOrder() {
        userService.checkUserStatus();
    }
}
  • OrderService๋Š” UserService์˜ ๊ตฌ์ฒด ๊ตฌํ˜„์„ ๋ชฐ๋ผ๋„ ๋จ
  • ์˜์กด์„ฑ ์—ญ์ „(DIP) โ†’ ๊ฒฐํ•ฉ๋„ ๋‚ฎ์•„์ง โ†’ ํ…Œ์ŠคํŠธ๋‚˜ ๋ณ€๊ฒฝ์ด ์‰ฌ์›€

๐Ÿงช ์˜ˆ์ œ 3: ์บก์Аํ™”๊ฐ€ ์•ฝํ•œ ๊ฐ์ฒด

public class BankAccount {
    public int balance;

    public void deposit(int amount) {
        balance += amount;
    }
}

โŒ ๋ฌธ์ œ์ 

  • ์™ธ๋ถ€์—์„œ balance๋ฅผ ์ง์ ‘ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ โ†’ ๋ฌด๊ฒฐ์„ฑ ๊นจ์งˆ ์ˆ˜ ์žˆ์Œ
BankAccount account = new BankAccount();
account.balance = -1000; // ์˜๋„์น˜ ์•Š์€ ์ƒํƒœ

โœ… ์บก์Аํ™” ๊ฐ•ํ™”: ์ ‘๊ทผ ์ œ์–ด์ž ํ™œ์šฉ

public class BankAccount {
    private int balance;

    public void deposit(int amount) {
        if (amount <= 0) throw new IllegalArgumentException();
        balance += amount;
    }

    public int getBalance() {
        return balance;
    }
}
  • ๋‚ด๋ถ€ ์ƒํƒœ๋ฅผ ์™ธ๋ถ€์— ๋…ธ์ถœํ•˜์ง€ ์•Š์Œ
  • ๋ฉ”์„œ๋“œ๋กœ๋งŒ ์กฐ์ž‘ โ†’ ์ƒํƒœ ์•ˆ์ •์„ฑ ๋ณด์žฅ
  • ์บก์Аํ™”๋ฅผ ํ†ตํ•ด ๊ฒฐํ•ฉ๋„ ๊ฐ์†Œ + ์‘์ง‘๋„ ์ฆ๊ฐ€

๐Ÿ”„ ์š”์•ฝ ๋น„๊ต

๊ธฐ์ค€ ์ข‹์ง€ ์•Š์€ ์„ค๊ณ„ ์ข‹์€ ์„ค๊ณ„
์‘์ง‘๋„ ์—ฌ๋Ÿฌ ์ฑ…์ž„ ํ˜ผํ•ฉ๋œ ํด๋ž˜์Šค ํ•˜๋‚˜์˜ ์ฑ…์ž„์— ์ง‘์ค‘
๊ฒฐํ•ฉ๋„ ๊ตฌ์ฒด ํด๋ž˜์Šค์— ์˜์กด ์ถ”์ƒํ™”, DI๋กœ ๋ถ„๋ฆฌ
์บก์Аํ™” ํ•„๋“œ ์ง์ ‘ ์ ‘๊ทผ ํ—ˆ์šฉ ์ƒํƒœ ์€๋‹‰, ๋ฉ”์„œ๋“œ ์ œ๊ณต

โœ… ๋งˆ๋ฌด๋ฆฌ ์ •๋ฆฌ

  • ์ข‹์€ ์„ค๊ณ„๋Š” ์บก์Аํ™”๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์ˆจ๊ธฐ๊ณ ,
    ์‘์ง‘๋„๋Š” ๋†’์ด๊ณ  ๊ฒฐํ•ฉ๋„๋Š” ๋‚ฎ์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

  • ์ด๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ์€ ๋ณ€๊ฒฝ์— ๊ฐ•ํ•˜๊ณ ,
    ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์šฐ๋ฉฐ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

ํƒœ๊ทธ: , , , , , , , ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ