좋은 객체 지향 설계의 5가지 원칙(SOLID)

2022. 3. 13. 11:34·Web

좋은 객체 지향 설계의 5가지 원칙 (SOLID)

 

SRP - 단일 책임 원칙

한 클래스는 하나의 책임만 가져야 한다. UI 변경, 객체의 생성과 사용을 분리

 

OCP - 개방-폐쇄 원칙

확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 다형성을 활용, 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현, 이를 하기 위해서는 DI가 필요

 

LSP - 리스코프 치환 원칙

프로그램의 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다. (자동차 인터페이스의 엑셀은 앞으로 가라는 기능이다. 뒤로 가게 구현하면 LSP를 위반한 것이다.)

 

ISP - 인터페이스 분리 원칙

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

 

DIP - 의존관계 역전 원칙

프로그래머는 추상화에 의존해야지, 구현에 의존하면 안 된다. 구현 클래스에 의존하지 말고 인터페이스에 의존해야 한다 라는뜻.

(연기자가 연기를 하는데 특정 배우와만 연기할 수 있다는 것은 말이 안 됨. 대본(인터페이스)만 있으면 어느 연기자와도 연기(기능)가 가능해야 함.)

 

자바 기본 특징으로는 

- 추상화

- 캡슐화

- 상속성

- 다형성

4가지가 있다. 그 중 다형성이 가장 중요하다.

다형성

자동차라는 객체가 있고 그 하위 자식으로 현대차, 테슬라, 벤츠 가 있다고 할 때,

사용자는 어떤 자동차인지 관계없이 운전을 할 수 있다.

사용자는 인터페이스만 알면 되고, 구현부는 알 필요가 없기 때문.

→ 역할(인터페이스)이 구현(클래스, 객체) 보다 중요하다.

인터페이스가 변경되지 않도록 잘 설계하는 게 중요하다.

제어의 역전(IoC), 의존관계 주입(DI)은 다형성을 활용해서 역할과 구현을 편리하게 다룰 수 있도록 지원한다.

스프링을 사용하면 마치 레고 블록 조립하듯이 공연 무대의 배우를 선택하듯이 구현을 편리하게 변경할 수 있다.

 

실무 고민

  • 인터페이스를 도입하면 추상화라는 비용이 발생한다
  • 기능을 확장할 가능성이 없다면, 구체 클래스를 직접 사용하고, 향후 꼭 필요할 때 리팩터링 해서 인터페이스를 도입하는 것도 방법이다.

 

객체지향 책 추천 : 객체지향의 사실과 오해

스프링 책 추천 : 토비의 스프링 (필수 책)

JPA 책 추천 : 자바 ORM 표준 JPA 프로그래밍 (저자 김영한)

 

 

관심사 분리 - https://mildwpaper.tistory.com/22

출처 - https://www.inflearn.com/course/스프링-핵심-원리-기본편/dashboard

'Web' 카테고리의 다른 글

JPA N+1 문제  (0) 2022.03.16
관심사의 분리  (0) 2022.03.13
JPA 기본키 생성 전략  (0) 2021.10.31
아파치와 톰캣의 차이  (0) 2020.11.01
HttpServletRequst와 HttpServletResponse  (0) 2020.11.01
'Web' 카테고리의 다른 글
  • JPA N+1 문제
  • 관심사의 분리
  • JPA 기본키 생성 전략
  • 아파치와 톰캣의 차이
마술사의 수습생
마술사의 수습생
언젠간 당신처럼 되고 싶어요.
  • 마술사의 수습생
    개발 기록 블로그
    마술사의 수습생
  • 전체
    오늘
    어제
    • 분류 전체보기 (53)
      • Web (50)
      • 일기 (2)
      • 잡담 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
마술사의 수습생
좋은 객체 지향 설계의 5가지 원칙(SOLID)
상단으로

티스토리툴바