객체 지향적으로 설계하기 위해 SOLID
라 불리는 다섯 가지 원칙이 있습니다. SOLID 객체 지향 원칙을 적용하면 1) 코드를 확장하고 2) 유지 보수 관리하기 더 쉽고 3)복잡성을 제거해 리팩토링 소요시간 단축함으로써 4) 프로젝트 개발의 생산성을 높일 수 있습니다.
S
ingle Responsibilty Principle (SRP), 단일 책임의 원칙하나의 클래스는 하나의 기능만 담당하여 하나의 책임을 수행하는데 집중해야한다는 원칙입니다. 단일 책임 원칙의 목적은 프로그램의 유지보수성을 높이는데 있습니다.
O
pen Close Principle (OCP), 개방 폐쇄 원칙추상화 사용을 통한 관계 구축을 권장하는 원칙입니다. 다형성과 확장을 가능하게 하는 객체지향의 기본적인 설계원칙이라고 할 수 있습니다.
이 원칙의 예시로, 자바에서는 상속을 받아서 하위 클래스에서 오버라이딩 등을 하는 것은 가능하지만, 외부 class에서 접근해 특정 field를 바꾸는 것을 제한하기 위해 접근 제한자(private, protected)
를 사용합니다. 내가 개발한 구성요소가 다른 사람에게 적절한 때 개방되고 폐쇄되는지 신중히 고민해봐야합니다.
L
iskov Subsitution Principle (LSP), 리스코프 치환의 원칙다형성 원리를 이용하기 위한 원칙입니다. 다형성의 특징을 이용하기 위해 상위 클래스 타입으로 객체를 선언하여 하위 클래스의 인스턴스를 받을때, 업캐스팅된 상태에서 부모의 메서드를 의도한대로 사용
되어야한다는 것입니다.
LSP의 예시로, 자바에서는 Collection 인터페이스를 들 수 있습니다. Collection 타입의 객체에서 LinkedList 에서 HashSet으로 바꿔도 add 메서드를 실행하는데 있어 원래 의도대로 작동됩니다.
I
nterface Segregation Principle (ISP), 인터페이스 분리의 원칙class 와 달리 interface는 다중 구현이 가능합니다다. 여러 interface 를 구현해도 되지만, 자신이 사용하지 않는 인터페이스는 구현하면 안 되는
원칙입니다. ISP 원칙은 인터페이스를 사용하는 클라이언트를 기준으로 분리
함으로써, 클라이언트의 목적과 용도에 적합한 인터페이스만을 제공하는 것이 목표입니다. 즉, 클라이언트가 사용하지 않는 인터페이스 때문에 영향을 받아서는 안 된다는 것이다.
D
ependency Inversion Principle (DIP), 의존성 역전의 원칙DIP 원칙은 어떤 클래스를 참조해서 사용해야하는 상황이 생긴다면, 그 클래스를 직접 참조하는 것이 아니라 그 대상의 상위 요소(추상클래스 혹은 인터페이스)로 참조
하라는 원칙입니다. 즉, 프로그래머는 구체화에 의존하는 것이 아닌 추상화에 의존
해야한다는 것입니다. DIP를 통해 클래스 간의 결합도를 낮출 수 있습니다.
Q 객체지향 설계 5원칙에 대해 설명해주세요
객체지향 설계 5원칙은 SOLID
라고도 합니다. 차례로, SRP - OCP - LSP - ISP - DIP 5가지 앞글자를 딴 것입니다. SRP
는 단일책임원칙으로, 한 클래스는 하나의 책임만 가져야한다는 원칙입니다. OCP
는 개방-폐쇄원칙으로 소프트웨어 요소는 확장에는 열려있으나 변경에는 닫혀있어야 한다는 원칙입니다. LSP
는 리스코프 치환 원칙으로, 상속받은 하위 클래스는 어디서나 상위 클래스로 교체될 수 있어야 한다는 원칙입니다. ISP
는 인터페이스 분리 원칙으로, 한 클래스는 자신이 사용하지 않는 인터페이스는 구현하면 안 된다는 원칙입니다. 마지막으로 DIP
는 의존성 역전 원칙으로, 의존성 관계를 맺을 때 변화가 쉬운 것보단 변화가 없는 것에 의존관계를 맺어야 한다는 원칙입니다.