객체지향 프로그래밍 특징과 SOLID 원칙

고현규·2023년 11월 27일

객체지향 프로그래밍의 4가지 특징

1. 추상화

  • 공통된 특징을 모아서 추출한다.
  • 설계(역할)와 구현을 분리한다.
  • 인터페이스 등을 이용해서 객체가 가져야 할 핵심적 기능을 규정(설계)
  • 인터페이스를 상속받은 클래스에서 구현한다. (구현)

2. 상속

  • 기존의 클래스를 재활용하여 새로운 클래스를 만든다.
  • 반복적인 코드를 최소화, 오류를 줄여준다.
  • 메서드 오버라이딩을 통해 재정의한다.

3. 다형성

  • 어떤 객체의 속성이나 기능이 상황에 따라 여러가지 형태를 가질 수 있는 성질

4. 캡슐화

  • 변수와 함수를 하나의 클래스로 묶고 외부에서 쉽게 접근하지 못하게 은닉
  • 접근제어자 (public, private, protected, getter, setter etc.)

출처 : https://incheol-jung.gitbook.io/docs/q-and-a/architecture/undefined-1



객체지향 설계원칙 - SOLID 원칙

SRP (Single Responsibility Principle, 단일 책임의 원칙)

  • 하나의 클래스는 하나의 책임만 갖는다.
  • 너무 많은 기능을 넣지 않는다.
  • 기준이 모호하다는 비판, 각자의 SRP 기준은 다를 수 밖에 ㅇ벗다.
  • 변경사항이 있을 때, 애플리케이션의 파급 효과가 적으면 SRP 원칙을 잘 따른 것으로 볼 수 있다.

OCP (Open Closed Principle, 개방폐쇄의 원칙)

  • 높은 응집도와 낮은 결합도
  • 확장에 대해서는 개방적이고, 수정에 대해서는 폐쇄적
  • 유연한 코드 수정, 쉽게 확장할 수 있게 설계
  • 객체를 직접 수정하는 것을 제한

LSP (Liskov Substitution Principle, 리스코프 치환 원칙)

  • 프로그램의 정확성을 깨지 않으면서 하위 타입의 인스턴스(객체)로 변환
  • 하위클래스는 인터페이스의 규약을 잘 지켜야 한다.
  • 자식 객체는 부모 객체를 완전히 대체할 수 있어야 한다.

ISP (Interface Segragaion Principle, 인터페이스 분리 원칙)

  • 범용 인터페이스 하나보다는, 특정 클라이어트를 위한 여러 개의 인터페이스 분라기 좋다.

출처 : Inpa 티스토리 (inpa.tistory.com)

DIP (Dependencty Inversion Principle, 의존관계 역전 원칙)

  • 구체화가 아니라 인터페이스에 의존하라.

  • 구현 클래스(구현체)가 아니라 인터페이스(역할)에 의존해라.
    ex) 4번타자는 OO을 써야해(x) -> 4번 타자는 장타율이 높고 홈런을 잘치는 선수를 써야 해(o)



객체 '지향' 프로그래밍

절대 법칙이 아니다!

  • SOLID 법칙 중 DIP 원칙과 상속은 서로 모순된 내용을 지니고 있다.
    High-Level Dependency 인터페이스를 사용하면 메소드 Override를 지양해야 한다.

  • 프로젝트에 맞는 설계 방식과 원칙을 '생각'해야한다.

profile
게임 개발과 기획

0개의 댓글