SOLID원칙을 들어가기전에.. OOP의 기본 개념다형성 캡슐화 합성 등에 대해 정리를 해보고자 합니다.
OOP의 개념을 프론트앤드의 입장에서 정리하려고 하다보니 생각보다 예시가 적절하지 않다라는 느낌이 들기도합니다..

1. 캡슐화 (Encapsulation)

  • 정의: 객체의 내부 상태(데이터)와 이를 다루는 메서드(기능)를 하나의 단위로 묶는 것을 의미하며, 외부에서는 객체 내부에 직접 접근하지 못하도록 숨기는 것을 말합니다.
  • 장점: 캡슐화를 통해 외부에서 객체의 내부 구조를 알 필요 없이 메서드를 통해서만 데이터를 조작하게 되어, 코드의 복잡성을 줄이고 유지보수를 용이하게 합니다.
  • 예시 (React):
    const MyComponent = () => {
      const [count, setCount] = useState(0);
    
    const increment = () => {
      setCount(prevCount => prevCount + 1); 
    };
    
      return <button onClick={increment}>{count}</button>;
    };
    count는 컴포넌트 내부에 캡슐화된 상태 정보로 볼 수 있으며, 외부에서는 이를 직접 수정할 수 없습니다.
    setCount나 setCount 가 포함된 함수를 통해서 상태를 업데이트 할 수 있습니다.
    즉 count는 MyComponent 내부에 캡슐화 되어 있으며, 외부에서는 직접 수정할 수 없고 incrament 함수를 통해 조작할 수 있습니다.

 

 

 

2. 합성 (Composition)

  • 정의: 여러 개의 객체를 하나로 묶어 더 큰 복합 객체를 만드는 방식으로, 객체 간 상속보다는 상호 협력을 통해 재사용성을 높이는 디자인 패턴입니다.
  • 장점: 합성을 사용하면 객체 간 결합이 느슨해지고, 유연한 구조를 만들 수 있어 유지보수성과 확장성이 향상된다. 상속의 문제점을 피하고, 더 많은 재사용성을 제공할 수 있습니다.
  • 예시 (React):
    const PageLayout = ({ children }) => (
      <div>
        <Header />
        <main>{children}</main>
        <Footer />
      </div>
    );
    
    const MyPage = () => (
      <PageLayout>
        <section>My Content</section>
      </PageLayout>
    );

    리액트에서는 합성을 통해 컴포넌트들을 조합하여 다양한 컴포넌트를 만들 수 있습니다.

3. 다형성 (Polymorphism)

  • 정의: 여러 클래스가 같은 인터페이스나 메서드 명을 공유하면서 서로 다른 방식으로 동작하는 특성을 의미합니다. 이는 객체 지향의 중요한 원칙으로, 하나의 타입을 여러 방식으로 사용할 수 있게 합니다.
    리엑트에서의 다형성은 props를 통해 동일한 컴포넌트가 다른 props를 받으면 다르게 동작하게 만들어서 
    다형성을 적용할 수 있습니다. 
  • 장점: 다형성을 사용하면 코드의 유연성과 확장성이 높아지며, 인터페이스나 추상 클래스 등을 활용해 기능을 확장할 수 있다.
  • 예시 (React):
    function Button({ onClick }) {
      return <button onClick={onClick}>Click me</button>;
    }
    
    // Different behaviors
    <Button onClick={() => console.log("Button 1 clicked")} />;
    <Button onClick={() => alert("Button 2 clicked")} />;

    동일한 <Button> 컴포넌트가 props를  받아 서로 다르게 동작하는것으로 이용할 수 있습니다.
    이를 통해 컴포넌트를 재사용하면서도 서로 다른 행동을 할 수 있게 합니다
    (예시로서 적절한지 모르겠습니다.. )

 

정리

  • 캡슐화는 객체의 데이터와 메서드를 하나로 묶고, 외부로부터 보호하는 개념.
  • 합성은 여러 객체를 조합해 새로운 기능을 만드는 방식으로, 상속보다 더 유연한 객체 재사용을 가능하게 함.
  • 다형성은 같은 인터페이스나 메서드를 사용하되, 객체마다 다른 방식으로 동작하는 특성으로, 유연성과 확장성을 높여줌.

이러한 개념들은 객체 지향 프로그래밍의 핵심 원칙으로, 더 나은 코드 설계와 유지보수를 가능하게 한다.

+ Recent posts