// 실제 코드, element인스턴스가 3개의 메서드에서 모두 사용되고 있다.classStack { var elements = [Int]()funcsize() ->Int {return elements.count }funcpush(_element: Int) { elements.append(element) }funcpop() ->Int? {guard!elements.isEmptyelse { returnnil }return elements.removeLast() }}
변경하기 쉽게 만들자 (open closed)
다형성과 연결되는 부분이다.
새 기능을 수정하거나 기존 기능을 변경할 때, 코드의 변경으 최소화하는 것이 중요하다.
일반적으로 클래스(객체)는 구현과 추상으로 나뉜다.
구현(Concrete) : 실제 동작하는 구체적 코드
추상 (Abstract) : 구체적인 기능을 개념화한 코드
변경하기 쉽게 설계하기 위해서, 추상화를 통해 구체 클래스에 의존하지 않고, 추상 클래스에 의존하도록 코드를 작성하는 것이 중요하다.