Skip to content

Latest commit

 

History

History
60 lines (42 loc) · 2.89 KB

File metadata and controls

60 lines (42 loc) · 2.89 KB

OOP 핵심 4원칙

  • 캡슐화 : 객체의 필드와 메서드를 하나로 묶고 실제 구현 내용을 감추는 것
  • 상속 : 상위 객체는 하위 객체에게 자신의 필드와 메서드를 물려줄 수 있음
  • 다형성 : 하나의 타입에 여러 객체를 대입해서 다양한 기능을 이용할 수 있음
  • 추상화 : 공통된 특성을 추출해서 공통된 추상화로 간추리는 것

SOLID 원칙

로버트 마틴이 정의한 객체지향 설계의 5원칙

  • SRP : 한 컴포넌트에는 하나의 책임만 따른다.
  • OCP : 소프트웨어 요소는 확장에는 열려 있지만 변경에는 닫혀 있어야 한다.
    • 요구사항 변경이나 추가가 발생해도 기존 구성요소를 수정하기 보다는 확장 및 재사용이 가능하도록 설계해야 한다는 뜻
  • LSP : 객체는 정확성을 깨뜨리지 않으면서 하위 타입 인스턴스로 변경될 수 있어야 한다.
  • ISP : 하나의 통합 인터페이스보다는 여러 개의 구체적인 인터페이스를 사용해야 한다.
  • DIP : 추상화에 의존하고, 구체화에 의존하면 안 된다.

Overloading과 Overriding의 차이

Overloading

  • 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
  • 메서드의 이름을 통일해서 프로그램의 가독성을 증가시킬 수 있음

Overriding

  • 부모로부터 상속받은 메서드 로직을 재정의하는 것
  • 부모의 것과 동일한 return 타입, 매개 변수들을 사용해야 함

응집도와 결합도

Cohesion and Coupling

높은 응집도, 낮은 결합도를 추구해야 함
모듈 = 클래스일수도, 패키지일수도, 심지어 마이크로서비스일수도 있는 객체 단위

응집도(Cohesion)

  • 모듈 내 요소들이 서로 얼마나 밀접하게 연결되어 있는지
  • "함께 변경된 코드는 함께 유지된다"
  • 모듈이 관련 없는 요소를 포함한 경우 "응집도가 낮다"고 표현
  • SRP와 연관된 개념이며, 모듈은 단일 책임 원칙을 가져야 한다고 강조
  • 높은 응집도의 장점
    • 모듈이 하나의 목적을 추구하므로 가독성이 좋아진다
    • 모듈 관련 코드는 모두 모듈 안에 있으므로 영향 범위를 줄이면서 기능을 수정할 수 있다
    • 모듈 간 의존성이 적어지므로 단위 테스트에 용이하다

결합도(Coupling)

  • 모듈 간 상호 의존 정도
  • 한 가지를 수정했을 때 다른 수정사항이 얼만큼 발생하는지
  • 낮은 결합도의 장점
    • 모듈 간 강결합은 구조를 이해하기 어렵게 만들며, 변경이 어려워진다
    • 강결합된 경우 단위 테스트를 하기에도 어렵다
    • 강결합된 경우 통합 테스트 또한 깨지기 쉬워진다

Reference