이론 공부!/기술 면접 준비

[개발 지식] 객체 지향 4대 특징과 설계 원칙

TutleKing 2022. 8. 24. 21:22

객체지향 프로그래밍 - Object Oriented Programming

  • 현실 세계의 사물과 같이 객체를 만들고, 객체에서 필요한 특징을 뽑아 프로그래밍 수행
  • 4대 특징
    1. 추상화(Abstraction)
      • 객체들의 공통적인 특징을 뽑아 이름을 붙이는 것
    2. 캡슐화(Encapsulation)
      • 특정 객체가 독립적으로 역할을 수행하기 위해 필요한 데이터 및 기능을 하나로 묶은 것
      • 내부에서 정보 은닉을 통해 내부 결합도는 높이고 외부에서는 결합도를 낮추기 위함
      • 정보를 객체안에 포함시키고, 그 정보에 대한 직접적인 접근은 허용하지 않고, 인터페이스를 통해 외부에서 접근 할 수 있도록 함.
      • ex) 접근 제어자 : public, private
    3. 상속(Inheritance)
      • 상위 개념의 특징을 하위 개념이 물려 받음
      • 상위 클래스의 특성을 재사용하고 확장한다
      • 인터페이스
        • 다중 상속 대신에 사용
        • 어떤 객체가 해야할 일을 정의하는 추상 자료형
    4. 다형성(Polymorphism)
      • 모듈이 갖고있는 정체성과 표현 방식
      • 하나의 객체에 여러가지 타입을 대입할 수 있음
      • 오버라이딩 (형식이 같은데 기능이 다른 메소드)
        • 같은 메서드 이름/같은 인자 목록/상위 클래스의 메서드 재정의
      • 오버로딩 (리턴값이 다른 동일한 이름의 메소드)
        • 같은 메서드 이름/다른 인자 목록/다수의 메서드 종목 정의
💡 캡슐화와 은닉화의 차이? 캡슐화는 메서드 안에서 어떠한 일이 일어나고있는지 모르게 해야하는 것 은닉화는 외부에서 객체의 속성에 함부로 접근하지 못하게 하는 것
    • 설계 원칙(SOLID)
      1. SRP(Single Responsibility Principle) : 단일 책임 원칙
        1. 클래스는 단 하나의 책임을 가져야한다
        2. 클래스를 변경하는 이유는 단 하나의 이유여야 한다
      2. OCP(Open-Closed Principle) : 개방-폐쇠 원칙
        1. 확장에는 열려있어야 하고 변경에는 닫혀있어야한다.
        2. 코드의 일반화를 통해 코드의 변경 없이 확장이 가능하도록
          1. 코드의 추가는 변경이 아니다 
      3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
        1. 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야한다.
        2. 부모 객체를 자식 객체로 변경해도 프로그램에 문제가 없야함
      4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
        1. 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야함
        2. 객체가 필요로하는 기능만 가지도록 제한하는 원칙
        3. 불필요한 기능의 상속/구현을 최대한으로 방지
      5. DIP(Dependency Inversion Principle) : 의존 역전 원칙
        1. 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다
        2. 가급적 객체의 상속은 인터페이스를 통해 이루어져야하 한다
        3. 자식 class의 메소드 때문에 인터페이스를 고치는 행위는 있어서는 안된다.
    • <참고링크> https://blog.itcode.dev/posts/2021/08/17/dependency-inversion-principle
 

[OOP] 객체지향 5원칙(SOLID) - 의존성 역전 원칙 (Dependency Inversion Principle) - 𝝅번째 알파카의 개발

의존성 역전 원칙이란 객체는 저수준 모듈보다 고수준 모듈에 의존해야한다는 원칙이다. 말이 좀 어렵다. 고수준 모듈은 뭐고, 저수준 모듈은 또 뭐란 말인가? 고/저수준 모델의 정의는 위와 같

blog.itcode.dev

 

반응형