본문 바로가기

한화시스템 BEYOND SW캠프/TIL

[3주차] 24.01.23 화요일

상속과 합성
is-a 관계 / has-a 관계

 

상속은 모든 자식들에게 공통적으로 적용될 수 있는 요소나 인터페이스를 제공하는 것이다.

따라서 specific한 것들은 하위 클래스에서 구현해야 한다.

 

클래스가 서로 다른 속성이나 기능들을 갖고 있을 때 상속을 사용한다. 하지만 상속관계에서는 자식클래스와 부모클래스의 결합도가 높고, 여러 기능을 조합해야 하는 설계에서 클래스를 하나씩 추가하다 보면 수많은 클래스가 생성되는 클래스 폭발 문제가 발생할 수 있다.

 

합성
Composition

 

합성은 기존 클래스를 상속을 통해 확장하는 대신, 필드로 클래스의 인스턴스를 참조하게 만드는 설계이다.

e.g.) Car is an engine.(X) / Car has an engine.(O)

 

합성을 이용하면 객체의 내부는 공개되지 않고 인터페이스를 통해 코드를 재사용하기 때문에, 구현에 대한 의존성을 인터페이스에 대한 의존성으로 변경하여 결합도를 낮출 수 있다.

또한 합성 관계는 실행 시점에 동적으로 변경할 수 있기 때문에 좀 더 유연한 설계를 할 수 있다.

 

객체지향 설계의 원칙 5가지
SOLID

 

  • 단일 책임 원칙(Single Responsibility Principle) : 객체는 단 하나의 책임(담당하는 기능)만 가져야 한다. 즉, 하나의 클래스는 하나의 기능을 담당하여 하나의 책임을 수행하는데 집중되어있어야 한다.
  • 개방 폐쇄 원칙(Open Closed Principle) : 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계되어야 한다. 즉, 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적으로 설계해야 한다.
  • 리스코프 치환 원칙(Liskov Substitution Principle) : 서브타입은 언제나 기반타입으로 교체할 수 있어야 한다.
  • 인터페이스 분리 원칙(Interface Segregation Principle) : 범용적인 인터페이스보다는 사용자가 실제로 사용하는 인터페이스를 만들어야 한다. 즉, 인터페이스를 사용에 맞게끔 각기 분리해야 한다.
  • 의존 역전 원칙(Dependency Inversion Principle) : 클래스를 직접 참조하는 것이 아니라 그 대상의 상위 요소(추상 클래스 또는 인터페이스)로 참조해야 한다. 즉, 상위 인터페이스 타입의 객체로 통신해야 한다.

'한화시스템 BEYOND SW캠프 > TIL' 카테고리의 다른 글

[4주차] 24.01.29 월요일  (0) 2024.01.29
[3주차] 24.01.24 수요일  (0) 2024.01.24
[3주차] 24.01.22 월요일  (2) 2024.01.22
[2주차] 24.01.18 목요일  (0) 2024.01.18
[2주차] 24.01.17 수요일  (0) 2024.01.17