객체 지향 설계

이정연·2023년 1월 24일
0

기본지식

목록 보기
3/10

🎯객체 지향 설계 원칙 이란?

  • 좀 더 유지보수하기 쉽고, 유연하고, 확장이 쉬운 소프트웨어를 만들 수 있음
  • 코드 베이스뿐 아니라 아키텍쳐 설계에까지 다양하게 적용 가능함.
  • 결국 응집력이 높고 결합도는 낮은코드를 갖게 설계해야 좋은 것임

1. 응집력

  • 비슷한 일을 하는 기능 즉, 하나의 책임에 포함되는 기능들이 뭉쳐있다면 높은응집력을 가진다고 한다.
  • 하나의 기능을 변경하는데 여기저기 변경해야할 것들이 많다면 응집력이 낮은것임

2. 결합도

  • 클래스간에 의존성이 낮다면 낮은 결합도
  • 하나의 클래스를 수정하는데 다른 클래스를 모두 수정해야 한다면 결합도가 높다고 할 수 있다.

🎯SOLID

  • SRP, OCP, LSP, ISP, DIP의 첫 글자를 딴것

SRP(Single Responsibility Principle)

  • 단일 책임의 원칙
  • 클래스가 제공하는 기능들은 하나의 책임을 수행하는데 집중해야 한다.
  • 지키지 않는다면 응집력이 낮아지고 결합도는 높아짐
  • 잘지킨다면, 응집력은 높아지고 결합도는 낮아짐
  • AOP의 경우 별도의 부가기능을 핵심 로직에서 분리 했기 때문에 SRP를 잘 지킨 방식임

    역할 분리의 예
    Kevin 이라는 클래스가 있다면 다음의 역할들이있다.

    • 남편의 역할
    • 아빠의 역할
    • 아들의 역할
    • 사위의 역할
    • 친구의 역할
    • 직원의 역할 ...

OCP(Open Close Principle)

  • 개방 폐쇄의 원칙
  • 확장에는 열려있고, 변경에는 닫혀 있어야 한다.
  • 변하지 않는것과 변하는 것을 잘 구분해야 함.
  • 변하지 않는 것은 인터페이스를 통해 느슨하게 의존하게 만듬.

LSP(The Liskov Substitution Principle)

  • 리스코브 치환의 원칙
  • subclass의 객체는 superclass의 참조 변수에 대입해서 superclass의 역할을 수행하는데 문제가 없어야 한다.
  • 자식 클래스가 부모 클래스의 메소드에 담긴 의도 즉, 행동 규약을 위반하지 않아야 한다.

    위의 경우에서 MusicPlayer 의 play method의 경우 노래가사를 문자열로 리턴해야 한다.
    그런데 MusicPlayer를 주입받는 RapPlayer에서는 -1로 리턴하고있기때문에 LSP에 위배된다고 할 수 있다.

ISP(Interface Segregation Principle)

  • 인터페이스 분리의 원칙
  • 인터페이스의 단일 책임을 위한 원칙임
  • 일반적인 하나의 인터페이스를 좀 더 구체적인 인터페이스로 쪼개는 것 이좋다.
    • 새의 행동(일반적인 하나의 인터페이스
    • 날 수 있는 행동(구체적 인터페이스1)
    • 울 수 있는 행동(구체적 인터페이스2)

DIP(Dependency Inversion Principle)

  • 의존성 역전의 원칙
  • 자주변경되는 구체화 클래스에 의존하지 않고 추상화된 클래스에 의존하는 것
  • 상위 모듈은 하위 모듈에 의존해서는 안된다. 상위 모듈과 하위 모듈 모두 추상화에 의존해야 한다.
  • 추상화는 세부 사항에 의존해서는 안된다. 세부사항이 추상화에 의존해야 한다
profile
반갑습니다.

0개의 댓글