Post

🐒 10. Object Oriented Design

⭐ 객체 지ν–₯ 섀계

  • 기술적 문제, μ‹€μ œ μƒν™œμ—μ„œ μ ‘ν•  수 μžˆλŠ” 객체듀을 κ΅¬ν˜„ν•˜λŠ” ν΄λž˜μŠ€μ™€ λ©”μ„œλ“œλ₯Ό λŒ€λž΅μ μœΌλ‘œ κ·Έλ €λ³΄λŠ” λ¬Έμ œλ‹€
  • μœ μ§€λ³΄μˆ˜κ°€ κ°€λŠ₯ν•œ 객체 지ν–₯적 μ½”λ“œλ₯Ό λ§Œλ“€ 수 μžˆλŠ”μ§€ 이해해야 ν•œλ‹€
  • 접근법
    • λͺ¨ν˜Έμ„±μ˜ ν•΄μ†Œ
      • λŒ€κ°œ 고의적으둜 λͺ¨ν˜Έμ„±μ„ λˆλ‹€
    • 핡심 객체의 섀계
      • μ‹œμŠ€ν…œμ— 넣을 핡심 객체가 무엇인지 μƒκ°ν•΄λ΄μ•Όν•œλ‹€
    • 관계 뢄석
      • 객체 μ‚¬μ΄μ˜ 객체λ₯Ό 뢄석해야 ν•œλ‹€
      • μ–΄λ–€ 객체에 속해 μžˆλŠ”κ°€
      • λ‹€λ₯Έ κ°μ²΄λ‘œλΆ€ν„° 상속을 λ°›μ•˜λŠ”κ°€
      • κ΄€κ³„λŠ” λ‹€λŒ€λ‹€ 인가 μΌλŒ€λ‹€ 인가

⭐ μ‹œμŠ€ν…œμ˜ 핡심 μ»΄ν¬λ„ŒνŠΈ

  • μ‹œμŠ€ν…œμ€ μ•„λ§ˆλ„ λ°μ΄ν„°λ² μ΄μŠ€, μ‚¬μš©μžλ“€, μ„œλ²„λ“€λ‘œ ꡬ성될 것
    • λ°μ΄ν„°λ² μ΄μŠ€λŠ” μ§€μ†μ μœΌλ‘œ 보관할 μžλ£Œλ“€
      • μ‚¬μš©μž λ¦¬μŠ€νŠΈλ‚˜ μ±„νŒ… λ‚΄μ—­ 등을 λ³΄κ΄€ν•˜κΈ° μœ„ν•΄ μ‚¬μš©
      • SQL λ°μ΄ν„°λ² μ΄μŠ€λ„ μ’‹μ§€λ§Œ 규λͺ¨ ν™•μž₯성이 ν•„μš”ν•œ κ²½μš°μ—λŠ” BigTable μ‚¬μš©
    • ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„ ν†΅μ‹ μ—λŠ” XML μ‚¬μš©
      • κ°€μž₯ 잘 μ••μΆ•λœ ν˜•νƒœλŠ” μ•„λ‹ˆμ§€λ§Œ, 컴퓨터와 μ‚¬λžŒ λͺ¨λ‘μ—κ²Œ 읽기 νŽΈν•¨
    • μ„œλ²„λŠ” μ—¬λŸ¬ λŒ€λ‘œ κ΅¬μ„±λœλ‹€
      • λ°μ΄ν„°λŠ” μ„œλ²„μ— λΆ„ν• ν•΄ μ €μž₯ν•  것
      • 데이터λ₯Ό μ°Ύμ•„ μ„œλ²„ 사이클 μ˜€λΌκ°€λ½ν•΄μ•Ό ν•  수 μžˆλ‹€
      • 탐색 μ˜€λ²„ν—€λ“œλ₯Ό μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•΄ μ–΄λ–€ 데이터λ₯Ό μ—¬λŸ¬ μ„œλ²„μ— 볡사해 λ‘˜ 수 μž‡λ‹€

⭐ 핡심 객체와 λ©”μ„œλ“œ

  • μ‚¬μš©μž, λŒ€ν™”, μƒνƒœ 정보 λ©”μ‹œμ§€ λ“±μ˜ κ°œλ…μ΄ μ‹œμŠ€ν…œμ˜ 핡심 객체듀을 ꡬ성할 κ²ƒμž„

⭐ κ°€μž₯ ν’€κΈ° μ–΄λ €μš΄ λ¬Έμ œλŠ”?

  1. μ–΄λ–€ μ‚¬μš©μžκ°€ 온라인 μƒνƒœμΈμ§€ μ–΄λ–»κ²Œ μ•Œ 수 μžˆλŠ”κ°€?
  • μ‚¬μš©μžκ°€ λ‘œκ·Έμ•„μ›ƒν•  λ•Œ μ‹œμŠ€ν…œμ— μ•Œλ¦¬λŠ” 방법을 μ“΄λ‹€κ³  해도 ν™•μ‹€ν•˜κ²ŒλŠ” μ•Œ 수 μ—†λ‹€
  • μ‚¬μš©μžμ˜ 인터넷 연결이 κ°‘μžκΈ° μ£½λŠ” κ²½μš°κ°€ μžˆμ„ 수 μžˆλ‹€
  • 주기적으둜 μ‚¬μš©μžμ˜ μƒνƒœλ₯Ό ν™•μΈν•˜λŠ” 방법을 μ‚¬μš©ν•˜λ©΄ 정확성을 높일 수 μžˆμ„ 것이닀
  1. μ„œλ²„μ˜ 규λͺ¨ ν™•μž₯성은 μ–΄λ–»κ²Œ 확보해야 ν•˜λ‚˜?
  • μ±„νŒ… μ„œλ²„λ₯Ό μ„€κ³„ν•˜λ©΄μ„œ 규λͺ¨ ν™•μž₯성에 λŒ€ν•΄μ„œλŠ” 신경쓰지 μ•Šμ•˜μ§€λ§Œ κ½€ μ€‘μš”ν•¨
  • 데이터λ₯Ό μ—¬λŸ¬ μ„œλ²„μ— λΆ„ν• ν•΄μ„œ μ €μž₯ν•΄μ•Ό ν•  ν•„μš”λ„ 생길 것인데, λΆ„μ‚°λœ 정보 κ°„ 뢈일치 문제λ₯΄ 더 깊이 고민해봐야 ν•œλ‹€
  1. Dos 곡격은 μ–΄λ–»κ²Œ λ§‰λ‚˜
  • ν΄λΌμ΄μ–ΈνŠΈλ“€μ΄ μ„œλ²„λ‘œ 데이터 ν‘Έμ‹œ ν•  수 있음..

⭐ Circular 클래슀 κ΅¬ν˜„ν•˜κΈ°

  • rotate(int shiftRight) ν˜ΈμΆœν•  λ•Œλ§ˆλ‹€ μ‹€μ œ μ›μ†Œλ₯Ό μ‹œν”„νŠΈν•˜λŠ” 것
  • μ‹€μ œλ‘œ μ›μ†Œλ₯Ό μ‹œν”„νŠΈν•˜λŠ”κ²Œ μ•„λ‹ˆλΌ shiftRight 만큼 head 만 μ›€μ§μ—¬μ£ΌλŠ” 것
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class CircularArray<T> {
  private items: T[];
  private head = 0;

  constructor(capacity: number) {
    this.items = new Array(capacity);
  }

  private convert(index: number): number {
    if (index < 0) index += this.items.length;
    return (this.head + index) % this.items.length;
  }

  public rotate(shiftRight: number): void {
    this.head = this.convert(shiftRight);
  }

  public get(i: number): T {
    if (i < 0 || i >= this.items.length) {
      throw new Error('Index out of bounds');
    }
    return this.items[this.convert(i)];
  }

  public set(i: number, item: T): void {
    this.items[this.convert(i)] = item;
  }

  *[Symbol.iterator](): Iterator<T> {
    for (let i = 0; i < this.items.length; i++) {
      yield this.get(i);
    }
  }
}

⭐ μ•Œκ³ λ¦¬μ¦˜

  • 지뒰놓기
    • μž„μ˜μ˜ 셀을 κ³ λ₯Έ λ’€ 지뒰λ₯Ό 놓을 수 있으며 놓고 μ•„λ‹ˆλ©΄ λ‹€λ₯Έ μž₯μ†Œλ₯Ό μ„ νƒν•˜λŠ” 것
    • 지뒰가 μ•„μ£Ό λ§Žμ€ 경우 ꡉμž₯히 느렀질 μˆ˜κ°€ μž‡λ‹€
    • 이미 지뒰가 μžˆλŠ” 셀을 λ°˜λ³΅ν•΄μ„œ μ„ νƒν•˜λŠ” 상황에 놓일 수 μžˆλ‹€
  • 빈 κ³΅κ°„μ˜ ν™•μž₯
    • 빈 곡간을 ν™•μž₯ν•˜λŠ” 것은 반볡적 ν˜Ήμ€ μž¬κ·€μ μœΌλ‘œ μˆ˜ν–‰
    • 각 빈 μ…€μ˜ μ£Όλ³€ 셀은 λΉ„μ–΄ μžˆλŠ” μ…€ μ•„λ‹ˆλ©΄ 숫자 μ…€
    • λ‘˜ λ‹€ 뒀집긴 ν•΄μ•Ό 함
    • 빈 셀을 λ’€μ§‘μ—ˆλ‹€λ©΄, 뒀집은 μ…€μ˜ μ£Όλ³€ 셀도 뒀집어야 ν•˜λ―€λ‘œ 큐에 μƒˆλ‘œ λ„£μ–΄μ€˜μ•Ό ν•œλ‹€
This post is licensed under CC BY 4.0 by the author.