๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์Šคํ„ฐ๋””/์˜ค๋ธŒ์ ํŠธ

[์˜ค๋ธŒ์ ํŠธ] 1์žฅ '๊ฐ์ฒด, ์„ค๊ณ„'

by moon101 2022. 10. 14.

1์žฅ์—์„œ๋Š” ํ‹ฐ์ผ“ ํŒ๋งค ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๊ฐ€ ๋ฌด์—‡์ธ์ง€, ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„๊ฐ€ ์™œ ํ•„์š”ํ•œ์ง€์— ๋Œ€ํ•ด์„œ ์–˜๊ธฐํ•œ๋‹ค. 

 

1์žฅ ์š”์•ฝ

์ ˆ์ฐจ์ ์ธ ์ฝ”๋“œ(ํ”„๋กœ์„ธ์Šค์™€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ๋ชจ๋“ˆ์— ์œ„์น˜) => ๊ฐ์ฒด์ง€ํ–ฅ์  ์ฝ”๋“œ(๋ฐ์ดํ„ฐ์™€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์ผํ•œ ๋ชจ๋“ˆ ์•ˆ์— ์œ„์น˜)๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ๋ชจ๋“ˆ์ด ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ์„ธ ๊ฐ€์ง€ ๊ธฐ๋Šฅ (1. ์‹คํ–‰ ์ค‘์— ์ œ๋Œ€๋กœ ๋™์ž‘ํ•ด์•ผ ํ•˜๋ฉฐ, 2. ๋ณ€๊ฒฝ์ด ์‰ฌ์›Œ์•ผ ํ•˜๊ณ , 3. ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์•ผ ํ•œ๋‹ค.)์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€๋‹ค.

 

์˜์กด์„ฑ(dependency)์€ ์„ค๊ณ„๋ฅผ ์–ด๋ ต๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„(coupling)๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ”๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์บก์Šํ™”(encapsulation)๊ฐ€ ์žˆ๋Š”๋ฐ ์บก์Šํ™”๋Š” ๊ฐœ๋…์ ์ด๋‚˜ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๊ฐ์ฒด ๋‚ด๋ถ€์˜ ์„ธ๋ถ€์ ์ธ ์‚ฌํ•ญ์„ ๊ฐ์ถ”์–ด ๊ฐ์ฒด ๋‚ด๋ถ€๋กœ์˜ ์ ‘๊ทผ์„ ์ œํ•œํ•˜์—ฌ ๊ฐ์ฒด์™€ ๊ฐ์ฒด ์‚ฌ์ด์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๋‹ค. ๋ถˆํ•„์š”ํ•œ ์„ธ๋ถ€์‚ฌํ•ญ์„ ๊ฐ์ฒด ๋‚ด๋ถ€๋กœ ์บก์Šํ™”ํ•˜๋Š” ๊ฒƒ์€ ๊ฐ์ฒด์˜ ์ž์œจ์„ฑ์„ ๋†’์ด๊ณ  ์‘์ง‘๋„(cohesion) ๋†’์€ ๊ฐ์ฒด๋“ค์˜ ๊ณต๋™์ฒด๋ฅผ ์ฐฝ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค. (p.29)

 

๊ฐ์ฒด์ง€ํ–ฅ์—์„œ ๊ฐ ๊ฐ์ฒด๋Š” ์Šค์Šค๋กœ ์ฑ…์ž„์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž์œจ์ ์ธ  ์กด์žฌ์ด๋‹ค. ๋น„๋ก ํ˜„์‹ค์„ธ๊ณ„์—์„œ๋Š” Bag๊ฐ™์ด ์ˆ˜๋™์ ์ธ ์กด์žฌ๋„  ์˜์ธํ™”(anthropomorphism)๋ฅผ ํ†ตํ•ด ๋Šฅ๋™์ ์ด๊ณ  ์ž์œจ์ ์ธ ์กด์žฌ๊ฐ€ ๋œ๋‹ค. 

 

 

๊ณต๋ถ€๋ฐฉ๋ฒ•

  1. ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ๋กœ ์–˜๊ธฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณธ๋ฌธ์— ๋‚˜์˜จ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„ ํ•œ ์ค„ ํ•ด์„ํ•˜๋ฉด์„œ ์ฝ์—ˆ๋‹ค. ์ค‘๊ฐ„์— ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ ๊ฐ€๋Š” ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ค๋ฉด ๊ด€๋ จ๋œ ์ž๋ฐ”๋ฅผ ๋‹ค์‹œ ๋ณต์Šตํ–ˆ๋‹ค. 
  2. ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ๊ณผ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋‹ค์ด์–ด๊ทธ๋žจ์„ ๋ณด๋ฉด์„œ ํด๋ž˜์Šค ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•˜๋ฉด์„œ ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๋ณด์•˜๋‹ค.
  3. ์„ค๊ณ„๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•, ์ฆ‰ ์บก์Šํ™”๋ฅผ ๋‹ค์Œ ํŽ˜์ด์ง€๋ฅผ ๋ณด์ง€ ์•Š๊ณ  ์Šค์Šค๋กœ ๋ณ€๊ฒฝํ•ด๋ณด์•˜๋‹ค. ์ด 3๋ฒˆ์„ ํ˜ผ์ž ์ž‘์„ฑํ•ด ๋ณด์•˜๊ณ  3๋ฒˆ ๋‹ค ์ฑ…๊ณผ ๋‹ฌ๋ž์ง€๋งŒ ์Šค์Šค๋กœ ๊ณ ๋ฏผํ•ด ๋ณผ ์ˆ˜ ์žˆ์–ด์„œ ๊ฐœ์„ ๋œ ์ฝ”๋“œ๋ฅผ ๋ณด์•˜์„ ๋•Œ ์ดํ•ด๊ฐ€ ๋” ์ž˜ ๋˜์—ˆ๋‹ค.  
    • ๋‹ค์Œ๋ฒˆ์—๋Š” ์ฝ”๋“œ ๋‚ด์šฉ ์ „์ฒด๋ฅผ ๊ณ ๋ คํ•˜๋ฉฐ, ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ณ , ๋ฆฌํ„ดํƒ€์ž…์— ๋Œ€ํ•ด ๋” ๊ณต๋ถ€ํ•ด์•ผ ๋  ๊ฒƒ ๊ฐ™๋‹ค. 

 

์ถ”๊ฐ€: ์ž๋ฐ” ์ปฌ๋ ‰์…˜ ๊ณต๋ถ€ ๋‚ด์šฉ (์ž๋ฐ”์˜ ์ •์„ ์ฑ•ํ„ฐ 11)

  • List ์ธํ„ฐํŽ˜์ด์Šค, ArrayList ๊ตฌํ˜„ํด๋ž˜์Šค
  • ์ค‘๋ณตํ—ˆ์šฉ, ์ €์žฅ์ˆœ์„œ ์œ ์ง€
  • Object remove(int index) : ์ง€์ •๋œ ์œ„์น˜(index)์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐ
  • asList: 
@SafeVarargs
public static <T> List<T> asList(T... a)
Returns a fixed-size list backed by the specified array. (Changes to the returned list "write through" to the array.) This method acts as bridge between array-based and collection-based APIs, in combination with Collection.toArray(). The returned list is serializable and implements RandomAccess. This method also provides a convenient way to create a fixed-size list initialized to 
contain several elements:

     List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
 
Type Parameters:
T - the class of the objects in the array
Parameters:
a - the array by which the list will be backed
Returns:
a list view of the specified array

์ฑ…์— ๋‚˜์˜จ ์ฝ”๋“œ

public class TicketOffice {
	private Long amount;
    private List<Ticket> tickets = new ArrayList<>();
    
    public TicketOffice(Long amount, Ticket ... tickets) {
    	this.amount = amount;
        this.tickets.addAll(Arrays.asList(tickets));
    }
    
    public Ticket getTicket() {
    	return tickets.remove(0);
    }
    
    public void minusAmount(Long amount) {
    	this.amount -= amount;
    }
    
    public void plusAmount(Long amount) {
    	this.amount += amount;
    }
}

 

๋Œ“๊ธ€