Code in Life
객체지향과 SOLID(5대 원칙) 본문
객체지향이란
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법
장점
- 코드 재사용성이 높다.
- 유지보수가 쉽다
- 대형 프로젝트에 적합함 → why? 클래스 단위로 모듈화 개발 업무분담이 가능
단점
- 설계 시 많은 노력과 시간이 필요함
특징(=Java의 특징 4가지)
- 추상화 : 불필요한 정보는 숨기고 필요한 정보만을 표현함으로써 공통된 속성이나 기능을 묶어 이름을 붙일 수 있습니다.
- 캡슐화 : 관련된 기능(메소드)과 속성(변수)을 한 곳에 모으고 분류하기 때문에 재활용이 원활하다. 또한 정보 은닉이 가능합니다. : 응집도를 높이고 결합도를 낮춘다.
- 상속 : 부모 클래스의 속성과 기능을 이어 받아 사용할 수 있고 필요에 따라 다시 정의하여 사용할 수 있습니다. 또한, 코드를 공통적으로 관리하여 코드 추가 및 변경이 용이하다.
- 다형성 : 하나의 변수명, 함수명 등이 상황에 따라서 다른 의미로 해석될 수 있습니다. 즉, 오버라이딩, 오버로딩이 가능합니다.
SOLID(객체지향 설계원칙 5가지)
SRP, OCP, LSP, DIP, ISP
- SRP(Single Responsibility Principle) : 단일 책임 원칙→ 한 클래스가 수행할 수 있는 기능, 즉 책임이 많아지면 클래스 내부 메소드끼리 강한 결합을 발생할 가능성이 높아진다. 이는 유지보수 비용의 증가로 이어지기 때문에 책임을 분리시킬 필요가 있다.
- 객체는 단 하나의 책임을 가져야 합니다.
- OCP(Open Closed Principle) : 개방 폐쇄 원칙→ 자주 바뀔만한 메소드는 인터페이스와 오버라이딩을 활용한다.
- 기존의 코드를 변경하지 않고 기능을 수정하거나 추가할 수 있도록 설계해야 한다.
- LSP(Liskov Substitution Principle) : 리스코프 치환 원칙
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- ISP(Interface Segregation Principle) : 인터페이스 분리 원칙
- 인터페이스는 각각 독립된 인터페이스로 구현하여, 서로에게 영향을 받지 않도록 설계해야한다. ISP를 만족하면 시스템 내부 의존성을 약화시켜 리팩토링, 수정, 재배포를 쉽게 할 수 있다.
- DIP(Dependency Inversion Principle) : 의존 역전 원칙*JAVA 객체 지향 디자인 패턴(정인상/채홍석 지음, 한빛미디어, 2014) p.121 인용
- → 변화하기 쉬운 것이란 구체적인 것(구체화된 클래스), 변화하기 어려운 것은 추상적인 것(추상 클래스 및 인터페이스)을 의미한다. DIP를 만족하면 '의존성 주입' 이라는 기술로 변화에 유연한 설계를 할 수 있다. 아래는 playAlgorithm라는 인터페이스의 의존성을 주입시킨 예시이다.
- 의존 관계를 맺을 때, 변화하기 쉬운것 보단 변화하기 어려운 것에 의존해야 한다는 원칙이다.
참고
'Java' 카테고리의 다른 글
JVM의 구조와 Java의 실행과정, Garbage Collection 동작원리 (0) | 2020.12.23 |
---|
Comments