객체지향 프로그래밍의 3요소 5원칙

객체지향 프로그래밍(OOP)을 접하면서 필수적으로 배우거나 알게 될 3가지 요소와 5가지 원칙이 있다.

3요소

  1. 캡슐화(Encapsulation) = 정보 은닉
    • 프로그램 내에서 같은 기능을 목적으로 작성된 코드를 모아서 다른 곳(클래스)에서 안보이게 숨기는 것.
    • 클래스 내에서 사용할 속성은 숨기고(Private), 객체가 수행할 기능은 공개(Public)하는 것을 의미한다.
  2. 상속(Inheritance) = 재사용 + 확장
    • 클래스 사이에 부모와 자식 클래스가 존재할 수 있다는 뜻.
    • 자식 클래스는 상속받은 부모 클래스의 속성 및 기능을 사용할 수 있다.
  3. 다형성(Polymorphism) = 사용편의
    • 하나의 객체가 여러 가지 형태를 가질 수 있는 것.
    • 오버라이딩(Overriding)
      • 부모 클래스에 정의되어 있는 메서드를 자식클래스에서 재정의하여 사용하는 것.
    • 오버로딩(Overloading)
      • 같은 이름을 가진 메서드를 인자값의 종류나 개수를 다르게 하여 다른 기능을 구현하도록 정의하는 것.

5원칙 (SOLID 원칙)

  1. 단일 책임 원칙(Single Responsibility Principle)
    • 모든 클래스는 각각 하나의 책임만 가져야 한다. 즉, 특수한 목적을 수행하도록 만든 클래스는 해당 목적 외에 다른 기능을 수행하면 안된다.
  2. 개방-폐쇄 원칙(Open Closed Principle)
    • 클래스는 확장에는 열려있고 수정에는 닫혀있어야 한다. 즉, 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계되어야 한다.
  3. 리스코프 치환 원칙(Liskov Substitution Principle)
    • 자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 한다. 즉, 자식 클래스는 부모 클래스의 책임을 무시하거나 재정의하지 않고 확장만 수행하도록 해야한다.
  4. 인터페이스 분리 원칙(Interface Segregation Principle)
    • 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하지 말아야 한다. 하나의 일반적인 인터페이스보다 여러 개의 구체적인 인터페이스가 낫다.
  5. 의존 관계 역전 원칙(Dependency Inversion Principle)
    • 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존해야 한다. 즉, 구체적인 클래스보다는 인터페이스나 추상 클래스와 관계를 맺어야 한다.