undefined

์ž๋ฃŒ ์ถ”์ƒํ™”

๊ตฌํ˜„์„ ๊ฐ์ถ”๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถ”์ƒํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค

Getter์™€ Setter๊ฐ€ ์•„๋‹Œ, ์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌํ˜„์„ ๋ชจ๋ฅธ ์ฑ„ ์ž๋ฃŒ์™€ ํ•ต์‹ฌ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์ž๋ฃŒ๋ฅผ ์„ธ์„ธํ•˜๊ฒŒ ๊ณต๊ฐœํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ํŽธ์ด ์ข‹๋‹ค

์ž๋ฃŒ/๊ฐ์ฒด ๋น„๋Œ€์นญ

๊ฐ์ฒด์™€ ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์ •์˜๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์ƒ๋ฐ˜๋œ๋‹ค.

  • ๊ฐ์ฒด: ์ถ”์ƒํ™” ๋’ค๋กœ ์ž๋ฃŒ๋ฅผ ์ˆจ๊ธด ์ฑ„ ์ž๋ฃŒ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ•จ์ˆ˜๋งŒ ๊ณต๊ฐœํ•œ๋‹ค.
  • ์ž๋ฃŒ ๊ตฌ์กฐ: ์ž๋ฃŒ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณต๊ฐœํ•˜๋ฉฐ ๋ณ„๋‹ค๋ฅธ ํ•จ์ˆ˜๋Š” ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.

์‚ฌ์†Œํ•ด ๋ณด์ด์ง€๋งŒ ์ด ์ฐจ์ด๊ฐ€ ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋งค์šฐ ํฌ๋‹ค.

์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๋‘˜์˜ ์ฐจ์ด์ ์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž

๋„ํ˜• ํด๋ž˜์Šค๋ฅผ ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ - ์ ˆ์ฐจ์ ์ธ ๋„ํ˜•

class Square {
  topLeft: Point;
  side: number;
}
class Rectangle {
  topLeft: Point;
  height: number;
  width: number;
}
class Circle {
  center: Point;
  radius: number;
}

class Geometry {
  PI = 3.1415;

  area(shape: Object) {
    if (shape instanceof Square) {
      return shape.side * shape.side;
    } else if (shape instanceof Rectangle) {
      return shape.height * shape.width;
    } else if (shape instanceof Circle) {
      return shape.radius * shape.radius * this.PI;
    }
    throw Error('NoSuchShapeException')
  }
}

๊ฐ ๋„ํ˜• ํด๋ž˜์Šค๋Š” ์•„๋ฌด ๋ฉ”์„œ๋“œ๋„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋™์ž‘ ๋ฐฉ์‹์€ Geometry ํด๋ž˜์Šค์—์„œ ๊ตฌํ˜„ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ํ–ˆ์„ ๋•Œ๋Š”

  • ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๋„ํ˜• ํด๋ž˜์Šค๋Š” ์•„๋ฌด ์˜ํ–ฅ๋„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. (Geometry์— ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋˜๋ฏ€๋กœ)
  • ๋ฐ˜๋Œ€๋กœ ์ƒˆ ๋„ํ˜• ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” Geometry์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

๋„ํ˜• ํด๋ž˜์Šค๋ฅผ ๊ฐ์ฒด๋กœ ๊ตฌํ˜„ - ๋‹คํ˜•์ ์ธ ๋„ํ˜•

abstract class Shape {
  public abstract area(): number;
}

class Square implements Shape {
  private topLeft: Point;
  private side: number;

  public area(): number {
    return this.side * this.side;
  }
}
class Rectangle implements Shape {
  private topLeft: Point;
  private height: number;
  private width: number;

  public area(): number {
    return this.width * this.height;
  }
}
class Circle implements Shape {
  PI = 3.1415;
  private center: Point;
  private radius: number;

  public area(): number {
    return this.radius * this.radius * this.PI;
  }
}

์ ˆ์ฐจ์ ์ธ ๋„ํ˜•๊ณผ ์ •๋ฐ˜๋Œ€์˜ ํŠน์ง•์„ ๊ฐ–๋Š”๋‹ค.

  • ์ƒˆ๋กœ์šด ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ ค๋ฉด ๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ฐ˜๋Œ€๋กœ ์ƒˆ ๋„ํ˜• ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” ๊ธฐ์กด ๋ฉ”์„œ๋“œ๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ๋„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค.

์ž๋ฃŒ ๊ตฌ์กฐ vs ๊ฐ์ฒด

์•ž์„œ ์‚ดํŽด๋ดค๋“ฏ์ด ์ž๋ฃŒ ๊ตฌ์กฐ์™€ ๊ฐ์ฒด๋Š” ๊ทผ๋ณธ์ ์œผ๋กœ ์–‘๋ถ„๋œ๋‹ค.

๊ฐ์ฒด ์ง€ํ–ฅ ์ฝ”๋“œ์—์„œ ์–ด๋ ค์šด ๋ณ€๊ฒฝ์€ ์ ˆ์ฐจ์ ์ธ ์ฝ”๋“œ์—์„œ ์‰ฌ์šฐ๋ฉฐ ๊ทธ ๋ฐ˜๋Œ€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค.

์ ˆ์ฐจ์ ์ธ ์ฝ”๋“œ๋Š” ๊ธฐ์กด ์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์ƒˆ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฝ๋‹ค.
๊ฐ์ฒด ์ง€ํ–ฅ ์ฝ”๋“œ๋Š” ๊ธฐ์กด ํ•จ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์ƒˆ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์‰ฝ๋‹ค.

๋””๋ฏธํ„ฐ ๋ฒ•์น™

๋””๋ฏธํ„ฐ ๋ฒ•์น™์ด๋ž€, ๋ชจ๋“ˆ์€ ์ž์‹ ์ด ์กฐ์ž‘ํ•˜๋Š” ๊ฐ์ฒด์˜ ์†์‚ฌ์ •์„ ๋ชฐ๋ผ์•ผ ํ•œ๋‹ค๋Š” ๋ฒ•์น™์ด๋‹ค.

๊ฐ์ฒด๋Š” ์ž๋ฃŒ๋ฅผ ์ˆจ๊ธฐ๊ณ  ํ•จ์ˆ˜๋ฅผ ๊ณต๊ฐœํ•œ๋‹ค.

ํด๋ž˜์Šค C์˜ ๋ฉ”์„œ๋“œ f๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋งŒ ํ˜ธ์ถœํ•ด์•ผ ํ•œ๋‹ค.

  • ํด๋ž˜์Šค C
  • f๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด
  • f ์ธ์ˆ˜๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด
  • C ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜์— ์ €์žฅ๋œ ๊ฐ์ฒด

๋‹จ, ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋Š” ํ˜ธ์ถœํ•˜๋ฉด ์•ˆ๋œ๋‹ค.

์žก์ข… ๊ตฌ์กฐ

์ ˆ๋ฐ˜์€ ๊ฐ์ฒด, ์ ˆ๋ฐ˜์€ ์ž๋ฃŒ ๊ตฌ์กฐ์ธ ์žก์ข… ๊ตฌ์กฐ๋Š” ์ƒˆ๋กœ์šด ํ•จ์ˆ˜์™€ ์ƒˆ๋กœ์šด ์ž๋ฃŒ ๊ตฌ์กฐ ๋ชจ๋‘ ์ถ”๊ฐ€ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ•จ์ˆ˜๋‚˜ ํƒ€์ž…์„ ๋ณดํ˜ธํ• ์ง€ ๊ณต๊ฐœํ• ์ง€ ํ™•์‹ ํ•˜์ง€ ๋ชปํ•  ๋•Œ ์ด๋Ÿฐ ๊ตฌ์กฐ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

์ž๋ฃŒ ์ „๋‹ฌ ๊ฐ์ฒด (DTO)

DTO: ๊ณต๊ฐœ ๋ณ€์ˆ˜๋งŒ ์žˆ๊ณ  ํ•จ์ˆ˜๊ฐ€ ์—†๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ์ฒด

์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ํ•˜๊ฑฐ๋‚˜ ์†Œ์ผ“์—์„œ ๋ฐ›์€ ๋ฉ”์‹œ์ง€์˜ ๊ตฌ๋ฌธ์„ ๋ถ„์„ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

ํ™œ์„ฑ ๋ ˆ์ฝ”๋“œ

DTO์˜ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ.

๊ณต๊ฐœ ๋ณ€์ˆ˜ ๋˜๋Š” ๋น„๊ณต๊ฐœ ๋ณ€์ˆ˜์— getter/setter๊ฐ€ ์žˆ๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ, save๋‚˜ find์™€ ๊ฐ™์€ ํƒ์ƒ‰ ํ•จ์ˆ˜ ๋˜ํ•œ ์ œ๊ณตํ•œ๋‹ค.

ํ™œ์„ฑ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค.

  • ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜๊ฒŒ ๋˜๋ฉด ์žก์ข… ๊ตฌ์กฐ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.
  • ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ๋‹ด์œผ๋ฉด์„œ ๋‚ด๋ถ€ ์ž๋ฃŒ๋ฅผ ์ˆจ๊ธฐ๋Š” ๊ฐ์ฒด๋Š” ๋”ฐ๋กœ ์ƒ์„ฑํ•œ๋‹ค.

๋งˆ๋ฌด๋ฆฌ

๊ฐœ๋ฐœ์ž๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด๋ผ๋Š” ์ƒ๊ฐ์— ๋น ์ ธ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค.

์ƒˆ๋กœ์šด ํ•จ์ˆ˜๊ฐ€ ์ถ”๊ฐ€๋˜๋Š” ์ผ€์ด์Šค๊ฐ€ ๋งŽ์œผ๋ฉด ์ ˆ์ฐจ์ ์ธ ์ฝ”๋“œ๊ฐ€ ๋” ์ ํ•ฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹œ์Šคํ…œ์˜ ํŠน์„ฑ์— ๋”ฐ๋ผ ๊ฐ€์žฅ ์ ํ•ฉํ•œ ๊ตฌํ˜„ ๋ฐฉ์‹์„ ํƒํ•ด์•ผ ํ•  ๊ฒƒ์ด๋‹ค.