상속과 Composition

qoqo_mi·2022년 12월 6일

composition 과 상속

상속:

  • IS-A관계로 정의될 수 있으며, 부모 클래스를 확장하는 개념
  • 상속을 받은 자식 클래스는 부모클래스의 변수와 메소드 접근이 가능하고 메소드를 재정의할 수 있다.
    컴포지션(조합):
  • HAS-A 관계로 정의될 수 있으며, 기존 클래스가 새로운 클래스의 구성요소가 되는 것이다.
  • 기존에 존재하는 객체를 맴버 변수로 이용, 새로운 객체를 구현하는 방법

상속

  • 코드의 재사용을 통해서 중복을 줄인다.
  • 확장성이 증가한다.
  • 클래스 간의 계층적 관계를 구성함으로써 다형성을 구현할 수 있다.

단점 : 캡슐화를 깨트린다. 상위 클래스의 변수와 메소드가 하위 클래스에게 노출되기 때문이다.

Composition(조합)

  • 기존의 클래스를 확장하는 대신, 새로운 클래스를 만들고 private필드로 기존 클래스의 인스턴스를 참조하게 하는 방법을 통해 기능확장을 할 수 있으며, 이를 Composition(조합 || 구성) 이라 한다.

import { useMutation, useQueryClient } from 'react-query'
import { useForm } from 'react-hook-form'

export const useItemForm = (userId: number, profileId: number) => {
  // item을 컴포지션처럼 사용할 수 있다.
  const item = useItem(userId, profileId)
  const form = useForm({...})
  return {
    form,
    item,
  }
}

export const useBiscuitFrom = (userId: number, profileId: number) => {
 // item을 컴포지션처럼 사용할 수 있다.
  const item = useItem(userId, profileId)
  const biscuitForm = useForm({...})
  return {
    biscuitForm,
    item,
  }
}

export const useItem = (userId: number, profileId: number) => {
  const queryClient = useQueryClient()

	... 중간 코드

  const { mutate: payment } = useMutation(paymentTest, {
    onSuccess: () => {
      queryClient.refetchQueries(['USER', userId, profileId])
    },
  })
  const { mutate: recall } = useMutation(recallTest, {
    onSuccess: () => {
      queryClient.refetchQueries(['USER', userId, profileId])
    },
  })

  return {
    payment,
    recall,
  }
}

0개의 댓글