Notice
Recent Posts
Recent Comments
Link
나의 GitHub Contribution 그래프
Loading data ...
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

Code in Life

객체지향과 SOLID(5대 원칙) 본문

Java

객체지향과 SOLID(5대 원칙)

퓨끼 2020. 12. 24. 15:44

객체지향이란

프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법

장점

  • 코드 재사용성이 높다.
  • 유지보수가 쉽다
  • 대형 프로젝트에 적합함 → why? 클래스 단위로 모듈화 개발 업무분담이 가능

단점

  • 설계 시 많은 노력과 시간이 필요함

특징(=Java의 특징 4가지)

  • 추상화 : 불필요한 정보는 숨기고 필요한 정보만을 표현함으로써 공통된 속성이나 기능을 묶어 이름을 붙일 수 있습니다.
  • 캡슐화 : 관련된 기능(메소드)과 속성(변수)을 한 곳에 모으고 분류하기 때문에 재활용이 원활하다. 또한 정보 은닉이 가능합니다. : 응집도를 높이고 결합도를 낮춘다.
  • 상속 : 부모 클래스의 속성과 기능을 이어 받아 사용할 수 있고 필요에 따라 다시 정의하여 사용할 수 있습니다. 또한, 코드를 공통적으로 관리하여 코드 추가 및 변경이 용이하다.
  • 다형성 : 하나의 변수명, 함수명 등이 상황에 따라서 다른 의미로 해석될 수 있습니다. 즉, 오버라이딩, 오버로딩이 가능합니다.

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

SRP, OCP, LSP, DIP, ISP

  1. SRP(Single Responsibility Principle) : 단일 책임 원칙→ 한 클래스가 수행할 수 있는 기능, 즉 책임이 많아지면 클래스 내부 메소드끼리 강한 결합을 발생할 가능성이 높아진다. 이는 유지보수 비용의 증가로 이어지기 때문에 책임을 분리시킬 필요가 있다.
  2. 객체는 단 하나의 책임을 가져야 합니다.
  3. OCP(Open Closed Principle) : 개방 폐쇄 원칙→ 자주 바뀔만한 메소드는 인터페이스와 오버라이딩을 활용한다.
  4. 기존의 코드를 변경하지 않고 기능을 수정하거나 추가할 수 있도록 설계해야 한다.
  5. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
  6. 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  7. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
  8. 인터페이스는 각각 독립된 인터페이스로 구현하여, 서로에게 영향을 받지 않도록 설계해야한다. ISP를 만족하면 시스템 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다.
  9. DIP(Dependency Inversion Principle) : 의존 역전 원칙*JAVA 객체 지향 디자인 패턴(정인상/채홍석 지음, 한빛미디어, 2014) p.121 인용
  10. → 변화하기 쉬운 것이란 구체적인 것(구체화된 클래스), 변화하기 어려운 것은 추상적인 것(추상 클래스 및 인터페이스)을 의미한다. DIP를 만족하면 '의존성 주입' 이라는 기술로 변화에 유연한 설계를 할 수 있다. 아래는 playAlgorithm라는 인터페이스의 의존성을 주입시킨 예시이다.
  11. 의존 관계를 맺을 때, 변화하기 쉬운것 보단 변화하기 어려운 것에 의존해야 한다는 원칙이다.

참고

https://dev-momo.tistory.com/entry/SOLID-원칙

https://victorydntmd.tistory.com/291

'Java' 카테고리의 다른 글

JVM의 구조와 Java의 실행과정, Garbage Collection 동작원리  (0) 2020.12.23
Comments