미완성🌘
아직 완독 전이며, 추가로 작성해나가는 중입니다 ✍🏻
책에 멋진 내용이 많으니 꼭 구매하거나 대여해서 읽어보는 걸 추천드립니다
디자인 패턴, 객체 지향 프로그래밍을 배울 수 있다.
(참고로 나는 디자인패턴을 정보처리기사 (생)성(구)조(행)위 따위로 외운 수준이다)
내 경우엔 기껏 구현 해놨는데 전혀 쓸모가 없는 경우가 많았다. 무분별하고 무의미하게 만들어진 메소드를 남발해서 코드의 가독성이 떨어지는 경우도 있다. 기능을 만들다보니 추가해야하고 삭제해야 할 부분이 수도 없이 많았다.
달라지는 부분을 찾아서 나머지 코드에 영향을 주지 않도록 '캡슐화' 한다
그러면 나중에 바뀌지 않는 부분에서 영향을 미치지 않고 그 부분만 고치거나 확장함으로써 시스템의 유연성을 향상 시킬 수 있다
➡️ 쓸데 없는 일을 줄일 수 있다는 말이다
행동은 여러가지로 표현할 수 있다.
새를 예로 들자면 날 수도 있고, 날지 못하는 새도 있다. 소리가 나는 새가 있고 소리가 나지 않는 새가 있다.
이런 특정 행동을 인터페이스로 구현한다.
그럼 새 클래스에서는 새의 행동을 구체적으로 구현할 필요가 없다.
" 인터페이스에 맞춰서 프로그래밍 한다 " 라는 말은 사실
"상위 형식에 맞춰서 프로그래밍 한다" 는 말이다
이 말은 변수를 선언할 때 보통 추상 클래스나 인터페이스 같은 상위 형식으로 선언해야 한다. 객체를 변수에 대입할 때 상위 형식을 구체적으로 구현한 형식이라면 어떤 객체든 넣을 수 있기 때문이다 그럼 변수를 선언하는 클래스에서 실제 객체의 형식을 몰라도 된다.
새는 날 수 있고 울 수 있다. 이 두 클래스를 합치는 것은 구성(composition)을 이용한다라고 부른다
구성을 활용해서 시스템을 만들면 유연성을 크게 향상시킬 수 있다. 단순히 알고리즘군을 별도의 클래스 집합으로 캡슐화할 수 있으며 구성 요소로 사용하는 객체에서 올바른 행동 인터페이스를 구현하기만 하면 실행 시에 행동을 바꿀 수 있다. 일단 상속에 대해서 깊이 생각해보다. 상속 외에도 재사용을 이룰 수 있는 여러가지 방법이 있다.
여기까지 전략 패턴(Strategy Pattern) 에 대해 알아봤다
전략패턴은 알고리즘군을 정의하고 캡슐화해서 각각의 알고리즘군을 수정해서 쓸 수 있게 해준다. 전략 패턴을 사용하면 클라이언트로부터 알고리즘을 분리해서 독립적으로 변경할 수 있다.
https://plposer.tistory.com/16
이곳에 굉장하게 정리가 잘 되어있다. 시간되면 읽어보는 걸 추천한다
관리가 용이한 객체지향 시스템을 만드는 비결 중 하나가 "나중에 어떻게 바뀔 것인지"에 대해 생각해보는 것이다.