개발자 99% 커뮤니티에서 수다 떨어요!
오늘 TIL 3줄 요약
부끄럼쟁이 코드를 계속 유지함으로써, 결합도를 계속 낮게 유지할 수 있도록 하자.
프로그램이란 입력을 출력으로 바꾸는 사고방식으로 돌아갈 필요가 있다.
상속도 결합이다.
TIL (Today I Learned) 날짜
2022.03.26
오늘 읽은 범위
5장. 구부러지거나 부러지거나
책에서 기억하고 싶은 내용을 써보세요.
높은 결합도는 변경의 적이다. 결합도가 높으면 이리저리 연결되어 있어서 여러 가지를 동시에 바꿔야 하기 때문이다. - 182p
다른 객체의 내부 상태에 따라 판단을 내리고 그 객체를 갱신해서는 안 된다. 객체의 내부 상태를 묻는 것으로 인하여 캡슐화의 장점은 완전히 사라지고, 또 그 과정에서 구현에 대한 지식이 코드 여기저기로 퍼져 버린다. - 186p
무언가에 접근할 때 “.”을 딱 하나만 쓰려고 노력해 보라. ‘무언가에 접근’한다
는 건 중간 변수를 사용하는 경우까지 포함해야 한다. 엮는 것들이 절대로 바뀌지 않을 것 같다면 이 규칙을 지키지 않아도 된다. 사실 여러분의 애플리케이션에 있는 것은 모두 바뀌리라 생각해야 한다. - 189p
어디서나 접근할 수 있는 데이터는 교묘하게 애플리케이션 컴포넌트 간의 결합을 만들어 낸다. 전역 데이터 하나하나는 애플리케이션의 모든 메서드에 갑자기 매개 변수가 추가된 것과 같은 효과를 낸다. - 190p
직접적으로 아는 것만 다루는 부끄럼쟁이 코드를 계속 유지하라. 그러면 애플리케이션의 결합도를 낮게 유지할 수 있을 것이고, 결과적으로 코드를 바꾸기 쉬워질 것이다. - 192p
스트림은 이벤트를 일반적인 자료 구조처럼 다룰 수 있게 해 준다. 이벤트의 리스트를 다룬다고 생각하면 된다. ...(중략)... 이벤트를 처리하고, 조합하고, 골라내는 등 우리가 아는 온갖 작업을 일반적인 자료 구조와 마찬가지 방법으로 할 수 있다. 심지어 이벤트 스트림과 일반 자료 구조를 조합할 수도 있다. - 202p
프로그램이란 입력을 출력으로 바꾸는 것이라는 사고방식으로 돌아갈 필요가 있다. 이렇게 생각하면 그동안 고민하던 많은 세부 사항이 모두 사라진다. 구조는 명확해지고 더 일관적으로 오류를 처리하게 되어 결합도 대폭 줄어들 것이다. - 207p
때에 따라선 요구 사항에서 시작하는 게 변환을 찾는 가장 쉬운 방법이다. 요구 사항에서 입력과 출력이 무엇인지 찾으면 전체 프로그램을 나타내는 함수가 정해진다. 이제 입력을 출력으로 바꿔 가는 단계들을 찾으면 된다. - 210p
데이터를 전체 시스템 여기저기의 작은 웅덩이에 흩어 놓는 대신, 데이터를 거대한 강으로, 흐름으 로 생각하라. 데이터는 기능과 동등해진다. 데이터는 더 이상 클래스를 정의할 때처럼 특정한 함수들과 묶이지 않는다. 대신 우리 애플리케이션이 입력을 출력으로 바꾸어 나가는 진행 상황을 데이터로 자유롭게 표현할 수 있다. 이 말인즉슨 결합을 대폭 줄일 수 있다는 것이다. - 216p
상속도 일종의 결합이다. 자식 클래스가 부모 클래스, 부모의 부모, 또 그 부모에게 연결되는 것은 물론이요, 자식 클래스를 사용하는 코드도 이 클래스의 모든 조상과 얽히게 된다. - 226p
오늘 읽은 소감은? 떠오르는 생각을 가볍게 적어보세요
결국은 또 다시 ETC다. 그리고 이번 챕터에서 다루는 결합도는 ETC한 코드를 만들기 위해 가장 중요한 요소가 아닐까하는 생각이 든다. 코드에서 문제가 생긴 부분을 고치려고 하는데, 코드의 여러 부분이 이리저리 결합되어 있어 다른 부분도 건드려야 하는 상황을 상상해보는 것만으로도 끔찍하다. 돌이켜보면, 가장 수정하기 두려울 때가 여러 부분이 서로 결합되어 있을 때였던 것 같다.
결합도를 낮출 수 있는 여러 팁들이 정말 물밀듯 쏟아졌다. 이미 알고 있던 팁도 있었고, 몰랐지만 읽어보면서 깊은 인상을 받았던 부분도 있었는데, 앞으로 코딩할 때마다 계속 되새겨야겠다.
상속도 결합이라는 건 당연하지만, 인식하지 못하고 있던 문제였다. 책에서 언급한 대로, 특정 class를 수정해야하는 사항이 생겨 수정했는데, 그 부모, 그 부모의 부모 class까지 연결이 되어있어 제대로 수정되지 않는 상황을 상상해보니 정말 끔찍했다. 그리고 IS-A보다 HAS-A가 낫다는 문장이 정말 상속과 관련된 부분을 꿰뚫는 문장인 것 같다는 생각이 들었다.
프로그램이란 입력을 출력으로 바꾸는 것이란 사고방식으로 돌아갈 필요가 있다고 이야기하며, 특정 문제를 파이프라인 형태로 해결하고, 이를 통해 결합이 생길 여지를 없애는 걸 보여줬던 부분이 인상적이었다. 결국 문제를 복잡하게 만들지 않으려면, 최대한 단순하게 생각해야 한다.
궁금한 내용이 있거나, 잘 이해되지 않는 내용이 있다면 적어보세요.
여러분의 코드에 있는 것이 싱글턴뿐이더라도, 외부로 노출된 인스턴스 변수가 잔뜩 있는 싱글턴은 여전히 전역 데이터이다. (참고 : https://tecoble.techcourse.co.kr/post/2020-11-07-singleton/)
유한 상태 기계 (Finite State Machine, FSM) : 유한한 상태를 가질 수 있는 오토마타로, 한 번에 한 가지 상태를 가질 수 있으며, 어떠한 event에 의해 상태를 transition할 수 있다. (참고 : https://ko.wikipedia.org/wiki/%EC%9C%A0%ED%95%9C_%EC%83%81%ED%83%9C_%EA%B8%B0%EA%B3%84)
오늘 읽은 다른사람의 TIL