본문 바로가기

solid

(3)
[SOLID] 객체지향 설계 5원칙 - LSP LSP (Liskov substitution principle) 자료형 S가 자료형 T의 하위형이라면, 프로그램에서 자료형 T의 객체는 프로그램의 속성을 변경하지 않고 자료형 S의 객체로 교체할 수 있다. 한마디로 객체는 프로그램의 정확성을 지키면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다 라는 말이다. 다형성의 관점에서 보았을 때 하위 클래스는 인터페이스 규약을 전부 지켜야지만 다형성을 지원할 수 있다. 자바에서 자식객체는 부모객체의 모든 속성을 가지고 있으며 부모객체의 확장 버전이기 때문에 가능한 속성이다. 이러한 점 때문에 필자는 상속(inheritance)라는 표현보다 확장(extend)라는 표현을 선호한다. 코드로 예를 들어보자. public abstract class Car { String..
[SOLID] 객체지향 설계 5원칙 - OCP OCP (Open Closed Principle) 개방 폐쇄 원칙 자신의 확장에는 개방되어 있고, 주변의 변화에 대해서는 폐쇄되어 있어야한다. 소프트웨어는 확장에 대해서는 개방되어야 하지만, 변경에 대해서는 폐쇄되어야 한다. - 로버트 C. 마틴 글로는 이해하기 힘들다. 개방 폐쇄의 원칙을 지키지 않고 있는 코드를 살펴보자. public class 아반떼 { public void 앞으로간다() {} public void 뒤로간다() {} } public class 쏘나타 { public void 앞으로간다() {} public void 뒤로간다() {} } public class 사람 { private 아반떼 차량 = new 아반떼(); } 만약 클라이언트인 사람이 차량을 바꾸게 된다면 코드가 어떻게 변..
[SOLID] 객체지향 설계 5원칙 - SRP SRP (Single Responsibility Principle) 단일 책임 원칙 클래스와 메소드는 하나의 역할만 해야한다. 어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. - 로버트 C. 마틴 아래의 코드는 단일 책임 원칙을 지키지 않고 있는 코드이다. public class PublicTransport { public void 탑승문을연다() {} public void 하차문을연다() {} public void 하차벨을누른다() {} public void 목적지로이동한다() {} public void 트렁크에짐을싣는다() {} } PublicTransport라는 대중교통이라는 클래스다. 버스와 택시의 행위를 모두 모으다 보니 버스의 역할도 해야하고 택시의 역할도 해야한다. 단일 책임 원..