객체지향프로그래밍에 대해 알아본다

1. OOP 란?

객체지향 프로그래밍이 가지고있는 4가지 특징< 추상화, 캡슐화, 상속성, 다형성 >을 이용해 프로그램을 유연하고 변경이 용이하게 만드는 장점을 얻기 위해 객체들끼리 상호작용을 할 수 있게 해주는 프로그래밍 이다.

2. OOP의 4가지 특징

  • 추상화 ( Abstraction )
    • 구체적인 것을 분해해서 관심 영역에 있는 특성만을 가지고 재 조합 하는 것을 말한다. 이것은 모델링이라고도 표현한다.
    • 예제참고 ( https://expert0226.tistory.com/212 )
  • 캡슐화 ( Encapsulation )
    • 보통 클래스로 예를 많이 드는데, 캡슐화 할때 멤버마다 접근 가능한 범위를 지정할수 있는 은닉화를 하는 것을 말한다.
  • 상속성 ( Inheritance )
    • 부모클래스의 속성과 기능을 자식클래스가 물려받아 사용하는 것을 말한다.
    • 자식클래스는 부모클래스로 부터 물려받은 것들을 상황에 따라 수정해서 사용할 수 있다. (오버라이딩)
  • 다형성 ( Polymorphism )
    • 동일한 요청에 대해 다양한 실행결과를 내놓는 것을 말한다. (오버로딩)

3. OOP 장점과 단점

그렇다면 OOP를 통해 어떠한 장점과 단점을 얻을 수 있을까?

  • 장점
    • 위 4가지 특징을 이용하여 면밀한 자료분석 및 개발시간의 단축 및 좀 더 정확한 코딩을 보증한다.
  • 단점
    • 장점으로 인해 코드의 난이도가 급상승 하게 된다. 특히 다중상속이 가능할 경우 코드가 엄청나게 복잡해진다.

4. OOP의 5대원칙 ( SOLID )

  • 단일책임 원칙 ( Single Responsiblility Principle )
    • 객체는 단 하나의 책임 혹은 목적만 가져야 한다.
  • 개방/폐쇄 원칙 ( Open Closed Principle )
    • 클래스가 확장에는 개방되어 있고, 변경에는 닫혀있어야 한다는 것으로, 이 시스템에서 일할 개발자들이 기존 클래스를 수정하는 것을 허용하거나 권장하지말고, 새로운 기능을 제공하기 위해서는 기존 클래스를 확장하는 방법을 찾아야 한다는 것을 의미한다.
  • 리스코프 치환 원칙 ( Liskov Substitution Principle )
    • 동일한 인터페이스 객체는 클라이언트 프로그램 동작에 영향을 미치지 않고 상호 교환 가능해야 한다는 의미이다.
    • 예제참고 ( https://nesoy.github.io/articles/2018-03/LSP )
  • 인터페이스분리 원칙 ( Interface Segregation Principle )
    • 클라이언트가 사용하지 않는 메서드에 대해서는 의존하지 않아야 한다. 다시 말해 인터페이스를 클라이언트에 특화되도록 분리시키라는 설계 원칙이다.
    • 예제참고 ( http://wonwoo.ml/index.php/post/1675 )
  • 의존역전 원칙 ( Dependency Inversion Principle )
    • 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라는 것이다.
    • 예제참고 ( https://server-engineer.tistory.com/228 )
Tags: