객체지향 프로그래밍

2020년 10월 27일, 22:51

객체 지향 프로그래밍

객체 지향은 객체 중심의 프로그래밍이다.

컴퓨터를 중심으로 사고하는게 아니라 인간 중심적인 프로그래밍이다.

현실 세계에 존재하는 사물들을 객체라고 보고 그 객체로부터 개발하고자하는 어플리케이션의 특징들을 뽑아 프로그래밍 하는 것이다. 이러한 과정을 추상화라고 한다.

객체 지향적 설계 원칙(SOLID)

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

    : 클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.

  • OCP (Open-Closed Principle 개방-폐쇄 원칙)

    : 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.

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

    : 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다

  • ISP (Interface Segregation Principle 인터페이스 분리 원칙)

    : 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.

  • DIP (Dependency Inversion Principle 의존 역전 원칙)

    : 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

객체 지향의 4대 특성

  • 추상화 - 모델링

    구체적인 것을 관심영역(해당 애플리케이션, 서비스의 도메인)에 있는 특성만을 가지고 재조합 하는 것

  • 캡슐화 - 정보 은닉

    접근제어자(private, protected, public)를 사용해 객체 외부에서 내부 데이터의 접근을 통제하는 것

  • 상속성 - 재사용 + 확장

    상위 클래스 특성을 하위 클래스에서 상속하고 더 필요한 속성을 확장해서 쓰는 것

  • 다형성

    • 오버라이딩 : 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의
    • 오버로딩 : 같은 이름의 메소드를 여러 개 가지면서 매개변수의 유형과 개수가 다르도록 하는 하는 것

객체 지향 프로그래밍의 장점&단점

  • 장점
    • 재사용성 - 상속을 통해 코드의 재사용성을 높임
    • 실제 세계에 존재하는 것들을 객체로 추상화 하는 과정에서 코드가 이해하기가 좀 더 편함
  • 단점
    • 처리 속도가 절차지향보다 느림
    • 설계에 많은 시간이 들어감

현재에는 함수지향 프로그래밍에 대한 관심도 높아지고 있는데, 이 이유는 객체지향 프로그래밍에서의 객체는 상태를 가지고 있는데, 변수가 존재하고 이 변수를 통해 객체가 예측할 수 없는 상태를 갖게 되어 어플리케이션 내부에서 버그를 발생시킨다. 이러한 이유로 함수형 패러다임이 주목받고 있다.

참고

https://sjh836.tistory.com/

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Development_common_sense#part-1-1-development-common-sense