객체지향 프로그래밍이란?

  • 객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지 를 주고받고, 데이터를 처리할 수 있다. (협력)
  • 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다.

객체지향의 특징 4가지

  • 추상화
  • 캡슐화
  • 상속
  • 다형성

역할과 구현으로 분리(다형성)

  • 자바 언어의 다형성을 활용
  •  역할 = 인터페이스
  •  구현 =  클래스, 객체
  • 단순해져 변경에 유연해진다.
  • 클라이언트를 변경하지 않고, 서버의 유현기능만을 유연하게 변경 가능하다.
  • 확장에 유연
  • 인터페이스를 안정적으로 잘 설계하는 것이 중요하다

객체지향에선 다형성이 가장 중요한다.

스프링은 다형성을 극대화하여 사용할 수 있게 도와준다. ex) IoC, DI

 

SOLID
클린코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리

  • SRP: 단일 책임 원칙(single responsibility principle)

         - 한 클래스는 하나의 책임만 가져야 한다.

         - 변경이 있을 때 파급효과가 적어야 한다.

  • OCP: 개방-폐쇄 원칙 (Open/closed principle)

         - 확장에는 열려 있으나 변경에는 닫혀 있어야 한다.

         - 다음과 같이 다형성을 활용해 역할과 구현을 분리해도 서버단의 구현객체를 변경하려면 클라이언트 코드를 변경해야 한다.

MemberRepository m = new MemoryMemberRepository(); //기존 코드
MemberRepository m = new JdbcMemberRepository(); //변경 코드

 

         - 객체를 생성하고, 연관관계를 맺어주는 별도의 조립, 설정자가 필요하다.

  • LSP: 리스코프 치환 원칙 (Liskov substitution principle)

      - 프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
      -
    부모 클래스의 행동규약을 자식 클래스가 위반하지 말아야 한다.

    ex) 오버라이딩 잘 못 하는 경우 :

      1. 자식 클래스가 부모 클래스의 변수의 타입을 바꾸거나 메소드의 파라미터 또는 리턴값의 타입 or 갯수를 바꾸는 경우
      2. 자식 클래스가 부모 클래스의 의도와 다르게 메소드를 오버라이딩 하는 경우

     

  • ISP: 인터페이스 분리 원칙 (Interface segregation principle)

          - 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.

             즉, 역할을 여러 개로 구별하여 쪼개자.

  • DIP: 의존관계 역전 원칙 (Dependency inversion principle)

         - 추상화에 의존해야지 구체화에 의존하면 안된다.

            즉, 인터페이스에 의존하게 만들자.

         - 위의 OCP 예제 코드도 구현에 의존되어 있다.

 

결론 : 다형성만으로는 OCP, DIP를 지킬 수 없다.

          이를 spring에서 지원해준다.

'Spring > core' 카테고리의 다른 글

의존관계 자동 주입  (0) 2022.04.23
컴포넌트 스캔  (0) 2022.04.03
싱글톤 컨테이너  (0) 2022.04.02
스프링 컨테이너와 스프링 빈  (0) 2022.04.02
스프링 핵심 원리 이해 - 객체 지향 원리 적용  (0) 2022.04.02

+ Recent posts