SOLID원칙을 들어가기전에.. OOP의 기본 개념인 다형성 캡슐화 합성 등에 대해 정리를 해보고자 합니다.
OOP의 개념을 프론트앤드의 입장에서 정리하려고 하다보니 생각보다 예시가 적절하지 않다라는 느낌이 들기도합니다..
1. 캡슐화 (Encapsulation)
- 정의: 객체의 내부 상태(데이터)와 이를 다루는 메서드(기능)를 하나의 단위로 묶는 것을 의미하며, 외부에서는 객체 내부에 직접 접근하지 못하도록 숨기는 것을 말합니다.
- 장점: 캡슐화를 통해 외부에서 객체의 내부 구조를 알 필요 없이 메서드를 통해서만 데이터를 조작하게 되어, 코드의 복잡성을 줄이고 유지보수를 용이하게 합니다.
- 예시 (React):
count는 컴포넌트 내부에 캡슐화된 상태 정보로 볼 수 있으며, 외부에서는 이를 직접 수정할 수 없습니다.const MyComponent = () => { const [count, setCount] = useState(0); const increment = () => { setCount(prevCount => prevCount + 1); }; return <button onClick={increment}>{count}</button>; };
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를 받아 서로 다르게 동작하는것으로 이용할 수 있습니다.
이를 통해 컴포넌트를 재사용하면서도 서로 다른 행동을 할 수 있게 합니다
(예시로서 적절한지 모르겠습니다.. )
정리
- 캡슐화는 객체의 데이터와 메서드를 하나로 묶고, 외부로부터 보호하는 개념.
- 합성은 여러 객체를 조합해 새로운 기능을 만드는 방식으로, 상속보다 더 유연한 객체 재사용을 가능하게 함.
- 다형성은 같은 인터페이스나 메서드를 사용하되, 객체마다 다른 방식으로 동작하는 특성으로, 유연성과 확장성을 높여줌.
이러한 개념들은 객체 지향 프로그래밍의 핵심 원칙으로, 더 나은 코드 설계와 유지보수를 가능하게 한다.
'개발공부 > SOLID 원칙' 카테고리의 다른 글
D: Dependency Inversion Principle(의존성 역전 원칙, DIP) (0) | 2024.09.30 |
---|---|
I: Interface Segregation Principle(인터페이스 분리 원칙, ISP) (1) | 2024.09.30 |
O: Open/Closed Principle (개방-폐쇄 원칙, OCP) (2) | 2024.09.13 |
S : Single Responsibility Principle(단일 책임 원칙, SRP) (0) | 2024.09.13 |
1. SOLID 원칙이란? (2) | 2024.09.11 |