Continuous Challenge

객체 지향 본문

Interview

객체 지향

응굥 2022. 4. 26. 19:44
728x90
728x90

객체 지향 프로그래밍(OOP, Object Oriented Programming)

현실 세계의 사물들을 객체라고 보고 그 객체로부터 개발하고자 하는 특징들을 뽑아와 프로그래밍 하는 것. (추상화)

코드의 재사용성이 높다. 자주 사용되는 로직을 라이브러리로 만들어두면 계속해서 사용가능하며 신뢰성을 확보할 수 있다. 또한 라이브러리를 각종 예외상황에 맞게 잘 만들어두면 에러를 컴파일 단계에서 잡아낼 수 있으므로 버그 발생이 줄어든다.

또한 내부 동작을 알지 못하더라도 라이브러리가 제공하는 기능들을 사용할 수 있기 때문에 생산성이 높아지게 된다.

객체 단위로 코드가 나눠져 작성되기 때문에 디버깅이 쉽고 유지보수에 용이하다.

 

객체 간의 정보 교환이 모두 메시지 교환을 통해 일어나므로 실행 시스템에 많은 overhead가 발생한다.

하지만 이것은 하드웨어의 발전으로 많은 부분 보완되었다.

 

객체 지향 프로그래밍의 치명적인 단점은 객체가 상태를 갖는다는 것이다.

변수가 존재하고 이 변수를 통해 객체가 예측할 수 없는 상태를 갖게 되어 애플리케이션 내부에서 버그를 발생시킨다.

→ 함수형 패러다임의 등장 배경

 

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

  1. SRP(Single Responsibility Principle) : 단일 책임 원칙
    클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
  2. OCP(Open-Closed Principle) : 개방-폐쇄 원칙
    확장에는 열려있어야 하고 변경에는 닫혀 있어야 한다.
  3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
    상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
    인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
  5. DIP(Dependency Inversion Principle) : 의존 역전 원칙
    고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

 

 

 

 

728x90
728x90

'Interview' 카테고리의 다른 글

스프링 DI, IoC  (0) 2022.04.26
Comments